{"version":3,"sources":["kendo.dataviz.js"],"names":["f","define","$","window","undefined","Class","compilePart","part","stringPart","split","join","replace","first","charAt","rest","substring","pad","number","digits","end","length","zeros","getShadows","element","shadow","css","kendo","support","transitions","radius","match","boxShadowRegExp","blur","math","max","left","right","bottom","wrap","autosize","percentage","width","height","percentWidth","percentHeight","wrapper","wrapperStyle","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","hasClass","style","is","display","position","percentRegExp","test","boxSizing","mozBoxSizing","webkitBoxSizing","addClass","msie","floor","version","zoom","children","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","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","className","indexOf","overflow","scrollLeft","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","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","visible","expr","filters","parents","addBack","filter","kendoJQuery","selector","context","fn","Template","preventDefault","isDefaultPrevented","Observable","argumentNameRegExp","encodeRegExp","escapedCurlyRegExp","curlyRegExp","escapedSharpRegExp","sharpRegExp","directions","eventTarget","wrapExpression","localUrlRe","Widget","DataBoundWidget","ContainerNullObject","MobileWidget","MOUSE_EVENTS","EXCLUDE_BUST_CLICK_SELECTOR","MouseEventNormalizer","eventMap","getEventMap","eventRegEx","on","rootjQuery","animationFrame","animationQueue","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","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","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","integer","fraction","integerLength","fractionLength","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","decimal","POINT","precision","decimals","pattern","literals","negative","replacement","EMPTY","start","name","toLocaleString","standardFormatRegExp","exec","currency","percent","toExponential","round","groupInteger","literalRegExp","quoteChar","literal","PLACEHOLDER","SHARP","ZERO","COMMA","commaRegExp","lastIndexOf","EN","objectToString",",",".","groupSize","abbr","namesShort","d","D","F","G","m","M","s","t","T","u","y","Y","/",":","firstDay","twoDigitYearMax","cultureName","newGroupSize","groupSizes","shift","toFixed","min","fmt","values","index","placeholderFormat","parseInt","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","internalParseDate","tzoffset","dateRegExp","offsetRegExp","timezone","convert","nonBreakingSpaceRegExp","exponentRegExp","2","3","4","parseDate","parseExactDate","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","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","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","detectClipboardAccess","commands","copy","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","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","customElements","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","target","touches","originalEvent","changedTouches","elementFromPoint","clientX","clientY","callback","mousedown","mouseup","mousemove","mousecancel","click","resize","members","widgets","_widgetRegisteredCallbacks","ui","mobile","dataviz","drawing","spreadsheet","messages","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","webComponents","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","roleSelector","role","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","jQuery","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","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","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","direction","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","deferred","Deferred","then","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","removeClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","done","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","pow","easeOutBack","inner","outer","fitScale","absoluteURL","path","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","toOdataFilter","useOdataFour","operator","logic","odataFilters","odataFiltersVersionFour","stripMetadata","hex16","createBoundary","createDelimeter","boundary","close","NEWLINE","createCommand","transport","item","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","header","getOperationContent","content","DOUBLELINE","getOperations","collection","skipContent","requestBody","processCollection","colection","getBoundary","createBatchRequest","colections","batchURL","batch","headers","Content-Type","updated","destroyed","created","parseBatchResponse","responseText","changeBody","status","code","marker","jsonModel","responseMarkers","markerIndex","collections","models","passed","parse","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","isempty","isnotempty","mappers","pageSize","page","useVersionFour","$filter","orderby","order","$orderby","skip","$skip","take","$top","defaultDataType","read","dataType","schemas","odata","results","total","transports","jsonp","update","create","parameterMap","$inlinecount","$format","odata-v4","$count","ajax","success","response","responses","error","isPlainObject","XmlDataReader","idField","xmlParse","model","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","aggregates","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","mergeGroups","dest","group","flattenGroups","itemIndex","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","json","object","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","dirtyFields","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","compare","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","isnullorempty","isnotnullorempty","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","inPlace","orderBy","orderByDescending","compiled","predicate","allData","groupBy","_sortForGrouping","groupValue","sum","average","process","query","filterCallback","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","groups","fromName","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isServerGrouped","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","_updatePristineForModel","_removeItems","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","promises","_sendSubmit","_send","when","_accept","_change","cancelChanges","_cancelModel","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","requestParams","itemIds","_aggregateResult","endless","_changeHandler","updatePristine","_skip","timestamp","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","_queryProcess","_mergeState","_currentRangeStart","moreItemsCount","remote","fetch","_query","next","totalPages","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_timeStamp","_currentRequestTimeStamp","pageSkip","_processRangeData","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","paging","sorting","filtering","currentRangeStart","_prefetchSuccessHandler","_timeout","_multiplePrefetch","_updateRangesLength","rangesLength","mismatchFound","mismatchLength","lengthDifference","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","loaded","level","_childrenLoaded","load","_matchFilter","_hierarchicalFilter","_markHierarchicalQuery","_updateHierarchicalFilter","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","batchSize","batchBuffer","endreached","prefetching","prefetched","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","Select","MultiSelect","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","deep","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","removeAttribute","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","gantt","j","old","removeIndex","newValue","oldValues","newValues","selectedValue","_isBound","scheduler","arr","addLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","parseTransition","transitionRegExp","SCRIPT","SHOW","HIDE","TRANSITION_START","TRANSITION_END","ATTACH","DETACH","sizzleErrorRegExp","View","_wrap","_evalTemplate","evalTemplate","_fragments","notInitialized","_createElement","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","fragments","methodName","getElementById","contents","replaceWith","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","hub","signalr","fail","callbacks","_crud","server","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","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","useClickAsTap","initialTouch","pressEvent","_moved","_finished","press","_holdTimeout","minHold","_trigger","_hold","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","dict","defaultThreshold","numericCssPropery","within","containerBoundaries","minX","minY","maxX","maxY","checkTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","targetElement","destroyDroppable","groupName","droppables","scrollableViewPort","scrollableRoot","$window","findScrollableParent","autoScrollVelocity","mouseX","mouseY","rect","AUTO_SCROLL_AREA","lastDropTarget","Movable","DropTarget","DropTargetArea","Draggable","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","virtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","dimension","dragMove","resistance","translateAxis","Pane","elastic","gesturestart","gesture","gesturechange","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","hold","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","utils","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","SCROLL","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","wrapInner","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","NS","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","trap","_keepInTrap","removeTrap","shouldTrap","sortedElements","_focusableElements","_sortFocusableElements","_nextFocusable","_focus","tabIndex","attrName","contentWindow","_haveSelectionRange","elementType","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","TEMPLATE","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","showOn","_showOn","_isShownOnFocus","_mouseenter","autoHide","_mouseleave","_blur","showAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","src","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","arrow","_closeButtonClick","_closePopup","arrowBorder","elementOffset","offsetAmount","createPromise","promiseAll","util","hex","hue2rgb","p","q","parseColor","color","BaseColor","matchNamedColor","RGB","namedColors","Bytes","HSV","HSL","Color","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","regexp","colorNames","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","fromBytes","fromRGB","fromHSV","fromHSL","normalizeText","REPLACE_REGEX","SPACE","objectKey","hashKey","zeroSize","baseline","measureText","measureBox","TextMetrics","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","_length","put","entry","_head","_tail","newer","older","baselineMarkerSize","styleKey","cacheKey","cachedResult","baselineMarker","textStr","_baselineMarker","offsetTop","second","arabicToRoman","roman","defined","definitionId","defId","deg","radians","DEG_TO_RAD","encodeUTF8","fromCharCode","encodeBase64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","utfInput","KEY_STR","eventCoordinates","eventElement","isTransparent","limitValue","mergeSort","cmp","ai","bi","rad","degrees","power","valueOrDefault","bindEvents","getBoundingClientRect","clientTop","clientLeft","elementStyles","stylesArray","getPixels","size$1","unbindEvents","setAccessor","geometryChange","getAccessor","defineAccessors","capitalized","toMatrix","matrix","Transformation","ellipseExtremeAngles","ry","extremeX","extremeY","geometryAccessor","_observerField","defineGeometryAccessors","tolerance","PRECISION","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","Point","calculateAngle","cx","cy","cos","sin","normalizeArcParameters","cosine","sine","xT","yT","xt2","yt2","rx2","ry2","constT","cxT","cyT","uX","uY","vX","vY","startAngle","angleCosine","angle","endAngle","signEndAngle","largeArc","swipe","acos","radiusX","radiusY","xRotation","bboxStartAngle","pointAccessor","definePointAccessors","isOutOfEndPoint","endPoint","controlPoint","point","rotatedPoint","transformCopy","calculateCurveAt","points","t1","toCubicPolynomial","numberSign","solveQuadraticEquation","squareRoot","solveCubicEquation","Q","b3a","y3","z1","z2","ComplexNumber","nthRoot","multiplyConstant","negate","multiply","isReal","real","hasRootsInRange","rootField","intersection","polynomial","roots","curveIntersectionsCount","bbox","rayIntersection","intersectsRay","bottomRight","lineIntersectionsCount","intersects","arrayLimits","MAX_NUM","MIN_NUM","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","rawBBox","Rect","union","elementsClippedBoundingBox","clippedBBox","translateToPoint","transofrm","alignStart","align","sizeField","alignStartReverse","alignElements","alignment","vAlign","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","stack","vStack","getStacks","maxSize","stacks","stackSize","addElementToStack","wrapElements","startElement","elementIdx","vWrap","fit","rectSize","transform$$1","optionsAccessor","defineOptionsAccessors","swing","PI","linear","easeOutElastic","asin","toLineParamaters","isVertical","insertPosition","reflectionPoint","scaleCopy","quadraticToCubicControlPoints","scaledPoint","controlOut","translateWith","third","controlIn","parseParameters","SPLIT_REGEX","renderAttr","renderAllAttr","attrs","renderStyle","isDefinition","baseUrl","getElementsByTagName","hashIndex","supportBrowser","refUrl","skipBaseHref","alignToScreen","ctm","getScreenCTM","decodeEntities","ENTITY_REGEX","innerText","exportGroup","exportRoot","svg","RootNode","rootGroup","getOrigin","Group","SVG_NS","renderPath","ctx","segment","prevSeg","prevOut","segments","bezierCurveTo","lineTo","closed","closePath","zIndexComparer","_zIndex","addGradientStops","gradient","stops","addColorStop","exportImage","surfaceOptions","cors","Surface$3","suspendTracking","draw","image","exportSVG","slice$1","thing","cls","classList","setCSS","getXY","drawDOM","doOne","setTransform","nodeInfo","_clipbox","_matrix","Matrix","unit","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template$$1","firstElementChild","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","splitElement","makePage","pages","pageNum","cacheImages","whenImagesAreActuallyLoaded","keepTogether","adjust","tag","bottomPadding","bottomBorder","saveAdjust","isFirst","fall","tableLayout","breakAtElement","fallsOnMargin","splitText","firstInParent","colgroup","thead","grid","gridHead","querySelector","repeatHeaders","doc","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","padding","pageClassName","available","nextnode","selectNodeContents","findEOP","setEnd","endOffset","li","_destructive","cloneNodes","tfoot","ol","paddingLeft","paddingRight","beforePageBreak","pdf","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","multiPage","_ignoreMargin","canceled","doStylesheet","ss","cssRules","ex","addRules","findFonts","font","splitProperty","getFontURL","styleSheet","family","bold","italic","addRule","styleSheets","getCounter","getAllCounters","getPrototypeOf","incCounter","inc","_root","resetCounter","doCounters","updateCounters","counterIncrement","counterReset","parseColor$1","pending","img","images","onload","onerror","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","Image","crossOrigin","alphaNumeral","pushNodeInfo","decoration","createsStackingContext","popNodeInfo","updateClipbox","intersect","emptyClipbox","cb","pseudoElt","defa","microsoft","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","getTransform","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","addArcToPath","Arc$2","curvePoints","curveTo","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","tl","tr","br","bl","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","Path","fill","stroke","formatCounter","evalPseudoElementContent","displayCounter","separator","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","saveClass","_renderElement","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","anticlockwise","drawBackground","background","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","Image$1","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","textAlign","elementIndex","listStyleType","fontSize","lineHeight","fontFamily","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","innerbox","getClientRects","_pdfLink","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","implicit","atan","fromRect","LinearGradient","userSpace","visual","wrap$$1","_kendoExportVisual","exportDOMVisual","exportVisual","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","renderCheckbox","Circle","Circle$2","renderFormField","whiteSpace","floats","floating","toDataURL","renderText","actuallyGetRangeBoundingRect","rectangles","Infinity","prevLineBottom","doChunk","cc","origStart","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","startOffset","drawText","getFontHeight","textTransform","TextRect","decorate","line","ypos","underline","lineThrough","overline","align$$1","textOverflow","saveTextOverflow","hasDecoration","selectNode","groupInStackingContext","main","_dom_zIndex","invert","mmul","multiplyCopy","b1","d1","e1","b2","d2","e2","kendoDrawing","kendoDrawingUtil","kendoUtil","ObserversMixin","OptionsStore","Size","Element$1","PI_DIV_2","GRADIENT","Paintable","IDENTITY_MATRIX_HASH","Measurable","DEFAULT_STROKE","MAX_INTERVAL","pow$1","ElementsArray","GeometryElementsArray","Segment","DEFAULT_STROKE$1","Arc","MultiPath","DEFAULT_FONT","DEFAULT_FILL","Text","Traversable","forEachReverse","Rect$2","StopsArray","GradientStop","Gradient","RadialGradient","easingFunctions","AnimationFactory","ShapeMap","SEGMENT_REGEX","PathParser","SurfaceFactory","Surface","BaseNode","NODE_MAP","renderSVG","testFragment","testContainer","hasParser","renderSVG$1","DefinitionMap","GradientStopNode","GradientNode","LinearGradientNode","RadialGradientNode","ClipNode","DefinitionNode","RTL","Surface$1","GroupNode","DASH_ARRAYS","SOLID","BUTT","ATTRIBUTE_MAP","PathNode","ArcNode","CircleNode","RectNode","ImageNode","TextNode","MultiPathNode","geometry","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","SurfaceCursor","PathNode$2","ArcNode$2","CircleNode$2","RectNode$2","ImageNode$2","TextNode$2","MultiPathNode$2","canvas","observers","_observers","addObserver","removeObserver","observer","_suspended","optionsChange","suspend","resume","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","MAX_VALUE","parentObj","_clear","wrapped","det","scaleX","scaleY","IDENTITY","originPoint","distanceTo","doRound","arg0","arg1","arguments$1","minPoint","maxPoint","defineProperties","setOrigin","topLeft","topRight","bottomLeft","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","rect1","rect2","_optionsChange","parentTransform","parentMatrix","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","newFill","strokeWidth","matrixHash","_bboxCache","_matrixHash","_bbox","_geometry","radian","nextAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","_intervalCurvePoints","cp1","cp2","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","inAngleRange","angleRad","pointRadius","startPoint","arcParameters","_splice","_add","_remove","_clearObserver","_setObserver","cNumber","addConstant","rad$$1","nthR","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","intersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","isOnPath","lineJoin","lastSegment","arc","_addArcSegments","arcTo","pathWidth","segmentBox","fromArc","toPath","metrics","_rect","traverse","childrenChange","_reparent","insertAt","removeAt","newParent","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","justifyAlign","reflow","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","elementStart","groupBox","arrangeElements","groupIdx","scaledStart","scaledSize","newStart","_initGroups","lineSize","bboxes","_newGroup","addGroup","_addToGroup","arg","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","easing","finish","abort","loop","wallTime","easingPosition","_stopped","_items","isRelative","lastControlIn","previousCommand","cubicControlPoints","multiPath","preferred","_handler","_mousemove","_visual","_enableTracking","domNode","_kendoNode","parentElement","srcElement","_suspendedTracking","resumeTracking","_elementOffset","paddingTop","_surfacePoint","coord","observe","removeSelf","invalidate","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","definitions","clearDefinitions","childNode","createDefinitions","attachTo","setElement","nodes","childElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","hasDefinitions","definitionChange","renderDefinitions","mapDefinitions","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","mapItem","removeDefinition","defs","rtl","_template","_rootElement","mouseover","mouseout","viewBox","_offset","implementation","hasFeature","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","fill.opacity","stroke.color","stroke.width","stroke.opacity","renderData","mapFill","mapStroke","printPath","currentType","segmentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","mapPosition","mapSource","renderPosition","encode","renderSource","setY","renderContent","renderTextAnchor","initClip","clearClip","setClip","beginPath","loadElements","setOpacity","globalAlpha","opactity","renderTo","getContext","invalidateHandler","_invalidate","clearRect","shapes","_quadNode","pointShapes","inBounds","nodeRect","nodeBottomRight","inserted","halfWidth","halfHeight","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","levelWeight","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","resolveDataURL","rootElement","loadingStates","currentShape","_currentShape","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","onLoad","onError","drawImage","fillText","strokeText","_pdfRect","$el","$clone","canvases","canvas$$1","skip_ws","tok_whitespace","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","tok","cache1","tok_linear_gradient","tok_url","cache2","looking_at","last$$1","in_paren","in_string","TOOLTIP_TEMPLATE","TOOLTIP_CLOSE_TEMPLATE","SurfaceTooltip","_tooltipOptions","popupOptions","_openPopupHandler","_openPopup","_bindEvents","hideDelay","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","_hideClick","getPopup","shared","_tooltipShape","tooltip","_updateContent","tooltipOffset","_instance","surfaceOffset","_showTimeout","_autoHide","_measure","_closeButton","_popupRelatedTarget","DrawingSurface","_triggerInstanceHandler","_triggerInstanceEvent","_bindHandler","hideTooltip","_tooltip","showTooltip","classArray","SPACE_REGEX","alignPathToPixel","clockwise","angle1","angle2","isString","convertableToNumber","isObject","styleValue","isSizeField","SIZE_STYLES_REGEX","field$1","getSpacing","defaultSpacing","getTemplate","TemplateService","hasClasses","classNames","interpolateValue","COORD_PRECISION","mousewheelDelta","setDefaultOptions","sparseArrayLimits","MIN_VALUE","rotatePoint","theta","numericComparer","boxDiff","Box","innerRadialStops","currentStop","usedSpace","innerRadius","currentStops","rectToBox","createAxisTick","tickOptions","tickX","tickY","createAxisGridLine","gridLine","lineStart","lineEnd","absoluteDateDiff","offsetDiff","TIME_PER_MINUTE","addTicks","ticks","toDate","startOfWeek","daysToSubtract","TIME_PER_DAY","addHours","tzDiff","roundedDate","setMinutes","TIME_PER_HOUR","addDuration","dateValue","YEARS","MONTHS","WEEKS","DAYS","HOURS","MINUTES","setSeconds","SECONDS","TIME_PER_SECOND","MILLISECONDS","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","TIME_PER_UNIT","dateIndex","baseUnitStep","lteDateIndex","sortedDates","currentDate","low","high","intlService","parseDates","dates","autoMajorUnit","relativeValue","scaleMultiplier","DEFAULT_PRECISION","autoAxisMin","narrow","axisMin","minValue","ZERO_THRESHOLD","autoAxisMax","axisMax","maxValue","limitCoordinate","COORDINATE_LIMIT","autoAxisOptions","seriesMin","seriesMax","narrowRange","autoMin","autoMax","majorUnit","autoOptions","roundToMajorUnit","remainderClose","totalAxisOptions","axisOptions","userOptions","userSetMin","userSetMax","userSetLimits","minorUnit","ratio","remainder","timeUnits","TIME_PER_YEAR","TIME_PER_MONTH","TIME_PER_WEEK","applyDefaults","baseUnitTime","userMajorUnit","actualUnits","totalUnits","unitsToAdd","head","tail","initRange","axisCrossingValue","throwNegativeValuesError","autoAxisMin$1","autoAxisMax$1","logMaxRemainder","angularDistance","geometryTransform","__common_getter_js","X","DEFAULT_WIDTH","DEFAULT_HEIGHT","WHITE","BLACK","AXIS_LABEL_CLICK","NOTE_CLICK","NOTE_HOVER","OUTSIDE","CIRCLE","TRIANGLE","CROSS","ARC","INSIDE","DATE","FORMAT_REGEX","HIGHLIGHT_ZINDEX","constants","defaultImplementation","IntlService","FORMAT_REPLACE_REGEX","FormatService","ChartService","current$1","DomEventsBuilder","current$2","services","TRIGGER","InstanceObserver","FontLoader","Ring","Sector","DIRECTION_ANGLE","ShapeBuilder","ChartElement","BoxElement","ShapeElement","LINEAR","RADIAL","GRADIENTS","RootElement","FloatElement","DrawingText","ROWS_SPLIT_REGEX","TextBox","Title","AxisLabel","DEFAULT_ICON_SIZE","DEFAULT_LABEL_COLOR","Note","Axis","TIME_PER_MILLISECOND","MIN_CATEGORY_POINTS_RANGE","CategoryAxis","DateLabelFormats","BASE_UNITS","FIT","DateCategoryAxis","MIN_VALUE_RANGE","NumericAxis","DateValueAxis","DEFAULT_MAJOR_UNIT","LogarithmicAxis","GridLinesMixin","RadarCategoryAxis","PolarAxis","RadarNumericAxisMixin","RadarNumericAxis","RadarLogarithmicAxis","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","CurveProcessor","userImplementation","_intlService","auto","formatString","intl","localeAuto","locale","chart","handlerMap","callObserver","fnName","requiresHandlers","fetchFonts","fonts","depth","MAX_DEPTH","loadFonts","Promise","preloadFonts","cosT","sinT","onCircle","targetBox","wrapPoint","arrayPoint","snapTo","alignTo","targetCenter","shrink","dw","dh","unpad","getHash","overlaps","r1","r2","r3","r4","toRect","hasSize","sizeFunc","middle","newRadius","radianAngle","ax","ay","adjacentBox","sector","midAndle","midPoint","hw","hh","ca","vector","startVector","endVector","dist","getBBox","angles","allAngles","startAngleIndex","endAngleIndex","createRing","innerEnd","currentChild","getRoot","getSender","service","getService","chartService","translateChildren","childrenCount","renderVisual","createVisual","addVisual","createAnimation","renderComplete","chartElement","appendVisual","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","sibling","here","visuals","matched","hasHighlight","highlight","createHighlight","toggleHighlight","highlightOptions","customVisual","_highlight","highlightVisualArgs","series","category","runningTotal","createGradientOverlay","gradientOptions","overlay","createGradient","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","paddingBox","contentBox","hasBox","visualStyle","pointData","getElement","visualOptions","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","rootOptions","gradients","currentBox","createBackground","drawingGradient","hashCode","_initDirection","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupElements","groupElementsCount","elementSize$$1","groupElementStart","elementBox","groupOptions","maxGroupElementsSize","groupsCount","groupsStart","groupElementsSize","_initContainer","_autoReflow","rowIdx","floatElement","textOptions","visualBox","visualFn","_boxReflow","visualContext","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","buildTitle","defaultOptions","titleOptions","alignRotation","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","distanceLeft","distanceRight","alignEnd","alignCenter","icon","noteTemplate","wrapperBox","linePoints","createLine","defaultVisual","eventArgs","hover","leave","_unsetActivePoint","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","_deferLabels","createLabels","createTitle","createNotes","labelsRange","labelsCount","labelOptions","autoRotateLabels","createAxisLabel","lineBox","axisX","axisY","visualSize","note","notes","parseNoteValue","createPlotBands","gridLinesVisual","gridLines","_gridLines","createTicks","lineGroup","tickPositions","skipUnit","tickLineOptions","getMajorTickPositions","getMinorTickPositions","_alignLines","_lineGroup","getActualTickSize","tickSize","_backgroundPath","altAxis","slotX","slotY","bandRect","plotBands","plotArea","_plotbandGroup","axes","getSlot","createGridLines","axisLineVisible","linePos","lineOptions","minorGridLines","majorGridLines","labelSize","sizeFn","titleSize","rootBox","maxLabelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","tickIx","labelPos","labelBox","firstTickPosition","nextTickPosition","labelX","labelY","labelsBetweenTicks","justified","labelOffset","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","limit","lastLabel","limitRange","rangeSize","valueRange","years","weeks","_ticks","_initCategories","categories","definedMin","definedMax","srcCategories","rangeIndices","totalRange","totalRangeIndices","_seriesMax","getScale","getTickPositions","stepSize","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","_hash","slotBox","singleSlot","limitSlot","limittedSlot","categoryIndex","pointCategoryIndex","getCategory","translateRange","zoomRange","rate","totalMin","totalMax","scaleRange","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","useDefault","roundToBaseUnit","userSetBaseUnit","userSetBaseUnitStep","defaultBaseUnit","autoBaseUnit","_groupsStart","groupCategories","rounds","lastCategory","categoryIx","minDiff","_categoryRange","_range","categoryLimits","categoriesRange","minIdx","maxIdx","_roundToTotalStep","currentRange","round$$1","datesRange","totalLimits","panRange","indicesRange","autoBaseUnitSteps","maxDateGroups","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","rangeOptions","autoUnit","stepOptions","unitSteps","nextStep","span","autoUnitIx","units","nextDate","maxCategory","upper","roundToNext","roundedStep","unitFormat","dateFormats","totalOptions","totalMajorUnit","getDivisions","stepValue","divisions","startEdge","skipStep","getValue","valueOffset","isValidRange","newRange","axisCrossingValues","timeRange","exact","limittedRange","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","_lineOptions","minorOptions","ref$2","_minorIntervalOptions","minorStep","acceptOptionsRange","acceptNewRange","nextValue","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","reflowLabels","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","minorAngle","minorRadius","band","ring","plotBandSlot","slotStart","toValue","slots","totalDivs","slotAngle","fromValue","instanceOptions","bandStyle","polarAxis","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","beta","axisType","minorSkipStep","dataPoints","tangent","initialControlPoint","lastControlPoint","controlPoints","tangent$1","cp0","controlPoints$1","controlPoints$2","tangent$2","removeDuplicates","firstControlPoint","secondControlPoint","invertAxis","lineFunction","calculateFunction","isLine","monotonic","oldXField","xField","yField","restrict","switchOrientation","isMonotonicByField","restrictControlPoint","cp","xValue","yValue","Gradients","ExportMixin","skipLegacy","exportPDF","imageDataURL","Point2D","Box2D","mwDelta","BAR_GAP","BAR_SPACING","SANS","SANS11","SANS12","SANS16","TRANSPARENT","axisDefaults","areaSeries","rangeAreaSeries","barSeries","boxPlotSeries","bubbleSeries","bulletSeries","candlestickSeries","columnSeries","donutSeries","lineSeries","ohlcSeries","radarAreaSeries","radarLineSeries","rangeBarSeries","rangeColumnSeries","scatterLineSeries","waterfallSeries","pieSeries","funnelSeries","seriesDefaults","legend","baseTheme","markers","outliersField","meanField","_brightness","downColor","whiskers","mean","median","area","rangeArea","verticalRangeArea","bar","boxPlot","bubble","candlestick","column","pie","donut","funnel","horizontalWaterfall","ohlc","radarArea","radarLine","polarArea","polarLine","rangeBar","rangeColumn","scatterLine","verticalArea","verticalBoxPlot","verticalBullet","verticalLine","waterfall","categoryAxis","chartBaseTheme","autoTheme","mapColor","varName","queryStyle","hook","theme","defaultFont","titleFont","labelFont","letterPos","letter","seriesPos","seriesColors","fuse","arr1","arr2","gaugeBaseTheme","diagramBaseTheme","shapeDefaults","handles","selectable","connectionDefaults","tools","registerTheme","themeName","gauge","diagram","treeMap","inactiveItems","errorBars","scatter","chartArea","crosshair","rangePlaceholderColor","connectorDefaults","thumb","colors","connectors","noteStyle","AXIS","TEXT","INACTIVE","INACTIVE_SHAPE","AXIS_MINOR","SERIES","SERIES_LIGHT","PRIMARY","DIAGRAM_HOVER","sass","countNumbers","getField","row","evalOptions","dryRun","needsEval","excluded","MAX_EXPAND_DEPTH","categoriesCount","seriesCount","toGeometryPoint","lintPoint","stepAxis","stepDir","GeometryPoint","anyHasZIndex","hasGradientOverlay","areNumbers","wrapData","seriesItem","paneID","ID","segmentVisible","pointVisibility","bindSegments","SeriesBinder","bindPoint","valueFields","equalsIgnoreCase","filterSeriesByType","currentSeries","seriesTypes","getDateField","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","axisGroupBox","axisBox","paneAnchor","setValue","appendIfNotNull","updateAxisOptions","targetOptions","axesOptions","axisIndex","groupSeries","axisIx","acceptKey","mouseKey","ctrlKey","altKey","toChartAxisRanges","axisRanges","axisRange","createDiv","closestHandle","updateAxisOptions$1","yAxis","xAxis","tooltipAlignment","RAD_60","RAD_30","uat","ub","xComparer","resolveAxisAliases","alias","aliases","AXIS_NAMES","pointByCategoryName","applyAxisDefaults","themeOptions","mapAxisOptions","axisColor","themeAxisDefaults","axisName","applySeriesDefaults","seriesType","baseOptions","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","_defaults","sortDates","uniqueDates","srcDates","transpose","rowIx","colCount","colIx","rowCount","clearMissingValues","originalOptions","fieldValue","originalValue","nullValue","datavizConstants","ChartAxis","ChartPane","ChartPlotArea","Aggregates","STD_ERR","STD_DEV","percentRegex","standardDeviationRegex","ErrorRangeCalculator","INITIAL_ANIMATION_DURATION","FADEIN","GLASS","BORDER_BRIGHTNESS","TOOLTIP_OFFSET","START_SCALE","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","X_ERROR_LOW_FIELD","X_ERROR_HIGH_FIELD","Y_ERROR_LOW_FIELD","Y_ERROR_HIGH_FIELD","LINE_MARKER_SIZE","INTERPOLATE","GAP","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","HORIZONTAL_WATERFALL","LINE","OHLC","PIE","POLAR_AREA","POLAR_LINE","POLAR_SCATTER","RADAR_AREA","RADAR_COLUMN","RADAR_LINE","RANGE_AREA","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","VERTICAL_RANGE_AREA","WATERFALL","EQUALLY_SPACED_SERIES","LEGEND_ITEM_CLICK","LEGEND_ITEM_HOVER","SERIES_CLICK","SERIES_HOVER","PLOT_AREA_CLICK","PLOT_AREA_HOVER","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT_END","RENDER","SHOW_TOOLTIP","HIDE_TOOLTIP","LOGARITHMIC","CATEGORY","INSIDE_END","INSIDE_BASE","OUTSIDE_END","MOUSEWHEEL","MOUSEWHEEL_DELAY","DEFAULT_ERROR_BAR_WIDTH","ErrorBarBase","CategoricalErrorBar","CategoricalChart","PointEventsMixin","NoteMixin","LinePoint","LineSegment","StepLineMixin","StepLineSegment","SplineSegment","LineChartMixin","ClipAnimation","ClipAnimationMixin","LineChart","AreaSegment","StepAreaSegment","SplineAreaSegment","AreaChart","AxisGroupRangeTracker","BarLabel","BAR_ALIGN_MIN_WIDTH","Bar","ClusterLayout","StackWrap","BarChart","Candlestick","CandlestickChart","BoxPlot","VerticalBoxPlot","BoxPlotChart","ScatterErrorBar","ScatterChart","Bubble","BubbleChart","Target","Bullet","BulletChart","BaseTooltip","CrosshairTooltip","Crosshair","ChartContainer","PlotAreaBase","PlotAreaEventsMixin","SeriesAggregator","DefaultAggregates","RangeBar","RangeBarChart","RangeLinePoint","DEFAULT_FROM_FORMAT","DEFAULT_TO_FORMAT","RangeAreaPoint","RangeAreaSegment","SplineRangeAreaSegment","StepRangeAreaSegment","RangeAreaChart","OHLCPoint","OHLCChart","WaterfallSegment","WaterfallChart","AREA_SERIES","OUT_OF_RANGE_SERIES","CategoricalPlotArea","Highlight","Pannable","ZoomSelection","MousewheelZoom","LegendLayout","LegendItem","HORIZONTAL","POINTER","CUSTOM","Legend","PlotAreaFactory","ZOOM_ACCELERATION","SELECTOR_HEIGHT_ADJUST","Selection","SharedTooltip","BarChartAnimation","BubbleAnimation","FadeInAnimation","PieAnimation","ScatterLineChart","XYPlotArea","PieSegment","PieChartMixin","PIE_SECTOR_ANIM_DELAY","PieChart","PiePlotArea","DonutSegment","DONUT_SECTOR_ANIM_DELAY","DonutChart","DonutPlotArea","DEFAULT_PADDING","PolarPlotAreaBase","PolarScatterChart","PolarLineChart","SplinePolarAreaSegment","PolarAreaSegment","PolarAreaChart","PolarPlotArea","RadarLineChart","SplineRadarAreaSegment","RadarAreaSegment","RadarAreaChart","RadarSegment","RadarClusterLayout","RadarStackLayout","RadarBarChart","RadarPlotArea","FunnelSegment","FunnelChart","FunnelPlotArea","COLOR","FIRST","FROM","MAX","MIN","NOTE_TEXT","SUMMARY_FIELD","TO","MOUSEMOVE","CONTEXTMENU","MOUSEMOVE_DELAY","Chart","_axis","chartsVisual","chartContainer","_plotArea","backgroundVisual","_bgVisual","sumOrNull","avg","_valueFields","_otherFields","_nullValue","_undefinedValue","otherFields","_makeValue","canonicalFields","pointIx","fieldData","srcValueFields","srcPointFields","_bindFromArray","sourceFields","_bindFromObject","initialValue","srcFields","srcFieldName","sourceFieldName","errorValue","initGlobalRanges","deviation","errorRange","standardError","deviationMatch","valueGetter","createValueGetter","getAverage","getStandardDeviation","globalRange","getStandardError","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","endCaps","getAxis","valueBox","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","seriesValueAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","pointOptions","seriesIx","pointType","invertAxes","plotValue","otherValues","categorySum","otherStack","isStacked100","plotRange","positive","prevValue","isStackedBar","otherValue","isStacked","categoryAxisCrossingValue","stackLimits","stackName","pIx","updateStackRange","limits","errorTotals","chartSeries","limitsCache","addErrorBar","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","errorBar","updateRange","createPoint","owner","noteText","evalPointOptions","doEval","namedValueAxes","categorySlots","chartPoints","valueSlot","pointSlot","categorySlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","crossingValues","seriesIx$1","currentCategory","seriesIx$2","_outOfRangeCallback","_bindPoint","outOfRangePoint","bindCache","_bindCache","formatPointValue","createNote","tooltipTracking","labelTemplate","labelText","_rendered","createMarker","formatValue","markerBorder","markerBox","_childBox","childBox","noteTargetBox","reflowLabel","defaultColor","highlightVisual","halfSize","tooltipAnchor","horizontalAlign","verticalAlign","clipBox","overlapsBox","unclipElements","toGeometryPoints","aliasFor","coords","getNearestPoint","calculateStepPoints","stepPoint","previousPoint","curveProcessor","curve","renderSegments","sortedPoints","pointCount","_segments","sortPoints","seriesMissingValues","createSegment","_addSegment","missingValues","assumeZero","nearestPoint","pointBox","allPoints","nearestPointDistance","_setEnd","setX","_setChildrenAnimation","animationPoints","prevSegment","stackPoints","createFill","createStroke","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","previousSegment","_gapStackPoints","stackPoint","_stackPoints","endIdx","pointOffset","currentSeriesIx","gapStackPoint","startIdx","_outOfRangeMinPoint","_previousSegmentPoint","_createGapStackPoint","segmentIx","seriesIdx","chartAxisRanges","chartRange","textBox","alignToClipBox","parentBox","createLabel","rectVisual","createRect","strokeOpacity","getBorderColor","baseColor","borderColor","slotSize","positionAxis","clusterType","stackType","cluster","stackWrap","negativeColor","getStackWrap","stackGroup","wraps","_stackGroup","zeroSlot","_setAnimationOptions","pointVisual","mid","ocSlot","lhSlot","realBody","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","valueParts","splitValue","whiskerSlot","boxSlot","medianSlot","meanSlot","q1","q3","reflowBoxSlot","reflowWhiskerSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","renderOutliers","outlierValue","markersBorder","outliers","outerFence","reflowOutliers","filterOutliers","seriesAxes","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxisName","yAxisName","xAxisRange","yAxisRange","namedXAxes","namedYAxes","currentSeriesPoints","highlightGroup","_maxSize","negativeValues","updateBubblesSize","pointsCount","animationOptions","minSize","minR","maxR","minArea","maxArea","areaRange","areaRatio","baseZIndex","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","bulletOptions","getStyle","pointColor","paddingBottom","tooltipOptions","formatService","initAxisName","showAt","stickyMode","formattedValue","getAnchor","ref_options","moveLine","getBox","dim","axisLineBox","currentAxis","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","charts","appendAxis","appendChart","i$1","removeAxis","removeChart","allAxes","vGridLines","hGridLines","axisValueField","length$1","axis$1","lineBox$1","initFields","initSeries","crosshairs","createPanes","createCrosshairs","setTitle","currentPane","panes","paneOptions","panesLength","paneIndex","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","seriesVisible","itemLabelOptions","markerColor","inactiveItemsLabels","visibleInLegend","active","groupAxes","paneIx","paneAxes","xAxes","yAxes","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","reflowPanes","reflowAxes","reflowCharts","redraw","panesArray","crossingAxes","valuesToAdd","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","alignAxes","paneId","anchorCrossings","pane$1","paneId$1","visible$1","anchor$1","anchorCrossings$1","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","_overlap","_mirrored","shrinkAxisWidth","overflowX","shrinkAxisHeight","shrinked","overflowY","fitAxes","paneBox","currentAxis$1","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","chartPane","percents","currentPane$1","i$2","currentPane$2","remainingHeight","remainingPanes","autoHeightPanes","backgroundBox","axisA","axisB","axesCount","chartsBoxes","addBackgroundPaths","multipath","backgroundContainsPoint","pointsByCategoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsBySeriesName","findPoint","paneByPoint","_dispatchEvent","defaultAggregates","fieldAggregate","seriesFields","_seriesFields","rootAggregate","_series","_binder","canonicalName","aggregatePoints","srcPoints","srcValues","_bindPoints","firstDataItem","_bindField","fromOptions","toOptions","labelFrom","_createLabel","labelTo","plotLimits","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","toPoints","fromSegments","fromPath","createCurveSegments","fromSlot","toSlot","oPoints","cPoints","lhPoints","oSlot","cSlot","createSegments","summary","totalCategories","prevPoint","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groupIx","groupSeriesByCategoryAxis","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","axisPane","dateAxis","srcSeries","processedSeries","categoryField","aggregateSeries","filterSeries","minCategory","outOfRangePoints","_outOfRangeMaxPoint","aggregatorSeries","srcData","outOfRangeMinIdx","outOfRangeMaxIdx","getFn","outOfRangeMinCategory","outOfRangeMaxCategory","aggregator","categoriesToAdd","defaultPaneName","paneName","stackableChartOptions","firstSeries","axisSeries","categoryAxes","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","seriesAxis","centeredSeries","aggregatedAxis","primaryAxis","defaultAxisRange","tracker","defaultRange","eventType","_eventCoordinates","pointPane","_points","arrayPoints","togglePointHighlight","toggleHandler","isHighlighted","_active","_panAxes","lock","updatedAxes","marqueeColor","marquee","_marquee","removeElement","setStyles","zoomPane","_zoomPane","_zoomPaneClipBox","_selectionPosition","elementOffset$$1","selectionPosition","_updateAxisRanges","updateRanges","legendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","createItems","userAlign","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","_registry","registry","_dateAxis","initOptions","createElements","_index","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","leftMask","rightMask","borderLeftWidth","borderRightWidth","_mousewheelHandler","mousewheel","_mousewheel","_domEvents","tap","_tap","_gesturestart","_gesturechange","gestureend","_gestureend","_mwTimeout","_state","_rangeEventArgs","_value","moveTarget","oldRange","rightClick","_toModelCoordinates","_slot","rightMaskWidth","leftMaskWidth","zDir","tooltipPoints","_slotAnchor","_defaultAnchor","categoryText","categoryFormat","centerPoint","slotCenter","fromScale","fadeTo","missingValue","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","xAxisOptions","yAxisOptions","createXYAxis","seriesAxisName","firstPointValue","inferredDate","namedAxes","isLog","typeSamples","axisPane$1","xAxesOptions","yAxesOptions","xValues","yValues","brightnessValue","themeLabels","animationDelay","labelHeight","labelWidth","lp","labelsOptions","labelsDistance","createSegmentVisual","borderOptions","singleSegment","createLegendItem","pointVisible","legendOptions","legendItems","colorsCount","anglePerValue","constantAngle","explode","evalSegmentOptions","segmentOptions","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","seriesConfigs","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","secondBox","lr","firstBox","remaining","_takeDistance","amount","boxX","labelDistance","boxY","hAlignLabel","connectorsColor","connectorLine","sr","crossing","_connectorLines","pointInCircle","reverseValue","originalX","sector_center","createPieChart","pieChart","totalSize","seriesWithoutSize","holeSize","currentSeries$1","createDonutChart","donutChart","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","valueRadius","_polarAxisCenter","centerSegment","_hasMissingValuesGap","scatterChart","slotSector","childSector","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","labelPadding","dynamicSlopeReflow","totalHeight","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","firstSegment","maxSegment","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","topMostWidth","finalNarrow","dynamicSlope","createFunnelChart","funnelChart","errorLow","errorHigh","_initElement","_originalOptions","_theme","_initTheme","_initSurface","_initHandlers","bindCategories","_redraw","_attachEvents","_setElementClass","seriesCopies","applySeriesColors","_noTransitionsRedraw","_model","findAxisByName","findPaneByName","findPaneByIndex","seriesName","categoryName","togglePointsHighlight","_sharedTooltip","_surfaceWrap","renderAs","_getModel","_destroyView","_createTooltip","_setupSelection","_createPannable","_createZoomSelection","_createMousewheelZoom","_navState","_cancelDomEvents","exportOptions","currentOptions","pannable","_pannable","zoomable","_zoomSelection","_toggleDomDrag","domEvents","toggleDrag","_mousewheelZoom","_toggleDomZoom","toggleZoom","_createSharedTooltip","seriesColor","_createPlotArea","_modelOptions","skipSeries","_hasSelection","_selections","selections","_selectStart","_selectEnd","_clickHandler","_surfaceMouseenterHandler","_mouseover","_surfaceMouseleaveHandler","_mouseout","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","_stopDragEvent","_gestureDistance","_zooming","previousGestureDistance","mousewheelZoom","_drawingChartElement","_startNavigation","_suppressHover","ranges$1","_endNavigation","prevented","totalDelta","chartEvent","_getChartElement","_elementPadding","_padding","drawingElement","_activePoint","_propagateClick","_startHover","handlingTap","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","_trackSharedTooltip","pointArgs","hoverArgs","_tooltipCategoryIx","hideElements","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","bindCategoryAxisFromSeries","onAxis","dataLength","dataIx","dataRow","uniqueCategories","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","createProxyMember","nameTemplate","seriesClone","legacyTemplate","groupNameTemplate","_groupIx","_groupValue","normalizeStyle","ChartInstanceObserver","proxyMembers","SeriesVisibilityState","geom","ChartSeries","KendoChart","MOUSELEAVE_NS","DATABOUND","LEAVE","TOOLTIP_ANIMATION_DURATION","TOOLTIP_SHOW_DELAY","TOOLTIP_INVERSE","SHARED_TOOLTIP_CLASS","legendItemClick","_seriesVisibility","_initDataSource","_bindSeries","_bindCategories","_getThemeOptions","_sourceSeries","setDataSource","_hasDataSource","_onDataChanged","_dataChangeHandler","_hasData","_destroyCrosshairTooltips","findSeries","findSeriesByName","_createSeries","findSeriesByIndex","_seriesOptions","_initChart","_createChart","_isRtl","_onInit","_initTooltip","tooltips","_crosshairTooltips","_getCrosshairTooltip","_showTooltip","_hideTooltip","_onRender","_copyMembers","_tooltipleave","_onLegendItemClick","_legendItemClick","_bindData","groupedSeries","grouped","seriesVisibility","applyByGroup","applyByIndex","seriesData","categoriesData","_bindCategoryAxis","PDFMixin","persistSeriesVisibility","saveState","mobileScrollerSelector","_mobileScroller","_clearShowTimeout","sharedTemplate","_ensureElement","showTimeout","_sharedContent","_pointContent","_hideElement","nameColumn","colorMarker","colspan","fadeOut","always","tooltipTemplate","xLow","xHigh","yLow","yHigh","_chart","_pane","_options","_filterPoints","_clearFields","toggleVisibility","hasFilter","_filterData","_buildLabel","styleGeometry","_pad","styleBox","getRange","_unpad","ArrowLinearPointerAnimation","BarLinearPointerAnimation","geo","ANGULAR_SPEED","LINEAR_SPEED","ARROW","ARROW_POINTER","BAR_POINTER","CAP_SIZE","DEFAULT_LINE_WIDTH","DEFAULT_MIN_WIDTH","DEFAULT_MIN_HEIGHT","DEFAULT_MARGIN","DEGREE","GEO_ARC_ADJUST_ANGLE","NEEDLE","RADIAL_POINTER","Pointer","scaleOptions","_oldValue","repaint","RadialPointer","cap","setAngle","oldAngle","newAngle","RadialPointerAnimation","_renderNeedle","_renderCap","_renderArrow","getRadiusX","capSize","needleColor","needlePath","capColor","RadialScale","renderArc","labelElements","renderLabels","renderTicks","renderRanges","repositionRanges","labelAngle","isInside","lbl","prevLabelPos","labelTransform","tickAngles","rangeDistance","labelsGroup","setRadiusX","setRadiusY","rangeRadius","getRangeRadius","rangeGeom","rangeSegments","segmentsCount","rangeSegment","drawTicks","tickStart","tickEnd","labelsPosition","allTicks","tickArc","majorTickAngles","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","minor","newPoint","xDiff","yDiff","Gauge","_createSurface","gaugeArea","_setValueOptions","_draw","_visuals","allValues","_getSize","_createGaugeArea","_createModel","_gaugeAreaMargin","areaGeometry","RadialGauge","radialGauge","_initialPlotArea","alignScale","_buildVisual","midDiff","oldDiff","plotAreaBox","getDiff","staleFlag","getPlotBox","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","LinearGauge","linearGauge","bboxX","bboxY","bbox2D","_getBox","_alignElements","_shrinkElements","scaleElements","LinearScale","ArrowLinearPointer","BarLinearPointer","scaleBox","pointerBox","scaleLine","renderLine","scaleTicks","linePath","renderAxisTick","tickPath","LinearPointer","track","pointerRangeBox","trackBox","trackSize","pointerHalfSize","getElementOptions","_margin","pointerShape","elementOptions","minSlot","sizeAxis","pointerPath","oldShape","oldPoints","newPoints","anim","toScale","translateX","translateY","speed","getNext","state128","state128AB","states128","code128Base","msiBase","Barcode","DEFAULT_QUIETZONE_LENGTH","numberRegex","alphanumericRegex","InvalidCharacterErrorTemplate","Encoding","quietZoneLength","addQuietZone","initValue","addData","addCheckSum","invalidCharacterError","character","encodings","code39Base","minBaseUnitLength","addStart","addCharacter","pushCheckSum","prepareValues","charData","characterMap","addBase","code39ExtendedBase","addExtended","extendedMappings","shiftCharacters","dataCharacter","specialAsciiCodes","0","64","96","127","shiftValuesAsciiCodes","39","41","42","+","%","code39","checkSumMod","minRatio","maxRatio","gapWidth","splitCharacter","patternString","minBaseUnit","minHeight","getBaseUnit","getBaseWidth","characterLength","addPattern","addCharacterGap","patternMappings","w","B","W","A","C","E","H","I","J","K","L","N","O","P","R","S","U","V","Z","-"," ","code39extended","SHIFT0","SHIFT1","SHIFT2","SHIFT3","code93","cCheckSumTotal","kCheckSumTotal","setBaseUnit","checkSumLength","TERMINATION_BAR","checkValues","_getCheckValues","checksum","_findCharacterByValue","cValue","kValue","wightedSum","weightedValue","code93extended","encoding","FNC4","states","_initMoves","isCode","encodingState","_moves","numberMatch","maxLength","_moveFNC","_shiftState","_moveState","fnc","previousState","SHIFT","next4","dependentStates","_initSubStates","subState","_getSubState","_initSubState","_pushStart","pushData","subStates","_getAll","FNC1","startState","startAI","endAI","nextStart","separatorLength","regexSeparators","getBySeparator","getByLength","validate","getAI","unsupportedAIError","applicationIdentifiers","multiKey","ids","22","402","7004","242","8020","703","8008","253","8003","_initStates","checkSum","getNextState","STOP","code128a","code128b","code128c","code128","startStopLength","checkSumFunction","checkSums","checkSumType","Modulo10","evenSum","oddSum","odd","Modulo11","weight","checkValue","weightedSum","mod","Modulo11Modulo10","mod11Value","Modulo10Modulo10","mod10Value","msimod10","msimod11","msimod1110","msimod1010","code11","kCheckSumMinLength","DASH_VALUE","DASH","getWeightedSum","postnet","VALID_CODE_LENGTHS","DIGIT_SEPARATOR","baseHeight","ean13","calculateChecksum","leftKey","leftPart","rightPart","addPieces","addSide","keyTable","arrToAdd","limitedHeight","even","ean8","surfaceWrap","_setOptions","_render","textToDisplay","textHeight","textMargin","barHeight","_getBackground","_getText","_bandsGroup","_getBands","_textbox","toDecimal","toBitsString","splitInto","fillFunctionCell","matrices","bit","fillDataCell","maskPatternConditions","generatePowersOfTwo","powersOfTwoResult","powersOfTwo","generateGeneratorPolynomials","firstPolynomial","secondPolynomial","maxErrorCorrectionCodeWordsCount","generatorPolynomials","multiplyPolynomials","multiplyByConstant","getNumberAt","scoreFinderPatternOccurance","scores","rowColumn","finderPatternValue","scoreAdjacentSameBits","previousBits","adjacentBits","calculateDarkModulesRatioScore","darkModules","mod5","score","modeInstances","mode","FreeCellVisitor","fillData","padDataString","xorPolynomials","generateErrorCodewords","getBlocks","chooseMode","getModes","getDataCodewordsCount","getVersion","getDataString","encodeFormatInformation","encodeBCH","dividePolynomials","initMatrices","addFormatInformation","encodeVersionInformation","addVersionInformation","addCentricPattern","addFinderSeparator","addFinderPatterns","addAlignmentPatterns","addTimingFunctions","scoreMaskMatrixes","EncodingResult","IsoEncoder","UTF8Encoder","QRCodeDataEncoder","encodeData","QRCodeDefaults","QRCode","terminator","NUMERIC","ALPHA_NUMERIC","BYTE","irregularAlignmentPatternsStartDistance","15","16","18","19","24","26","28","31","32","33","36","37","versionsCodewordsInformation","totalDataCodewords","errorCodewordsPerBlock","finderPattern","alignmentPattern","errorCorrectionPatterns","formatMaskPattern","formatGeneratorPolynomial","versionGeneratorPolynomial","paddingCodewords","alphaPattern","alphaExclusiveSet","alphaRegex","alphaNumericRegex","byteRegex","initMinNumericBeforeAlpha","initMinNumericBeforeByte","initMinAlphaBeforeByte","minNumericBeforeAlpha","minNumericBeforeByte","minAlphaBeforeByte","QRDataMode","getVersionIndex","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","getStringBitsLength","modes","inputLength","mod3","characters","*","startColumn","getNextCell","getNextRemainderCell","blocks","block","codewordIdx","blockIdx","cellVisitor","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","errorCodewordsCount","generator","generatorPolynomial","steps","errorCodewords","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","previousMode","modeString","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","nextMode","dataCodewordsCount","errorCorrectionLevel","encodedString","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","modules","quotient","nextX","nextY","startDistance","adjacentSameBits","getEncodingResult","inputString","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","significantOnes","bytesCount","getBytesCount","bc","optimalMatrix","encoder","encodingResult","versionInformation","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","quietZoneSize","dataSize","contentSize","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","matrixSize","QRCodeFunctions","QRCodeFields","ClonedObject","FadeOutAnimation","NavigatorHint","NAVIGATOR_PANE","NAVIGATOR_AXIS","Navigator","AUTO_CATEGORY_WIDTH","StockChart","_initialOpacity","chartPadding","scroll","tooltipStyle","minPos","maxPos","posRange","clearHideTimeout","_visible","borderTopWidth","_hideTimeout","_hideAnimation","chartObserver","_redrawSelf","initSelection","mainAxis","axisClone","selectStart","selectEnd","setRange","filterAxes","redrawSlaves","slavePanes","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","readSelection","ref_selection_options","_zoom","fromIx","toIx","_zoomEnd","naviOptions","__navi","attachAxes","attachSeries","valueAxes","equallySpacedSeries","justifyAxis","_collapse","autoBindElements","user","navigatorSeries","dateField","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","_seriesCount","copyNavigatorCategories","buildFilter","KendoStockChart","StockInstanceObserver","navigatorFilter","navigatorCreated","_initNavigatorOptions","navigatorOptions","isTouch","isFirefox","dummyAxis","hasServerFiltering","hasSelect","_onNavigatorCreated","_navigator","_initNavigatorDataSource","dsOptions","_navigatorDataChangedHandler","_onNavigatorDataChanged","_navigatorDataSource","_bindNavigatorSeries","naviCategories","axesLength","_removeNavigatorDataSource","_onNavigatorFilter","navigatorDataSource","wrapNumber","TOP_OFFSET","SharedTooltip$1","DEAULT_BAR_WIDTH","DEAULT_BULLET_WIDTH","NO_CROSSHAIR","Sparkline","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointWidth","normalizeOptions","SparklineTooltip","KendoSparkline","sqr","renderSize","renderPos","romanToArabic","memoize","isUnicodeLetter","RX_UNICODE_LETTER","withExit","Return","Extent","Location","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","loc","datum","greatCircleTo","bearing","fromLat","fromLng","dToR","datums","WGS84","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","prevLambda","converged","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","sinA","u2","deltao","azimuthFrom","azimuthTo","fromLngLat","ll","fromLatLng","nw","se","containsAny","locs","include","includeAll","edges","sw","extent","World","Attribution","itemTemplate","_extent","_itemText","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","button","BUTTONS","_keyroot","_keydown","panStep","_pan","iconClass","PLUS","MINUS","FF_PLUS","FF_MINUS","ZoomControl","zoomStep","exp","PI_DIV_4","Mercator","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","centralMeridian","clamp","proj","lng0","_projectLat","ecc","ts","con","inverse","_inverseY","dphi","ecch","phi","SphericalMercator","Equirectangular","EPSG3857","crs","_proj","_tm","_itm","toLocation","EPSG3395","EPSG4326","projections","Layer","_beforeReset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","layers","ShapeLayer","_initRoot","_markers","_dataChange","_translateSurface","_load","_clearMarkers","_loader","GeoJSONLoader","shapeCreated","cancelled","_createMarker","layer","featureCreated","_panning","locationToView","locator","defaultStyle","unwrap","_loadGeometryTo","_featureCreated","_shapeCreated","_loadPolygon","_setLineFill","_loadPoint","_loadShape","rings","_buildPolygon","geojson","features","geometries","BubbleLayer","locationField","opt","scaleType","_scaleType","_createSymbol","_drawSymbol","scales","symbols","SqrtScale","domain","domainRange","outputRange","_domain","_ratio","rel","Symbols","roundPoint","drawingUtil","TileLayer","subdomains","viewType","_viewType","locationToLayer","viewOrigin","_updateView","TileView","extentToPoint","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","tile","createTile","currentIndex","tileOptions","wrapIndex","subdomain","errorUrlTemplate","wrapValue","ImageTile","errorUrl","urlResult","urlOptions","z","quadkey","_create","maxDist","BingLayer","_scheme","_onMetadata","_fetchMetadata","imagerySet","uriScheme","resource","resourceSets","resources","imageUrl","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","tileQuadKey","digit","quadKey","bing","MarkerLayer","_markerClick","titleField","_addOne","Marker","addTo","getLocation","getTitle","renderTooltip","contentTemplate","contentUrl","CSS_PREFIX","FRICTION_MOBILE","Map","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","controls","layerDefaults","markerDefaults","wraparound","scroller","zoomControl","_setExtent","_getExtent","_layerSize","layerToLocation","viewToLocation","eventOffset","eventToView","eventToLayer","eventToLocation","_setOrigin","_origin","layerWidth","layerHeight","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPos","posSelector","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_scrollOffset","_panComplete","_panEndTS","_scaleToZoom","gestureCenter","centerLocation","tiles","_resetScroller","xBounds","yBounds","_renderLayers","scrollWrap","fromZoom","toZoom","postZoom","Range","rangeIntegerScale","Utils","findRadian","sngXComp","sngYComp","Easing","Ticker","EPSILON","isNearZero","isDefined","isUndefined","has","isBoolean","isType","isEmpty","simpleExtend","initArray","serializePoints","res","deserializePoints","randomInteger","DFT","getMatrixAngle","getMatrixScaling","sX","sY","findAngle","thisRef","what","fold","constraint","bisort","sortfunc","addRange","easeInOut","adapters","lastTime","_this","timerDelegate","onTimerEvent","addAdapter","onComplete","removeHandler","caller","onStep","seekTo","seekFromTo","intervalId","initState","propagate","movement","intersectLine","start1","end1","start2","end2","isSegment","num1","num2","tangensdiff","normalVariable","randomId","chars","PathDefiner","Intersect","RectAlign","Polar","MatrixVector","Geometry","HashTable","Dictionary","Queue","Set","Link","Graph","HITTESTAREA","plus","minus","times","lengthSquared","middleOf","toPolar","useDegrees","halfpi","factor","isOnLine","o1","u1","inflate","tempStr","xy","rotatedBounds","delimiter","staicPoint","adornerCenter","scaled","thisCenter","rectBottomRight","Empty","rectWithLine","rects","reverseAngle","alignValues","_singleAlign","_left","_right","stretch","_stretch","_top","_middle","_bottom","alignCalc","applyRect","fromSVGMatrix","vm","fromMatrixVector","fromList","translation","scaling","nums","fromMatrix","_distanceToLineSquared","pt1","pt2","vx","vy","distanceToLine","distanceToPolyline","minimum","_buckets","_createGetBucket","_bucketExists","containsKey","hashId","bucket","hashes","_hashes","ht","_hashString","_objectHashId","_hashId","dictionary","_hashTable","forEachValue","forEachKey","enqueue","kv","links","outgoing","incoming","associatedShape","shortForm","isVirtual","isIsolated","isLinkedTo","link","getComplement","getChildren","getParents","balance","adjacentTo","removeLink","hasLinkTo","degree","incidentWith","getLinksWith","getNeighbors","neighbors","connection","sourceFound","targetFound","associatedConnection","getCommonNode","isBridging","v1","v2","getNodes","changeSource","changeTarget","changesNodes","oldSource","oldTarget","directTo","createReverseEdge","reversed","idOrDiagram","_nodeMap","_hasCachedRelationships","cacheRelationships","forceRebuild","assignLevels","startNode","visited","getConnectedComponents","componentId","components","graph","componentIndex","setItemIndices","_collectConnectedNodes","addNodeAndOutgoings","setIds","nodeIndex","nextId","calcBounds","getSpanningTree","levelCount","ni","cn","newLink","treeLevels","_addNode","addLink","takeRandomNode","excludedNodes","incidenceLessThan","isHealthy","hasNode","sourceOrLink","foundSource","foundTarget","addExistingLink","getNode","addNode","removeAllLinks","hasLink","linkOrId","nodeOrId","_removeNode","removeNode","areConnected","n1","n2","layoutRect","newNode","newLinks","saveMapping","nodeMap","linkMap","nOriginal","nCopy","linkOriginal","linkCopy","linearize","addIds","depthFirstTraversal","foundNode","_dftIterator","breadthFirstTraversal","_stronglyConnectedComponents","excludeSingleItems","indices","lowLinks","connected","component","findCycles","isAcyclic","isSubGraph","otherArray","thisArray","makeAcyclic","oneLink","oneNode","rev","intensityCatalog","flowIntensity","catalogEqualIntensity","sourceStack","targetStack","intensity","targetLink","sources","si","sourceLink","maxdiff","ril","vertexOrder","kk","reversedEdges","Predefined","EightGraph","Mindmap","ThreeGraph","BinaryTree","levels","createBalancedTree","Linear","Tree","siblingsCount","Forest","trees","createBalancedForest","Workflow","Grid","graphString","previousLink","lin","_addShape","kendoDiagram","undoable","addShape","_addConnection","connect","createDiagramFromGraph","doLayout","randomSize","gli","sourceShape","targetShape","shi","SpringLayout","layoutGraph","limitToView","counter","lastAdded","news","treeCount","createRandomConnectedGraph","nodeCount","maxIncidence","isTree","poolNode","randomAdditions","randomDiagram","shapeCount","diffNumericOptions","sizeOptionsOrDefault","normalizeDrawingOptions","drawingOptions","getColor","lineAngle","toDrawingRect","Scale","Translation","Rotation","CompositeTransform","AutoSizeableMixin","VisualBase","TextBlock","Rectangle","MarkerBase","CircleMarker","ArrowMarker","MarkerPathMixin","Line","Polyline","Canvas","Markers","none","arrowStart","filledCircle","arrowEnd","FULL_CIRCLE_ANGLE","toMatrixVector","Length","_transform","_renderTransform","rotateMatrix","scaleMatrix","translatePoint","_setScale","originWidth","_originWidth","originHeight","_originHeight","_setTranslate","_initSize","autoSize","_updateSize","_diffNumericOptions","_originSize","drawingContainer","_hover","_measured","_boundingBox","_fill","_stroke","strokeOptions","fillOptions","GradientClass","_textColor","_font","_initText","fontOptions","fontStyle","fontWeight","sizeChanged","_initPath","_setPosition","_drawPath","sizeOptions","_transformToPath","positionMarker","targetSegment","_linePoints","_getPath","_normalizeMarkerOptions","startCap","endCap","_removeMarker","_createMarkers","markerType","_positionMarker","_capMap","_redrawMarker","pathChange","pathOptions","pathCapType","optionsCap","_redrawMarkers","_createElements","_setData","_updatePath","_pointsDiffer","currentPoints","differ","_initImage","_childrenChange","toFront","toBack","_reorderChildren","toIndex","drawingChildren","fixedPosition","childBoundingBox","_includeInBBox","drawingRect","_initCircle","circleOptions","_circle","_translate","_viewBox","clearHtml","testKey","hitToOppositeSide","hit","canDrag","drag","hitTestShapeConnectors","connector","HIT_TEST_DISTANCE","noMeta","PositionAdapter","LayoutUndoUnit","CompositeUnit","ConnectionEditUnit","ConnectionEditUndoUnit","DeleteConnectionUnit","DeleteShapeUnit","TransformUnit","AddConnectionUnit","AddShapeUnit","PanUndoUnit","RotateUnit","ToFrontUnit","ToBackUnit","UndoRedoService","EmptyTool","ScrollerTool","PointerTool","SelectionTool","ConnectionTool","ConnectionEditTool","ToolService","ConnectionRouterBase","LinearConnectionRouter","PolylineRouter","CascadingRouter","AdornerBase","ConnectionEditAdorner","ConnectorsAdorner","ResizingAdorner","Selector","ConnectorVisual","Cursors","grip","cross","south","east","west","north","rowresize","colresize","DEFAULT_SNAP_SIZE","DEFAULT_SNAP_ANGLE","ITEMROTATE","ITEMBOUNDSCHANGE","MIN_SNAP_SIZE","MIN_SNAP_ANGLE","MOUSE_ENTER","MOUSE_LEAVE","SCROLL_MIN","SCROLL_MAX","PAN","ROTATED","TARGET","HANDLE_NAMES","-1","layoutState","pusher","getShapeById","subjects","froms","tos","initialState","finalState","_initialState","_finalState","undo","setState","redo","ticker","conn","undoUnit","redoSource","redoTarget","_redoSource","_redoTarget","_undoSource","_undoTarget","_updateConnector","updateModel","undoSource","undoTarget","targetConnector","undoStates","adorner","redoStates","layout","refreshBounds","deselect","initialPosition","finalPosition","finalPos","undoRotates","redoRotates","redoAngle","_angle","_innerBounds","_initialize","initialIndices","_toIndex","capacity","begin","commit","execute","_restart","addCompositeItem","toolService","tryActivate","getCursor","virtualScroll","tool","scrollable","movableCanvas","hoveredItem","hoveredAdorner","_hoveredConnector","scrollPos","_storePan","selectSingle","_hitTest","_resizingAdorner","isDragHandle","connections","undoRedoService","isSelected","selectArea","_createConnection","_c","connectionHandle","_connectionManipulation","_removeHover","activeConnection","_cachedTouchTarget","cachedTouchTarget","sourceConnector","Shape","getConnector","_syncConnectionChanges","_connectorsAdorner","isActive","handleName","activeTool","_updateHoveredItem","_activateTool","_updateCursor","updateHovered","keyDown","toRemove","metaKey","_triggerRemove","_syncChanges","_destroyToolBar","_discardNewConnection","selectAll","wheel","zoomRate","zoomOptions","setTool","addToSelection","newConnection","disabledShape","selectedConnections","_selectedItems","Connection","_hitTestItems","_hitTestElements","mainLayer","shapeIdx","connectionIdx","shapeHit","connectionHit","hitTest","rec","getBounds","SAME_SIDE_DISTANCE_RATIO","routePoints","_connectorPoints","_floatingPoints","_resolvedSourceConnector","_resolvedTargetConnector","sourcePoint","targetPoint","_connectorSides","boundsPoint","secondarySign","_connectorSide","sideDistance","minSide","shapeBounds","sides","_sameSideDistance","pointX","pointY","sourceConnectorSide","targetConnectorSide","deltaX","sameSideDistance","shiftX","shiftY","cascadeStartHorizontal","_startHorizontal","sourceSide","_adorners","sp","tp","_ts","spVisual","epVisual","_initialSource","_initialTarget","sourcePointDistance","targetPointDistance","sourceHandle","targetHandle","modelToLayer","_refreshHandler","ctr","_clearVisual","_keepCachedTouchTarget","visualChildren","_manipulating","_initSelection","_createHandles","_internalChange","_rotatedHandler","_resizable","_handleOptions","_bounds","handleBounds","handlesCount","_getHandleBounds","_rotationOffset","_startAngle","_rotates","_positions","initialRotates","initialStates","handleOptions","_sp","_cp","_lp","shapeStates","visibleHandles","dragging","newBounds","staticPoint","thr","newCenter","oldBounds","dtl","dbr","changed","_truncateAngle","_rotating","shouldSnap","_truncateDistance","_displaceBounds","_truncatePositionToGuides","ruler","truncatePositionToGuides","_truncateSizeToGuides","truncateSizeToGuides","snap","snapOptions","snapAngle","snapSize","_diffStates","_syncShapeChanges","rotationThumb","_rotationThumbBounds","_ep","_adorn","visualBounds","modelToView","relative","_visualBounds","HyperTree","LayoutBase","subtype","nodeDistance","iterations","horizontalSeparation","verticalSeparation","underneathVerticalTopOffset","underneathHorizontalOffset","underneathVerticalSeparation","componentSpacingX","componentSpacingY","layerSeparation","layeredIterations","startRadialAngle","endRadialAngle","radialSeparation","radialFirstLevelSeparation","keepComponentsInOneRadialLayout","ignoreContainers","layoutContainerChildren","ignoreInvisible","animateTransitions","gridLayoutComponents","maxWidth","startX","startY","resultLinkSet","resultNodeSet","boundingRect","currentHeight","currentWidth","moveToOffset","nodeBounds","newpoints","deltax","deltay","currentHorizontalOffset","transferOptions","DiagramToHyperTreeAdapter","shapeMap","edgeMap","finalNodes","finalLinks","ignoredConnections","ignoredShapes","hyperMap","hyperTree","finalGraph","_renormalizeShapes","_renormalizeConnections","mapConnection","mapShape","getEdge","listToRoot","containerGraph","parentContainer","firstNonIgnorableContainer","isContainer","_isIgnorableItem","isContainerConnection","isDescendantOf","isIgnorableItem","isCollapsed","_isVisible","_isTop","isShapeMapped","leastCommonAncestor","al","xa","xb","_isCollapsed","sink","sourceNode","sinkNode","newEdge","areConnectedAlready","finalNodeSet","LayoutState","initialTemperature","guessBounds","temperature","_expectedBounds","refineStage","_repulsion","_attraction","_shake","rho","_InverseSquareForce","wn","hn","wm","hm","_SquareForce","av","squareSize","multiplier","TreeLayoutProcessor","treeGraph","layoutSwitch","layoutLeft","setChildrenDirection","setChildrenLayout","TreeDirection","Width","arrange","layoutRight","layoutUp","layoutDown","treeDirection","layoutRadialTree","previousRoot","maxDepth","calculateAngularWidth","radialLayout","Angle","tipOverTree","startFromLevel","aw","diameter","sectorAngle","sortChildren","nl","col","basevalue","normalizeAngle","childAngleFraction","deltaTheta","deltaThetaHalf","parentSector","setPolarLocation","BoundingRectangle","includeStart","rootDirection","rootLayout","childrenLayout","givenSize","shapeWidth","shapeHeight","AngleToParent","SectorAngle","pp","childrenwidth","selfLocation","male","female","leftcount","tipOverTreeStartLevel","TreeLayout","layoutComponents","getTree","givenRootShape","getTreeForRoot","LayeredLayout","_initRuntimeProperties","downstreamLinkCount","upstreamLinkCount","uBaryCenter","dBaryCenter","upstreamPriority","downstreamPriority","gridPosition","_prepare","targetLayer","sortedNodes","minLayer","layerMap","layerCount","o2","o1layer","o2layer","linksTo","_dummify","_optimizeCrossings","_swapPairs","arrangeNodes","_moveThingsAround","_dedummify","setMinDist","minDist","layerIndex","minDistances","getMinDist","i1","i2","placeLeftToRight","leftClasses","classNodes","rightSibling","neighbor","leftPos","placeLeft","POSITIVE_INFINITY","nodeLeftClass","upNodes","downNodes","intDiv","placeRightToLeft","rightClasses","leftSibling","rightPos","placeRight","NEGATIVE_INFINITY","nodeRightClass","_getLeftWing","leftWing","computeClasses","_getRightWing","rightWing","wingPair","ndsinl","vnode","wings","currentWing","wing","_nodesInLink","classIndex","_isVerticalLayout","_isHorizontalLayout","_isIncreasingLayout","maximumHeight","currentNode","currDown","downNode","placed","sequenceStart","sequenceEnd","fromLayerIndex","reachedFinalLayerIndex","layerIncrement","_gridPositionComparer","virtualStartIndex","virtualStart","sequence","virtualEnd","virtualEndIndex","_firstVirtualNode","_sequencer","nextVirtualNode","adjustDirections","prevBridge","prevBridgeTarget","nextBridge","nextBridgeTarget","clayer","j1","j2","getNeighborOnLayer","_sequenceSingle","combineSequences","pair","rightHeap","leftRes","rightRes","leftHeap","_positionDescendingComparer","_positionAscendingComparer","leftClass","_getComposite","rightClass","maxLayoutIterations","it","gridPos","layoutLayer","iconsidered","considered","n1Priority","n2Priority","nodeGridPos","nodeBaryCenter","calcBaryCenter","nodePriority","moveRight","moveLeft","calcDownData","calcUpData","priority","rightNode","rightNodePriority","leftNode","leftNodePriority","mapVirtualNode","nodeToLinkMap","linkToNodeMap","addLinkBetweenLayers","oLayer","dLayer","oPos","dPos","upLayer","downLayer","depthOfDumminess","prevLink","dedum","moves","maxIterations","iter","optimizeLayerCrossings","presorted","inode","compareValue","n1BaryCenter","n2BaryCenter","compareByIndex","downwards","secondPass","hasSwapped","calcCrossings","memCrossings","crossBefore","node1","node2","node1GridPos","node2GridPos","crossAfter","revert","countLinksCrossingBetweenTwoLayers","ulayer","dlayer","link1","link2","n11","n12","n21","n22","l1","l2","n11gp","n12gp","n21gp","n22gp","crossings","numerator","denominator","graphOrNodes","diagramOrGraphOrNodes","GraphAdapter","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","getSibling","candidate","Item","Button","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","TemplateItem","OverflowTemplateItem","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_ANCHOR","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","CLICK","TOGGLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OVERFLOW_ALWAYS","OVERFLOW_HIDDEN","OPTION_LIST_SUFFIX","KENDO_UID_ATTR","toolbar","overflowAnchor","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","hidden","overflowHidden","isEnabled","twin","splitContainerId","resizable","useButtonTag","primary","togglable","addToGroup","clickHandler","getParentGroup","isChild","_addGraphics","spriteCssClass","showText","hasIcon","showIcon","createButtons","buttonConstructor","buttons","buttonGroup","mainButton","arrowButton","popupElement","createMenuButtons","createPopup","_navigatable","splitButton","kendoPopup","menuButtons","rootUid","adjustPopupWidth","computedWidth","min-width","_groups","isMobile","_renderOverflow","overflowUserEvents","_toggleOverflow","_resizeHandler","_shrink","_buttonClick","release","_toggleOverflowAnchor","overflowTool","itemClasses","overflowTemplate","_getItem","toolbarItem","overflowItem","isResizable","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","splitContainer","eventData","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","isFirstTool","prevFocusable","isOverflowAnchor","not","_getPrevFocusable","_preventNextFocus","_getNextElement","directionNumber","searchIndex","focusableItem","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","elementPosition","Selectable","ARIASELECTED","SELECTED","SELECTABLE","UNSELECTING","INPUTSELECTOR","supportEventDelegation","_lastActive","aria","inputSelectors","_isElement","whichCode","buttonCode","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","asLowerString","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","weekNumberTemplate","cellTemplate","emptyCellTemplate","createDate","disableDates","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","daysBetweenTwoDates","endDate","fromDateUTC","endDateUTC","addDaysToArray","numberOfDays","fromDate","mousetoggle","HOVER","MOUSEENTER","FOCUS","prevent","leapYear","dateObject","getCalendarInfo","extractFormat","MONTH","makeUnselectable","isIE8","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","transitionOrigin","KEYDOWN_NS","SLIDE","CENTURY","NAVIGATE","DISABLED","FOCUSED","OTHERMONTH","OTHERMONTHCLASS","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","BLUR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","MOUSELEAVE","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","_templates","_selectable","_header","_footer","footer","_toDateObject","_focusView","focusOnNav","_cellID","_isMultipleSelection","_class","_selectDates","_addClassProxy","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","_today","_title","_destroySelectable","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","currentDateIndex","_dateInView","firstDateInView","lastDateInView","focusedDate","isDisabled","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","insertAfter","_horizontal","viewWidth","float","margin-left","_vertical","disabledDate","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","month1","month2","year2","setMonth","viewsEnum","approximateStringMatching","oldText","oldFormat","newText","deletedSymbol","oldTextSeparator","knownSymbols","customDateTime","INPUT_EVENT_NAME","STATEDISABLED","STATEDEFAULT","STATEINVALID","READONLY","DateInput","insidePicker","_form","weekday","hour","minute","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_resetHandler","_dateTime","getDateObject","stringAndFromat","toPair","_oldText","_format","_editable","_paste","_input","_mouseUp","navigationOnly","valid","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","formId","keycode","modifyPart","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","matcher","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","newMonth","currentChar","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","DEFAULT","HOVEREVENTS","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","selectIsClicked","handled","_initialOptions","_wrapper","dateView","_updateARIA","_icon","aria-expanded","aria-owns","dateInput","_dateInput","_old","_update","ARIATemplate","_dateIcon","_inputWrapper","_toggleHover","_focusElement","dateChanged","valueUpdated","textFormatted","_typing","stopImmediatePropagation","aria-controls","isSameType","_ariaTemplate","buttonHtml","CLASS_ICON","truncate","placeholderSupported","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","isStep","_focusout","_arrows","_validation","_text","_toggleText","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keypress","_keyup","_arrowsWrap","_placeholder","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","accessKey","_initialTitle","_key","_step","isNumPadDecimal","isValid","_numericRegex","_addInvalidState","fractionRule","_separator","_floatRegExp","rounder","isNotNull","DOMElement","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","_checkElement","validateInput","inputs","invalid","messageText","wasValid","messageLabel","lblId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","hideMessages","locators","messageLocators","locate","ruleKey","nonDefaultMessage","customMessage","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","editors","kendoNumericTextBox","kendoDatePicker","Editable","$angular","_validateProxy","_validate","clearContainer","skipFocus","editor","isValuesEditor","isCustomEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","constrain","executableScript","WindowResizing","wnd","_preventDragging","_draggable","KWINDOWRESIZEHANDLES","dragstart","dragend","addOverlay","removeOverlay","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowDragging","dragHandle","dragcancel","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KDIALOGCONTENT","KOVERLAY","LOADING","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","RESIZEEND","DATADOCOVERFLOWRULE","ZINDEX","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","Window","windowContent","windowFrame","globalWindow","isVisible","suppressActions","actions","_createWindow","_dimensions","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","windowInstance","pinned","pin","aria-labelledby","_onDocumentResize","_marker","_tabKeyTrap","maxHeight","_animationOptions","basicAnimation","resizing","toggleMaximization","templates","resizeHandle","_actions","titlebar","windowSpecificCommands","cachedOptions","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","_close","unpin","maximize","minimize","_actionForIcon","k-i-close","k-i-window-maximize","k-i-window-minimize","k-i-window-restore","k-i-refresh","k-i-pin","k-i-unpin","_modals","zStack","_object","newTop","newLeft","documentWindow","_isPinned","titleBarHeight","titleBar","scrollContainer","otherModalsVisible","overlayFx","showOptions","contentElement","Fade","fadeIn","_documentScrollTop","_documentScrollLeft","_stopDocumentScrolling","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","defaultPrevented","userTriggered","_enableDocumentScrolling","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","restoreOptions","_sizingAction","actionId","before","$html","$body","_storeOverflowRule","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","win","lrBorderWidth","tbBorderWidth","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","startPosition","minLeftPosition","minTopPosition","_finishDrag","unifyType","mapChangedItems","itemsToMatch","itemsLength","selectedLength","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","HIDDENCLASS","GROUPHEADER","LABELIDPART","CASCADE","isIE","quotRegExp","alternativeNames","ComboBox","DropDownList","List","_isSelect","ul","aria-hidden","_listMousedown","_noData","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_listOptions","changeEventOption","_listChange","listBoundHandler","_listBound","_activateItem","deactivate","_deactivateItem","groupTemplate","fixedGroupTemplate","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_showClear","_clearValue","_clearText","_accessor","enforceMinLength","_clearFilter","_filterSource","newExpression","dataSourceState","resetPageSettings","removed","_cascading","setDSFilter","_angularElement","noData","_toggleNoData","_toggleHeader","groupHeader","_allowOpening","_ignoreCase","widgetOptions","_open","_clearButton","clearButton","_inputValue","_typingTimeout","minLength","_emptySearch","_searchByWord","_unbindDataSource","selectedDataItems","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_valueBeforeCascade","_userTriggered","_oldIndex","isFiltered","typing","_enable","_dataValue","_offsetHeight","_height","popups","footerHeight","_adjustListWidth","autoWidth","_openHandler","_closeHandler","_focusItem","noFocusedItem","highlightFirst","scrollToIndex","_calculateGroupPadding","_calculatePopupHeight","_resizePopup","_popup","_makeUnselectable","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_customOption","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","shouldTrigger","_fetch","dataItemByIndex","getElementIndex","focusout","scrollWith","_fetchData","optionLabel","dataText","dataValue","htmlElement","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromField","currentHandler","_optionID","_selectedIndices","_dataItems","_values","_getter","_onScroll","_scrollId","_renderHeader","_fixedHeader","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","_get","focusIndex","skipUpdate","_skipUpdate","filtered","singleSelection","selectedIndices","added","_deselectFiltered","_valueComparer","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","newGroup","dataContext","_selected","_lastDSFilter","skipUpdateOnBind","isItemChange","_bound","lastFrom","isPrimitive","getItemCount","listScreens","getDefaultItemHeight","mockList","bufferSizes","opposite","listValidator","downThreshold","upThreshold","lastScrollTop","scrollCallback","syncList","reorder","webkitTransform","map2","ITEMCHANGE","reshift","placeholderTemplate","GROUPITEM","isActivePromise","WRAPPER","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","indexes","_getElementByDataItem","_getIndecies","deferredRange","itemCount","_","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","padHeight","lastRequestedRange","lastRangeStart","flatGroups","rangeStart","flatGroup","groupLength","_getterDeferred","firstItemIndex","_indexConstraint","firstVisibleGroup","fixedGroupText","currentVisibleGroup","firstVisibleDataItemIndex","firstVisibleDataItem","_itemMapper","listType","_currentGroup","_getDataItemsCollection","_listIndex","theValidator","theNew","currentOffset","list2","range2","_bufferSizes","buffers","selectedIndexes","removedindexesCounter","_deselectSingleItem","oldSkip","firstItem","assign","normalizeIndex","sameCharsOnly","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_prev","_word","_span","_mobile","_filterHeader","hasOptionLabel","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","_arrow","_focusFilter","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_selectValue","_filterPaste","_search","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","_last","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","aria-haspopup","SELECTOR","DOMelement","accesskey","unselectable","getElements","optionLabelText","origEvent","isAutoConnector","closestConnector","resCtr","minimumDistance","MAXINT","indicesOfItems","filterShapeDataItem","filterConnectionDataItem","fromConnector","fromX","fromY","toConnector","toX","toY","connectionSelector","kendoDropDownList","InactiveItem","InactiveItemsCollection","cloneDataItem","splitDiagramElements","createModel","clearField","copyDefaultOptions","mainOptions","translateToOrigin","defaultButtons","DiagramElement","Connector","Diagram","DiagramToolBar","Editor","PopupEditor","SASS_THEMES","CASCADING","DEFAULT_CANVAS_WIDTH","DEFAULT_CANVAS_HEIGHT","DEFAULT_SHAPE_TYPE","DEFAULT_SHAPE_WIDTH","DEFAULT_SHAPE_HEIGHT","DEFAULT_SHAPE_MINWIDTH","DEFAULT_SHAPE_MINHEIGHT","DEFAULT_SHAPE_POSITION","DEFAULT_CONNECTION_BACKGROUND","TRANSFORMED","MOUSEWHEEL_NS","MOBILE_ZOOM_RATE","MOBILE_PAN_DISTANCE","BUTTON_TEMPLATE","CONNECTION_CONTENT_OFFSET","DefaultConnectors","imageClass","extra","serializable","_content","contentVisual","_contentVisual","_updateContentVisual","_createContentVisual","elementTemplate","_canSelect","shapeId","updateOptionsFromModel","createShapeVisual","updateBounds","_createConnectors","_setOptionsFromModel","modelOptions","redrawVisual","_isEditable","_redrawVisual","syncChanges","_suspendModelRefresh","_resumeModelRefresh","_rotate","_alignContent","containerRect","aligner","contentBounds","contentRect","alignedBounds","_transformedBounds","_rotatedBounds","_setBounds","_triggerBoundsChange","_layouting","refreshConnections","deselected","_internalSelection","_selectionChanged","sc","deltaAngle","newPosition","cons","nameOrPoint","toLocaleLowerCase","_transformPoint","shapeOptions","boundsChange","shapeVisual","_visualOptions","_updateConnectors","_showConnectors","visualTemplate","_initRouter","_sourcePoint","_targetPoint","_setSource","_setTarget","definers","dataMap","_dataMap","connectionsDataSource","shapeSource","defaultConnector","_removeFromSourceConnector","_clearSourceConnector","_setFromOptions","sourceDefiner","_sourceDefiner","shapeTarget","_removeFromTargetConnector","_clearTargetConnector","_setToOptions","targetDefiner","_targetDefiner","connectorName","setNewTarget","inactiveItem","_inactiveShapeItems","_deferredConnectionUpdates","onActivate","alignToPath","midIdx","_router","pts","_resolveConnectors","_refreshPath","sourceConnectors","targetConnectors","_resolveAutoConnectors","minNonConflictSource","minNonConflictTarget","minSource","minTarget","sourceIdx","targetIdx","minNonConflict","_testRoutePoints","exclude","router","passRoute","_getRouteExclude","_shapesQuadTree","hitTestRect","_isPointInsideShape","boundsX","boundsY","_initElements","_extendLayoutOptions","_initDefaults","_interactionDefaults","_initCanvas","adornerLayer","_createHandlers","_clipboard","pauseMouseHandlers","_fetchFreshData","_createGlobalToolBar","_createOptionElements","toolBar","_toolBarClick","createShape","_createShape","edit","createConnection","_connectionsDataMap","addConnection","editModel","editorType","connectionSelectorHandler","cancelEdit","shapeEditors","shapeTemplate","connectionEditors","connectionTemplate","_editArgs","_getEditDataSource","_destroyEditor","saveEdit","userShapeDefaults","canvasContainer","viewPort","_userEvents","_dragStart","_gestureStart","_gestureChange","_gestureEnd","_mouseMove","_mouseDown","_syncHandler","_pauseMouseHandlers","_eventPositions","_meta","_createToolBar","ctrlPressed","focused","documentToModel","initialCenter","_gesture","_initialCenter","zoomedPoint","documentToView","updateZoom","_getValidZoom","_panTransform","_updateAdorners","shapesLength","_createShapes","_createConnections","_findConnectionTarget","destroyScroller","_destroyGlobalToolBar","_removeItem","_removeShapeDataItem","_removeConnectionDataItem","_getDiagramItems","_fixOrdering","bringIntoView","newPan","_zoomMainLayer","alignShapes","viewportVector","_getPan","_copyOffset","copied","mapping","_updateCopiedConnection","sourceConnection","di","_containerOffset","viewToDocument","viewToModel","_transformWithMatrix","_matrixInvert","_layerMatrix","layerToModel","_layerMatrixInvert","viewPoint","modelToDocument","setConnectionsDataSource","_connectionDataSource","_redrawConnections","getShapeByModelId","getShapeByModelUid","getConnectionByModelId","getConnectionByModelUid","_transformMainLayer","_finishPan","_storeViewMatrix","_storeLayerMatrix","canvasTransform","shapePos","conPos","removedConnections","_removeShape","_removeConnection","_removeDataItems","recursive","_removeShapeConnections","_addDataItem","_addDataItemByUid","_addDataItems","parentShape","_refreshSource","_bindingRoots","_addItem","preventClosing","popupWidth","popupHeight","connectionBounds","singleToolBar","popupZIndex","_normalizePointZoom","undone","redone","_loadingShapes","_loadingConnections","ds","_shapesRefreshHandler","_shapesRequestStartHandler","_shapesErrorHandler","_refreshShapes","_shapesRequestStart","_error","_treeDataSource","_connectionsRefreshHandler","_connectionsRequestStartHandler","_connectionsErrorHandler","_refreshConnections","_connectionsRequestStart","_connectionsError","_shouldRefresh","_removeShapes","_updateShapes","_syncShapes","_rebindShapesAndConnections","_addShapes","_addConnections","_removeConnections","_updateConnections","_addConnectionDataItem","_validateConnector","adorners","_refresh","scrollOffset","viewRect","clipWrap","deferredConnectionUpdates","_tools","createToolBar","createTools","appendTools","getKendoPopup","_toolBar","kendoToolBar","getKendoToolBar","createTool","toolName","_setAttributes","editTool","deleteTool","rotateAnticlockwiseTool","_appendGroup","_rotateGroup","rotateClockwiseTool","createShapeTool","_createGroup","createConnectionTool","undoTool","_historyGroup","redoTool","_getAttributes","selectedElements","delete","selectedElemens","rotateClockwise","rotateAnticlockwise","_getFields","createEditable","columns","formContent","_renderTemplate","_renderFields","_renderButtons","_cancelClick","_attachButtonEvents","_createButton","_cancelClickHandler","_updateClickHandler","_updateClick","_editUpdateClickHandler","deffered","_testRect","overlapsBounds","childIdx","boundsChangeHandler","_boundsChange","rootSize","xIdx","yIdx","colorsByLength","rgbColor","minRGBtoDecimal","rgbToDecimal","maxRGBtoDecimal","isDarker","colorBrightness","colorByIndex","buildColorFromRGB","minColor","maxColor","currentStep","decimalToRgb","colorToRGB","rgbToHex","colorLength","DATA_BOUND","ITEM_CREATED","MOUSEOVER_NS","TreeMap","_setLayout","colorField","_layout","SliceAndDice","SliceAndDiceView","Squarified","SquarifiedView","_onDataChange","htmlSize","_wrapItem","compute","_setColors","_cleanItems","createRoot","_colorIdx","colorRange","leafNodes","colorIdx","_contentSize","renderHeight","findByUid","_removeActiveState","_resizeItems","setItemSize","leaf","layoutChildren","minimumSideValue","parentArea","totalArea","itemsArea","layoutHorizontal","squarify","initElement","computeDim","newCoords","layoutLast","layoutRow","worstAspectRatio","layoutV","layoutH","layoutVertical","layoutChange","areaSum","rootCoord","newRootCoord","ans","_totalArea","_createTitle","_compile","_createWrap","rootWrap","_createLeaf","_createTile","_tileColorBrightness","_itemCoordinates","titleTemplate","sliceAndDice","withoutTimeout","$timeout","createWidget","origAttr","controllers","createIt","originalElement","destroyRegister","kNgDisabled","kNgReadonly","isReadonly","kRebind","ctor","OPTIONS_NOW","exposeWidget","$emit","destroyWidgetOnScopeDestroy","setupRebind","$eval","bindToKNgDisabled","bindToKNgReadonly","kNgModel","bindToKNgModel","ngModel","bindToNgModel","ngForm","propagateClassToWidgetWrapper","kNgDelay","delayValue","parsed","unresolved","unwatch","$watch","$root","unregister","$attr","$apply","addOption","scopeValue","widgetEvents","optionsPath","kOptions","optionsValue","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","PanelBar","Menu","$log","warn","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","mo","disconnect","prevClassList","MutationObserver","changes","chg","currClassList","attributeName","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","$destroy","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","ContextMenu","toDataSource","mew","factory","kendoRenderedTimeout","RENDERED","require","controller","$scope","$attrs","roleattr","DateTimePicker","TimePicker","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","ListView","MobileListView","ActionSheet","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","_checkBoxSelection","angularDataItem","templateSettings","encoded","terminal","pre","viewOptions","post","_scroller","kAttr","MobileScrollView","Pager","templateDirectives","templateName","outerHTML"],"mappings":"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,IAAIxT,EAAGiiB,GACZ,MAAO10B,MAAKimB,IAAIxT,GAAKzS,KAAKimB,IAAIyO,GA0iBlC,QAAS+iG,IAAgBzzH,EAAGC,GACxB,MAAO,KAAMjE,KAAKC,IAAID,KAAKC,IAAI+D,EAAIC,GAAK,KAsQ5C,QAASwqF,IAAWzvF,GAChB,MAAOA,IAAS,KAAS,EA/kLhC,GAEO8jB,IACAs2D,GACA2pB,GACAvN,GACAx9F,GACAs4G,GACAzf,GACAsY,GACAuuB,GACArqB,GACAxqF,GACA7mB,GACAsB,GACAq6H,GACAC,GACAllH,GACA09D,GACAC,GACA7sD,GACAE,GACAysD,GACAvyC,GACAD,GACAqyF,GACAnc,GACAuc,GACAyH,GACAC,GACAC,GACAC,GACAvqB,GACAgnB,GACAwD,GACAC,GACAC,GACAC,GACAz8F,GACA08F,GACAC,GACAC,GACAC,GACAC,GACA7jE,GACAhzD,GACA5E,GACA07H,GACAC,GACAC,GACAC,GAgDAhK,GAuCAU,GAwCAuJ,GAWA/rH,GACAgsH,GAaAC,GACAC,GAqCAC,GAwBAC,GACAC,GASAC,GAKAzJ,GAOA0J,GA+CAC,GACAC,GAyDAl1C,GACA1+C,GACAyjD,GACA9B,GACAG,GACA1O,GACApM,GACA8b,GACAD,GACA13D,GACA63D,GACAjD,GACAsD,GACAp4E,GACAg5E,GACAT,GACAqwC,GAkEA9tC,GAuCA8kC,GA4LAiJ,GA6GAC,GAeAC,GACAC,GA6BAC,GAmOAC,GAkGAC,GAkGAC,GACAC,GACAC,GA4JAC,GA0FAC,GAmJAC,GACA3sB,GAqCA4sB,GACAC,GA+IAC,GA8BAC,GA+EAC,GACAC,GACAC,GA2RAC,GAolBA7H,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,GACAuI,GACA/H,GACAtB,GACAW,GACAL,GACA0E,GACAD,GACAD,GACA7C,GA4MAqH,GAaAC,GAmZA9F,GACA+F,GAUApG,GACAl1F,GACAu7F,GAUAC,GACAC,GAqjBAC,GACAC,GA+QAC,GAqMAC,GACAC,GAkXAC,GA8DAC,GAqLAC,GAsKAC,GAoIAC,GAiBAC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rH,SAAW1rH,EAAK5N,OAAS4N,EAAK+uH,WAAa/uH,EAAKgyL,kBAEzD6C,WAAY,SAAUlsJ,GAAV,GACuD3xC,GACtD9C,EADL8L,EAAO5G,KAAM4O,EAAUhI,GAAAA,EAAK+yL,aAAapqJ,EAC7C,KAASz0C,EAAI,EAAGA,EAAI8T,EAAQjX,OAAQmD,IAChC8C,EAAQyU,SAASzD,EAAQxX,OAAO0D,GAAI,IACpC8L,EAAKgI,QAAQ9G,KAAKlK,GAClBgJ,EAAK+uH,YAAc/3H,CAEvBgJ,GAAK26L,UAAYhyJ,EAAO3oC,EAAK5M,YAEjCwnM,aAAc,SAAU9C,EAAeH,GACnC,IAAK,GAAIzjM,GAAI,EAAGA,EAAIyjM,EAAO5mM,OAAQmD,IAC/B,GAAIkF,KAAKu+L,EAAOzjM,IAAIhB,GAAG4kM,EAAc9gM,MAAO8gM,EAAcvsL,OACtD,MAAOosL,GAAOzjM,EAGtBkF,MAAKi5L,sBAAsByF,EAAc9gM,MAAMxG,OAAOsnM,EAAcvsL,SAExEwnL,cACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAEJ8H,KAAM,MAEVtI,EAAUuI,SAAWtJ,EAAY13L,QAC7BwO,KAAM,aACNqvL,QAAS,OAEbpF,EAAUwI,SAAWvJ,EAAY13L,QAC7BwO,KAAM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","file":"kendo.dataviz.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice;\n kendo.version = '2018.1.221'.replace(/^\\s+|\\s+$/g, '');\n function Class() {\n }\n Class.extend = function (proto) {\n var base = function () {\n }, member, that = this, subclass = proto && proto.init ? proto.init : function () {\n that.apply(this, arguments);\n }, fn;\n base.prototype = that.prototype;\n fn = subclass.fn = subclass.prototype = new base();\n for (member in proto) {\n if (proto[member] != null && proto[member].constructor === Object) {\n fn[member] = extend(true, {}, base.prototype[member], proto[member]);\n } else {\n fn[member] = proto[member];\n }\n }\n fn.constructor = subclass;\n subclass.extend = that.extend;\n return subclass;\n };\n Class.prototype._initOptions = function (options) {\n this.options = deepExtend({}, this.options, options);\n };\n var isFunction = kendo.isFunction = function (fn) {\n return typeof fn === 'function';\n };\n var preventDefault = function () {\n this._defaultPrevented = true;\n };\n var isDefaultPrevented = function () {\n return this._defaultPrevented === true;\n };\n var Observable = Class.extend({\n init: function () {\n this._events = {};\n },\n bind: function (eventName, handlers, one) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, original, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n if (handlers === undefined) {\n for (idx in eventName) {\n that.bind(idx, eventName[idx]);\n }\n return that;\n }\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n if (one) {\n original = handler;\n handler = function () {\n that.unbind(eventName, handler);\n original.apply(that, arguments);\n };\n handler.original = original;\n }\n events = that._events[eventName] = that._events[eventName] || [];\n events.push(handler);\n }\n }\n return that;\n },\n one: function (eventNames, handlers) {\n return this.bind(eventNames, handlers, true);\n },\n first: function (eventName, handlers) {\n var that = this, idx, eventNames = typeof eventName === STRING ? [eventName] : eventName, length, handler, handlersIsFunction = typeof handlers === FUNCTION, events;\n for (idx = 0, length = eventNames.length; idx < length; idx++) {\n eventName = eventNames[idx];\n handler = handlersIsFunction ? handlers : handlers[eventName];\n if (handler) {\n events = that._events[eventName] = that._events[eventName] || [];\n events.unshift(handler);\n }\n }\n return that;\n },\n trigger: function (eventName, e) {\n var that = this, events = that._events[eventName], idx, length;\n if (events) {\n e = e || {};\n e.sender = that;\n e._defaultPrevented = false;\n e.preventDefault = preventDefault;\n e.isDefaultPrevented = isDefaultPrevented;\n events = events.slice();\n for (idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(that, e);\n }\n return e._defaultPrevented === true;\n }\n return false;\n },\n unbind: function (eventName, handler) {\n var that = this, events = that._events[eventName], idx;\n if (eventName === undefined) {\n that._events = {};\n } else if (events) {\n if (handler) {\n for (idx = events.length - 1; idx >= 0; idx--) {\n if (events[idx] === handler || events[idx].original === handler) {\n events.splice(idx, 1);\n }\n }\n } else {\n that._events[eventName] = [];\n }\n }\n return that;\n }\n });\n function compilePart(part, stringPart) {\n if (stringPart) {\n return '\\'' + part.split('\\'').join('\\\\\\'').split('\\\\\"').join('\\\\\\\\\\\\\"').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t') + '\\'';\n } else {\n var first = part.charAt(0), rest = part.substring(1);\n if (first === '=') {\n return '+(' + rest + ')+';\n } else if (first === ':') {\n return '+$kendoHtmlEncode(' + rest + ')+';\n } else {\n return ';' + part + ';$kendoOutput+=';\n }\n }\n }\n var argumentNameRegExp = /^\\w+/, encodeRegExp = /\\$\\{([^}]*)\\}/g, escapedCurlyRegExp = /\\\\\\}/g, curlyRegExp = /__CURLY__/g, escapedSharpRegExp = /\\\\#/g, sharpRegExp = /__SHARP__/g, zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n Template = {\n paramName: 'data',\n useWithBlock: true,\n render: function (template, data) {\n var idx, length, html = '';\n for (idx = 0, length = data.length; idx < length; idx++) {\n html += template(data[idx]);\n }\n return html;\n },\n compile: function (template, options) {\n var settings = extend({}, this, options), paramName = settings.paramName, argumentName = paramName.match(argumentNameRegExp)[0], useWithBlock = settings.useWithBlock, functionBody = 'var $kendoOutput, $kendoHtmlEncode = kendo.htmlEncode;', fn, parts, idx;\n if (isFunction(template)) {\n return template;\n }\n functionBody += useWithBlock ? 'with(' + paramName + '){' : '';\n functionBody += '$kendoOutput=';\n parts = template.replace(escapedCurlyRegExp, '__CURLY__').replace(encodeRegExp, '#=$kendoHtmlEncode($1)#').replace(curlyRegExp, '}').replace(escapedSharpRegExp, '__SHARP__').split('#');\n for (idx = 0; idx < parts.length; idx++) {\n functionBody += compilePart(parts[idx], idx % 2 === 0);\n }\n functionBody += useWithBlock ? ';}' : ';';\n functionBody += 'return $kendoOutput;';\n functionBody = functionBody.replace(sharpRegExp, '#');\n try {\n fn = new Function(argumentName, functionBody);\n fn._slotCount = Math.floor(parts.length / 2);\n return fn;\n } catch (e) {\n throw new Error(kendo.format('Invalid template:\\'{0}\\' Generated code:\\'{1}\\'', template, functionBody));\n }\n }\n };\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n (function () {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g, gap, indent, meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }, rep, toString = {}.toString;\n if (typeof Date.prototype.toJSON !== FUNCTION) {\n Date.prototype.toJSON = function () {\n var that = this;\n return isFinite(that.valueOf()) ? pad(that.getUTCFullYear(), 4) + '-' + pad(that.getUTCMonth() + 1) + '-' + pad(that.getUTCDate()) + 'T' + pad(that.getUTCHours()) + ':' + pad(that.getUTCMinutes()) + ':' + pad(that.getUTCSeconds()) + 'Z' : null;\n };\n String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () {\n return this.valueOf();\n };\n }\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === STRING ? c : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n function str(key, holder) {\n var i, k, v, length, mind = gap, partial, value = holder[key], type;\n if (value && typeof value === OBJECT && typeof value.toJSON === FUNCTION) {\n value = value.toJSON(key);\n }\n if (typeof rep === FUNCTION) {\n value = rep.call(holder, key, value);\n }\n type = typeof value;\n if (type === STRING) {\n return quote(value);\n } else if (type === NUMBER) {\n return isFinite(value) ? String(value) : NULL;\n } else if (type === BOOLEAN || type === NULL) {\n return String(value);\n } else if (type === OBJECT) {\n if (!value) {\n return NULL;\n }\n gap += indent;\n partial = [];\n if (toString.apply(value) === '[object Array]') {\n length = value.length;\n for (i = 0; i < length; i++) {\n partial[i] = str(i, value) || NULL;\n }\n v = partial.length === 0 ? '[]' : gap ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']' : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === OBJECT) {\n length = rep.length;\n for (i = 0; i < length; i++) {\n if (typeof rep[i] === STRING) {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n v = partial.length === 0 ? '{}' : gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n if (typeof JSON.stringify !== FUNCTION) {\n JSON.stringify = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n if (typeof space === NUMBER) {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === STRING) {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== FUNCTION && (typeof replacer !== OBJECT || typeof replacer.length !== NUMBER)) {\n throw new Error('JSON.stringify');\n }\n return str('', { '': value });\n };\n }\n }());\n (function () {\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, standardFormatRegExp = /^(n|c|p|e)(\\d*)$/i, literalRegExp = /(\\\\.)|(['][^']*[']?)|([\"][^\"]*[\"]?)/g, commaRegExp = /\\,/g, EMPTY = '', POINT = '.', COMMA = ',', SHARP = '#', ZERO = '0', PLACEHOLDER = '??', EN = 'en-US', objectToString = {}.toString;\n kendo.cultures['en-US'] = {\n name: EN,\n numberFormat: {\n pattern: ['-n'],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n percent: {\n pattern: [\n '-n %',\n 'n %'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '%'\n },\n currency: {\n name: 'US Dollar',\n abbr: 'USD',\n pattern: [\n '($n)',\n '$n'\n ],\n decimals: 2,\n ',': ',',\n '.': '.',\n groupSize: [3],\n symbol: '$'\n }\n },\n calendars: {\n standard: {\n days: {\n names: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ],\n namesAbbr: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n namesShort: [\n 'Su',\n 'Mo',\n 'Tu',\n 'We',\n 'Th',\n 'Fr',\n 'Sa'\n ]\n },\n months: {\n names: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ],\n namesAbbr: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ]\n },\n AM: [\n 'AM',\n 'am',\n 'AM'\n ],\n PM: [\n 'PM',\n 'pm',\n 'PM'\n ],\n patterns: {\n d: 'M/d/yyyy',\n D: 'dddd, MMMM dd, yyyy',\n F: 'dddd, MMMM dd, yyyy h:mm:ss tt',\n g: 'M/d/yyyy h:mm tt',\n G: 'M/d/yyyy h:mm:ss tt',\n m: 'MMMM dd',\n M: 'MMMM dd',\n s: 'yyyy\\'-\\'MM\\'-\\'ddTHH\\':\\'mm\\':\\'ss',\n t: 'h:mm tt',\n T: 'h:mm:ss tt',\n u: 'yyyy\\'-\\'MM\\'-\\'dd HH\\':\\'mm\\':\\'ss\\'Z\\'',\n y: 'MMMM, yyyy',\n Y: 'MMMM, yyyy'\n },\n '/': '/',\n ':': ':',\n firstDay: 0,\n twoDigitYearMax: 2029\n }\n }\n };\n function findCulture(culture) {\n if (culture) {\n if (culture.numberFormat) {\n return culture;\n }\n if (typeof culture === STRING) {\n var cultures = kendo.cultures;\n return cultures[culture] || cultures[culture.split('-')[0]] || null;\n }\n return null;\n }\n return null;\n }\n function getCulture(culture) {\n if (culture) {\n culture = findCulture(culture);\n }\n return culture || kendo.cultures.current;\n }\n kendo.culture = function (cultureName) {\n var cultures = kendo.cultures, culture;\n if (cultureName !== undefined) {\n culture = findCulture(cultureName) || cultures[EN];\n culture.calendar = culture.calendars.standard;\n cultures.current = culture;\n } else {\n return cultures.current;\n }\n };\n kendo.findCulture = findCulture;\n kendo.getCulture = getCulture;\n kendo.culture(EN);\n function formatDate(date, format, culture) {\n culture = getCulture(culture);\n var calendar = culture.calendars.standard, days = calendar.days, months = calendar.months;\n format = calendar.patterns[format] || format;\n return format.replace(dateFormatRegExp, function (match) {\n var minutes;\n var result;\n var sign;\n if (match === 'd') {\n result = date.getDate();\n } else if (match === 'dd') {\n result = pad(date.getDate());\n } else if (match === 'ddd') {\n result = days.namesAbbr[date.getDay()];\n } else if (match === 'dddd') {\n result = days.names[date.getDay()];\n } else if (match === 'M') {\n result = date.getMonth() + 1;\n } else if (match === 'MM') {\n result = pad(date.getMonth() + 1);\n } else if (match === 'MMM') {\n result = months.namesAbbr[date.getMonth()];\n } else if (match === 'MMMM') {\n result = months.names[date.getMonth()];\n } else if (match === 'yy') {\n result = pad(date.getFullYear() % 100);\n } else if (match === 'yyyy') {\n result = pad(date.getFullYear(), 4);\n } else if (match === 'h') {\n result = date.getHours() % 12 || 12;\n } else if (match === 'hh') {\n result = pad(date.getHours() % 12 || 12);\n } else if (match === 'H') {\n result = date.getHours();\n } else if (match === 'HH') {\n result = pad(date.getHours());\n } else if (match === 'm') {\n result = date.getMinutes();\n } else if (match === 'mm') {\n result = pad(date.getMinutes());\n } else if (match === 's') {\n result = date.getSeconds();\n } else if (match === 'ss') {\n result = pad(date.getSeconds());\n } else if (match === 'f') {\n result = math.floor(date.getMilliseconds() / 100);\n } else if (match === 'ff') {\n result = date.getMilliseconds();\n if (result > 99) {\n result = math.floor(result / 10);\n }\n result = pad(result);\n } else if (match === 'fff') {\n result = pad(date.getMilliseconds(), 3);\n } else if (match === 'tt') {\n result = date.getHours() < 12 ? calendar.AM[0] : calendar.PM[0];\n } else if (match === 'zzz') {\n minutes = date.getTimezoneOffset();\n sign = minutes < 0;\n result = math.abs(minutes / 60).toString().split('.')[0];\n minutes = math.abs(minutes) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(minutes);\n } else if (match === 'zz' || match === 'z') {\n result = date.getTimezoneOffset() / 60;\n sign = result < 0;\n result = math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n }\n return result !== undefined ? result : match.slice(1, match.length - 1);\n });\n }\n function formatNumber(number, format, culture) {\n culture = getCulture(culture);\n var numberFormat = culture.numberFormat, decimal = numberFormat[POINT], precision = numberFormat.decimals, pattern = numberFormat.pattern[0], literals = [], symbol, isCurrency, isPercent, customPrecision, formatAndPrecision, negative = number < 0, integer, fraction, integerLength, fractionLength, replacement = EMPTY, value = EMPTY, idx, length, ch, hasGroup, hasNegativeFormat, decimalIndex, sharpIndex, zeroIndex, hasZero, hasSharp, percentIndex, currencyIndex, startZeroIndex, start = -1, end;\n if (number === undefined) {\n return EMPTY;\n }\n if (!isFinite(number)) {\n return number;\n }\n if (!format) {\n return culture.name.length ? number.toLocaleString() : number.toString();\n }\n formatAndPrecision = standardFormatRegExp.exec(format);\n if (formatAndPrecision) {\n format = formatAndPrecision[1].toLowerCase();\n isCurrency = format === 'c';\n isPercent = format === 'p';\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n pattern = numberFormat.pattern[negative ? 0 : 1];\n }\n customPrecision = formatAndPrecision[2];\n if (customPrecision) {\n precision = +customPrecision;\n }\n if (format === 'e') {\n return customPrecision ? number.toExponential(precision) : number.toExponential();\n }\n if (isPercent) {\n number *= 100;\n }\n number = round(number, precision);\n negative = number < 0;\n number = number.split(POINT);\n integer = number[0];\n fraction = number[1];\n if (negative) {\n integer = integer.substring(1);\n }\n value = groupInteger(integer, 0, integer.length, numberFormat);\n if (fraction) {\n value += decimal + fraction;\n }\n if (format === 'n' && !negative) {\n return value;\n }\n number = EMPTY;\n for (idx = 0, length = pattern.length; idx < length; idx++) {\n ch = pattern.charAt(idx);\n if (ch === 'n') {\n number += value;\n } else if (ch === '$' || ch === '%') {\n number += symbol;\n } else {\n number += ch;\n }\n }\n return number;\n }\n if (negative) {\n number = -number;\n }\n if (format.indexOf('\\'') > -1 || format.indexOf('\"') > -1 || format.indexOf('\\\\') > -1) {\n format = format.replace(literalRegExp, function (match) {\n var quoteChar = match.charAt(0).replace('\\\\', ''), literal = match.slice(1).replace(quoteChar, '');\n literals.push(literal);\n return PLACEHOLDER;\n });\n }\n format = format.split(';');\n if (negative && format[1]) {\n format = format[1];\n hasNegativeFormat = true;\n } else if (number === 0) {\n format = format[2] || format[0];\n if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {\n return format;\n }\n } else {\n format = format[0];\n }\n percentIndex = format.indexOf('%');\n currencyIndex = format.indexOf('$');\n isPercent = percentIndex != -1;\n isCurrency = currencyIndex != -1;\n if (isPercent) {\n number *= 100;\n }\n if (isCurrency && format[currencyIndex - 1] === '\\\\') {\n format = format.split('\\\\').join('');\n isCurrency = false;\n }\n if (isCurrency || isPercent) {\n numberFormat = isCurrency ? numberFormat.currency : numberFormat.percent;\n decimal = numberFormat[POINT];\n precision = numberFormat.decimals;\n symbol = numberFormat.symbol;\n }\n hasGroup = format.indexOf(COMMA) > -1;\n if (hasGroup) {\n format = format.replace(commaRegExp, EMPTY);\n }\n decimalIndex = format.indexOf(POINT);\n length = format.length;\n if (decimalIndex != -1) {\n fraction = number.toString().split('e');\n if (fraction[1]) {\n fraction = round(number, Math.abs(fraction[1]));\n } else {\n fraction = fraction[0];\n }\n fraction = fraction.split(POINT)[1] || EMPTY;\n zeroIndex = format.lastIndexOf(ZERO) - decimalIndex;\n sharpIndex = format.lastIndexOf(SHARP) - decimalIndex;\n hasZero = zeroIndex > -1;\n hasSharp = sharpIndex > -1;\n idx = fraction.length;\n if (!hasZero && !hasSharp) {\n format = format.substring(0, decimalIndex) + format.substring(decimalIndex + 1);\n length = format.length;\n decimalIndex = -1;\n idx = 0;\n }\n if (hasZero && zeroIndex > sharpIndex) {\n idx = zeroIndex;\n } else if (sharpIndex > zeroIndex) {\n if (hasSharp && idx > sharpIndex) {\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n if (idx > -1) {\n number = round(number, idx);\n }\n } else {\n number = round(number);\n }\n sharpIndex = format.indexOf(SHARP);\n startZeroIndex = zeroIndex = format.indexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n start = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n start = sharpIndex;\n } else {\n start = sharpIndex > zeroIndex ? zeroIndex : sharpIndex;\n }\n sharpIndex = format.lastIndexOf(SHARP);\n zeroIndex = format.lastIndexOf(ZERO);\n if (sharpIndex == -1 && zeroIndex != -1) {\n end = zeroIndex;\n } else if (sharpIndex != -1 && zeroIndex == -1) {\n end = sharpIndex;\n } else {\n end = sharpIndex > zeroIndex ? sharpIndex : zeroIndex;\n }\n if (start == length) {\n end = start;\n }\n if (start != -1) {\n value = number.toString().split(POINT);\n integer = value[0];\n fraction = value[1] || EMPTY;\n integerLength = integer.length;\n fractionLength = fraction.length;\n if (negative && number * -1 >= 0) {\n negative = false;\n }\n number = format.substring(0, start);\n if (negative && !hasNegativeFormat) {\n number += '-';\n }\n for (idx = start; idx < length; idx++) {\n ch = format.charAt(idx);\n if (decimalIndex == -1) {\n if (end - idx < integerLength) {\n number += integer;\n break;\n }\n } else {\n if (zeroIndex != -1 && zeroIndex < idx) {\n replacement = EMPTY;\n }\n if (decimalIndex - idx <= integerLength && decimalIndex - idx > -1) {\n number += integer;\n idx = decimalIndex;\n }\n if (decimalIndex === idx) {\n number += (fraction ? decimal : EMPTY) + fraction;\n idx += end - decimalIndex + 1;\n continue;\n }\n }\n if (ch === ZERO) {\n number += ch;\n replacement = ch;\n } else if (ch === SHARP) {\n number += replacement;\n }\n }\n if (hasGroup) {\n number = groupInteger(number, start + (negative && !hasNegativeFormat ? 1 : 0), Math.max(end, integerLength + start), numberFormat);\n }\n if (end >= start) {\n number += format.substring(end + 1);\n }\n if (isCurrency || isPercent) {\n value = EMPTY;\n for (idx = 0, length = number.length; idx < length; idx++) {\n ch = number.charAt(idx);\n value += ch === '$' || ch === '%' ? symbol : ch;\n }\n number = value;\n }\n length = literals.length;\n if (length) {\n for (idx = 0; idx < length; idx++) {\n number = number.replace(PLACEHOLDER, literals[idx]);\n }\n }\n }\n return number;\n }\n var groupInteger = function (number, start, end, numberFormat) {\n var decimalIndex = number.indexOf(numberFormat[POINT]);\n var groupSizes = numberFormat.groupSize.slice();\n var groupSize = groupSizes.shift();\n var integer, integerLength;\n var idx, parts, value;\n var newGroupSize;\n end = decimalIndex !== -1 ? decimalIndex : end + 1;\n integer = number.substring(start, end);\n integerLength = integer.length;\n if (integerLength >= groupSize) {\n idx = integerLength;\n parts = [];\n while (idx > -1) {\n value = integer.substring(idx - groupSize, idx);\n if (value) {\n parts.push(value);\n }\n idx -= groupSize;\n newGroupSize = groupSizes.shift();\n groupSize = newGroupSize !== undefined ? newGroupSize : groupSize;\n if (groupSize === 0) {\n if (idx > 0) {\n parts.push(integer.substring(0, idx));\n }\n break;\n }\n }\n integer = parts.reverse().join(numberFormat[COMMA]);\n number = number.substring(0, start) + integer + number.substring(end);\n }\n return number;\n };\n var round = function (value, precision) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n value = value.toString().split('e');\n value = +(value[0] + 'e' + (value[1] ? +value[1] - precision : -precision));\n return value.toFixed(Math.min(precision, 20));\n };\n var toString = function (value, fmt, culture) {\n if (fmt) {\n if (objectToString.call(value) === '[object Date]') {\n return formatDate(value, fmt, culture);\n } else if (typeof value === NUMBER) {\n return formatNumber(value, fmt, culture);\n }\n }\n return value !== undefined ? value : '';\n };\n kendo.format = function (fmt) {\n var values = arguments;\n return fmt.replace(formatRegExp, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10) + 1];\n return toString(value, placeholderFormat ? placeholderFormat.substring(1) : '');\n });\n };\n kendo._extractFormat = function (format) {\n if (format.slice(0, 3) === '{0:') {\n format = format.slice(3, format.length - 1);\n }\n return format;\n };\n kendo._activeElement = function () {\n try {\n return document.activeElement;\n } catch (e) {\n return document.documentElement.activeElement;\n }\n };\n kendo._round = round;\n kendo._outerWidth = function (element, includeMargin) {\n return $(element).outerWidth(includeMargin || false) || 0;\n };\n kendo._outerHeight = function (element, includeMargin) {\n return $(element).outerHeight(includeMargin || false) || 0;\n };\n kendo.toString = toString;\n }());\n (function () {\n var nonBreakingSpaceRegExp = /\\u00A0/g, exponentRegExp = /[eE][\\-+]?[0-9]+/, shortTimeZoneRegExp = /[+|\\-]\\d{1,2}/, longTimeZoneRegExp = /[+|\\-]\\d{1,2}:?\\d{2}/, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/, offsetRegExp = /[+-]\\d*/, FORMATS_SEQUENCE = [\n [],\n [\n 'G',\n 'g',\n 'F'\n ],\n [\n 'D',\n 'd',\n 'y',\n 'm',\n 'T',\n 't'\n ]\n ], STANDARD_FORMATS = [\n [\n 'yyyy-MM-ddTHH:mm:ss.fffffffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fffffff',\n 'yyyy-MM-ddTHH:mm:ss.fffzzz',\n 'yyyy-MM-ddTHH:mm:ss.fff',\n 'ddd MMM dd yyyy HH:mm:ss',\n 'yyyy-MM-ddTHH:mm:sszzz',\n 'yyyy-MM-ddTHH:mmzzz',\n 'yyyy-MM-ddTHH:mmzz',\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-dd HH:mm:ss',\n 'yyyy/MM/dd HH:mm:ss'\n ],\n [\n 'yyyy-MM-ddTHH:mm',\n 'yyyy-MM-dd HH:mm',\n 'yyyy/MM/dd HH:mm'\n ],\n [\n 'yyyy/MM/dd',\n 'yyyy-MM-dd',\n 'HH:mm:ss',\n 'HH:mm'\n ]\n ], numberRegExp = {\n 2: /^\\d{1,2}/,\n 3: /^\\d{1,3}/,\n 4: /^\\d{4}/\n }, objectToString = {}.toString;\n function outOfRange(value, start, end) {\n return !(value >= start && value <= end);\n }\n function designatorPredicate(designator) {\n return designator.charAt(0);\n }\n function mapDesignators(designators) {\n return $.map(designators, designatorPredicate);\n }\n function adjustDST(date, hours) {\n if (!hours && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n }\n }\n function lowerArray(data) {\n var idx = 0, length = data.length, array = [];\n for (; idx < length; idx++) {\n array[idx] = (data[idx] + '').toLowerCase();\n }\n return array;\n }\n function lowerLocalInfo(localInfo) {\n var newLocalInfo = {}, property;\n for (property in localInfo) {\n newLocalInfo[property] = lowerArray(localInfo[property]);\n }\n return newLocalInfo;\n }\n function parseExact(value, format, culture, strict) {\n if (!value) {\n return null;\n }\n var lookAhead = function (match) {\n var i = 0;\n while (format[idx] === match) {\n i++;\n idx++;\n }\n if (i > 0) {\n idx -= 1;\n }\n return i;\n }, getNumber = function (size) {\n var rg = numberRegExp[size] || new RegExp('^\\\\d{1,' + size + '}'), match = value.substr(valueIdx, size).match(rg);\n if (match) {\n match = match[0];\n valueIdx += match.length;\n return parseInt(match, 10);\n }\n return null;\n }, getIndexByName = function (names, lower) {\n var i = 0, length = names.length, name, nameLength, matchLength = 0, matchIdx = 0, subValue;\n for (; i < length; i++) {\n name = names[i];\n nameLength = name.length;\n subValue = value.substr(valueIdx, nameLength);\n if (lower) {\n subValue = subValue.toLowerCase();\n }\n if (subValue == name && nameLength > matchLength) {\n matchLength = nameLength;\n matchIdx = i;\n }\n }\n if (matchLength) {\n valueIdx += matchLength;\n return matchIdx + 1;\n }\n return null;\n }, checkLiteral = function () {\n var result = false;\n if (value.charAt(valueIdx) === format[idx]) {\n valueIdx++;\n result = true;\n }\n return result;\n }, calendar = culture.calendars.standard, year = null, month = null, day = null, hours = null, minutes = null, seconds = null, milliseconds = null, idx = 0, valueIdx = 0, literal = false, date = new Date(), twoDigitYearMax = calendar.twoDigitYearMax || 2029, defaultYear = date.getFullYear(), ch, count, length, pattern, pmHour, UTC, matches, amDesignators, pmDesignators, hoursOffset, minutesOffset, hasTime, match;\n if (!format) {\n format = 'd';\n }\n pattern = calendar.patterns[format];\n if (pattern) {\n format = pattern;\n }\n format = format.split('');\n length = format.length;\n for (; idx < length; idx++) {\n ch = format[idx];\n if (literal) {\n if (ch === '\\'') {\n literal = false;\n } else {\n checkLiteral();\n }\n } else {\n if (ch === 'd') {\n count = lookAhead('d');\n if (!calendar._lowerDays) {\n calendar._lowerDays = lowerLocalInfo(calendar.days);\n }\n if (day !== null && count > 2) {\n continue;\n }\n day = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerDays[count == 3 ? 'namesAbbr' : 'names'], true);\n if (day === null || outOfRange(day, 1, 31)) {\n return null;\n }\n } else if (ch === 'M') {\n count = lookAhead('M');\n if (!calendar._lowerMonths) {\n calendar._lowerMonths = lowerLocalInfo(calendar.months);\n }\n month = count < 3 ? getNumber(2) : getIndexByName(calendar._lowerMonths[count == 3 ? 'namesAbbr' : 'names'], true);\n if (month === null || outOfRange(month, 1, 12)) {\n return null;\n }\n month -= 1;\n } else if (ch === 'y') {\n count = lookAhead('y');\n year = getNumber(count);\n if (year === null) {\n return null;\n }\n if (count == 2) {\n if (typeof twoDigitYearMax === 'string') {\n twoDigitYearMax = defaultYear + parseInt(twoDigitYearMax, 10);\n }\n year = defaultYear - defaultYear % 100 + year;\n if (year > twoDigitYearMax) {\n year -= 100;\n }\n }\n } else if (ch === 'h') {\n lookAhead('h');\n hours = getNumber(2);\n if (hours == 12) {\n hours = 0;\n }\n if (hours === null || outOfRange(hours, 0, 11)) {\n return null;\n }\n } else if (ch === 'H') {\n lookAhead('H');\n hours = getNumber(2);\n if (hours === null || outOfRange(hours, 0, 23)) {\n return null;\n }\n } else if (ch === 'm') {\n lookAhead('m');\n minutes = getNumber(2);\n if (minutes === null || outOfRange(minutes, 0, 59)) {\n return null;\n }\n } else if (ch === 's') {\n lookAhead('s');\n seconds = getNumber(2);\n if (seconds === null || outOfRange(seconds, 0, 59)) {\n return null;\n }\n } else if (ch === 'f') {\n count = lookAhead('f');\n match = value.substr(valueIdx, count).match(numberRegExp[3]);\n milliseconds = getNumber(count);\n if (milliseconds !== null) {\n milliseconds = parseFloat('0.' + match[0], 10);\n milliseconds = kendo._round(milliseconds, 3);\n milliseconds *= 1000;\n }\n if (milliseconds === null || outOfRange(milliseconds, 0, 999)) {\n return null;\n }\n } else if (ch === 't') {\n count = lookAhead('t');\n amDesignators = calendar.AM;\n pmDesignators = calendar.PM;\n if (count === 1) {\n amDesignators = mapDesignators(amDesignators);\n pmDesignators = mapDesignators(pmDesignators);\n }\n pmHour = getIndexByName(pmDesignators);\n if (!pmHour && !getIndexByName(amDesignators)) {\n return null;\n }\n } else if (ch === 'z') {\n UTC = true;\n count = lookAhead('z');\n if (value.substr(valueIdx, 1) === 'Z') {\n checkLiteral();\n continue;\n }\n matches = value.substr(valueIdx, 6).match(count > 2 ? longTimeZoneRegExp : shortTimeZoneRegExp);\n if (!matches) {\n return null;\n }\n matches = matches[0].split(':');\n hoursOffset = matches[0];\n minutesOffset = matches[1];\n if (!minutesOffset && hoursOffset.length > 3) {\n valueIdx = hoursOffset.length - 2;\n minutesOffset = hoursOffset.substring(valueIdx);\n hoursOffset = hoursOffset.substring(0, valueIdx);\n }\n hoursOffset = parseInt(hoursOffset, 10);\n if (outOfRange(hoursOffset, -12, 13)) {\n return null;\n }\n if (count > 2) {\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, 0, 59)) {\n return null;\n }\n }\n } else if (ch === '\\'') {\n literal = true;\n checkLiteral();\n } else if (!checkLiteral()) {\n return null;\n }\n }\n }\n if (strict && !/^\\s*$/.test(value.substr(valueIdx))) {\n return null;\n }\n hasTime = hours !== null || minutes !== null || seconds || null;\n if (year === null && month === null && day === null && hasTime) {\n year = defaultYear;\n month = date.getMonth();\n day = date.getDate();\n } else {\n if (year === null) {\n year = defaultYear;\n }\n if (day === null) {\n day = 1;\n }\n }\n if (pmHour && hours < 12) {\n hours += 12;\n }\n if (UTC) {\n if (hoursOffset) {\n hours += -hoursOffset;\n }\n if (minutesOffset) {\n minutes += -minutesOffset;\n }\n value = new Date(Date.UTC(year, month, day, hours, minutes, seconds, milliseconds));\n } else {\n value = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n adjustDST(value, hours);\n }\n if (year < 100) {\n value.setFullYear(year);\n }\n if (value.getDate() !== day && UTC === undefined) {\n return null;\n }\n return value;\n }\n function parseMicrosoftFormatOffset(offset) {\n var sign = offset.substr(0, 1) === '-' ? -1 : 1;\n offset = offset.substring(1);\n offset = parseInt(offset.substr(0, 2), 10) * 60 + parseInt(offset.substring(2), 10);\n return sign * offset;\n }\n function getDefaultFormats(culture) {\n var length = math.max(FORMATS_SEQUENCE.length, STANDARD_FORMATS.length);\n var patterns = culture.calendar.patterns;\n var cultureFormats, formatIdx, idx;\n var formats = [];\n for (idx = 0; idx < length; idx++) {\n cultureFormats = FORMATS_SEQUENCE[idx];\n for (formatIdx = 0; formatIdx < cultureFormats.length; formatIdx++) {\n formats.push(patterns[cultureFormats[formatIdx]]);\n }\n formats = formats.concat(STANDARD_FORMATS[idx]);\n }\n return formats;\n }\n function internalParseDate(value, formats, culture, strict) {\n if (objectToString.call(value) === '[object Date]') {\n return value;\n }\n var idx = 0;\n var date = null;\n var length;\n var tzoffset;\n if (value && value.indexOf('/D') === 0) {\n date = dateRegExp.exec(value);\n if (date) {\n date = date[1];\n tzoffset = offsetRegExp.exec(date.substring(1));\n date = new Date(parseInt(date, 10));\n if (tzoffset) {\n tzoffset = parseMicrosoftFormatOffset(tzoffset[0]);\n date = kendo.timezone.apply(date, 0);\n date = kendo.timezone.convert(date, 0, -1 * tzoffset);\n }\n return date;\n }\n }\n culture = kendo.getCulture(culture);\n if (!formats) {\n formats = getDefaultFormats(culture);\n }\n formats = isArray(formats) ? formats : [formats];\n length = formats.length;\n for (; idx < length; idx++) {\n date = parseExact(value, formats[idx], culture, strict);\n if (date) {\n return date;\n }\n }\n return date;\n }\n kendo.parseDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, false);\n };\n kendo.parseExactDate = function (value, formats, culture) {\n return internalParseDate(value, formats, culture, true);\n };\n kendo.parseInt = function (value, culture) {\n var result = kendo.parseFloat(value, culture);\n if (result) {\n result = result | 0;\n }\n return result;\n };\n kendo.parseFloat = function (value, culture, format) {\n if (!value && value !== 0) {\n return null;\n }\n if (typeof value === NUMBER) {\n return value;\n }\n value = value.toString();\n culture = kendo.getCulture(culture);\n var number = culture.numberFormat, percent = number.percent, currency = number.currency, symbol = currency.symbol, percentSymbol = percent.symbol, negative = value.indexOf('-'), parts, isPercent;\n if (exponentRegExp.test(value)) {\n value = parseFloat(value.replace(number['.'], '.'));\n if (isNaN(value)) {\n value = null;\n }\n return value;\n }\n if (negative > 0) {\n return null;\n } else {\n negative = negative > -1;\n }\n if (value.indexOf(symbol) > -1 || format && format.toLowerCase().indexOf('c') > -1) {\n number = currency;\n parts = number.pattern[0].replace('$', symbol).split('n');\n if (value.indexOf(parts[0]) > -1 && value.indexOf(parts[1]) > -1) {\n value = value.replace(parts[0], '').replace(parts[1], '');\n negative = true;\n }\n } else if (value.indexOf(percentSymbol) > -1) {\n isPercent = true;\n number = percent;\n symbol = percentSymbol;\n }\n value = value.replace('-', '').replace(symbol, '').replace(nonBreakingSpaceRegExp, ' ').split(number[','].replace(nonBreakingSpaceRegExp, ' ')).join('').replace(number['.'], '.');\n value = parseFloat(value);\n if (isNaN(value)) {\n value = null;\n } else if (negative) {\n value *= -1;\n }\n if (value && isPercent) {\n value /= 100;\n }\n return value;\n };\n }());\n function getShadows(element) {\n var shadow = element.css(kendo.support.transitions.css + 'box-shadow') || element.css('box-shadow'), radius = shadow ? shadow.match(boxShadowRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ] : [\n 0,\n 0,\n 0,\n 0,\n 0\n ], blur = math.max(+radius[3], +(radius[4] || 0));\n return {\n left: -radius[1] + blur,\n right: +radius[1] + blur,\n bottom: +radius[2] + blur\n };\n }\n function wrap(element, autosize) {\n var browser = support.browser, percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight;\n if (!element.parent().hasClass('k-animation-container')) {\n var width = element[0].style.width, height = element[0].style.height, percentWidth = percentRegExp.test(width), percentHeight = percentRegExp.test(height);\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height)) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n if (percentage) {\n element.css({\n width: '100%',\n height: '100%',\n boxSizing: 'border-box',\n mozBoxSizing: 'border-box',\n webkitBoxSizing: 'border-box'\n });\n }\n } else {\n var wrapper = element.parent('.k-animation-container'), wrapperStyle = wrapper[0].style;\n if (wrapper.is(':hidden')) {\n wrapper.css({\n display: '',\n position: ''\n });\n }\n percentage = percentRegExp.test(wrapperStyle.width) || percentRegExp.test(wrapperStyle.height);\n if (!percentage) {\n wrapper.css({\n width: autosize ? outerWidth(element) + 1 : outerWidth(element),\n height: outerHeight(element),\n boxSizing: 'content-box',\n mozBoxSizing: 'content-box',\n webkitBoxSizing: 'content-box'\n });\n }\n }\n if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\n }\n return element.parent();\n }\n function deepExtend(destination) {\n var i = 1, length = arguments.length;\n for (i = 1; i < length; i++) {\n deepExtendOne(destination, arguments[i]);\n }\n return destination;\n }\n function deepExtendOne(destination, source) {\n var ObservableArray = kendo.data.ObservableArray, LazyObservableArray = kendo.data.LazyObservableArray, DataSource = kendo.data.DataSource, HierarchicalDataSource = kendo.data.HierarchicalDataSource, property, propValue, propType, propInit, destProp;\n for (property in source) {\n propValue = source[property];\n propType = typeof propValue;\n if (propType === OBJECT && propValue !== null) {\n propInit = propValue.constructor;\n } else {\n propInit = null;\n }\n if (propInit && propInit !== Array && propInit !== ObservableArray && propInit !== LazyObservableArray && propInit !== DataSource && propInit !== HierarchicalDataSource && propInit !== RegExp) {\n if (propValue instanceof Date) {\n destination[property] = new Date(propValue.getTime());\n } else if (isFunction(propValue.clone)) {\n destination[property] = propValue.clone();\n } else {\n destProp = destination[property];\n if (typeof destProp === OBJECT) {\n destination[property] = destProp || {};\n } else {\n destination[property] = {};\n }\n deepExtendOne(destination[property], propValue);\n }\n } else if (propType !== UNDEFINED) {\n destination[property] = propValue;\n }\n }\n return destination;\n }\n function testRx(agent, rxs, dflt) {\n for (var rx in rxs) {\n if (rxs.hasOwnProperty(rx) && rxs[rx].test(agent)) {\n return rx;\n }\n }\n return dflt !== undefined ? dflt : agent;\n }\n function toHyphens(str) {\n return str.replace(/([a-z][A-Z])/g, function (g) {\n return g.charAt(0) + '-' + g.charAt(1).toLowerCase();\n });\n }\n function toCamelCase(str) {\n return str.replace(/\\-(\\w)/g, function (strMatch, g1) {\n return g1.toUpperCase();\n });\n }\n function getComputedStyles(element, properties) {\n var styles = {}, computedStyle;\n if (document.defaultView && document.defaultView.getComputedStyle) {\n computedStyle = document.defaultView.getComputedStyle(element, '');\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle.getPropertyValue(value);\n });\n }\n } else {\n computedStyle = element.currentStyle;\n if (properties) {\n $.each(properties, function (idx, value) {\n styles[value] = computedStyle[toCamelCase(value)];\n });\n }\n }\n if (!kendo.size(styles)) {\n styles = computedStyle;\n }\n return styles;\n }\n function isScrollable(element) {\n if (element && element.className && typeof element.className === 'string' && element.className.indexOf('k-auto-scrollable') > -1) {\n return true;\n }\n var overflow = getComputedStyles(element, ['overflow']).overflow;\n return overflow == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in docStyle || 'msPerspective' in docStyle;\n support.cssFlexbox = 'flexWrap' in docStyle || 'WebkitFlexWrap' in docStyle || 'msFlexWrap' in docStyle;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = match[3].replace('_', '.');\n minorVersion = os.minorVersion.replace('.', '').substr(0, 2);\n os.flatVersion = os.majorVersion + minorVersion + new Array(3 - (minorVersion.length < 3 ? minorVersion.length : 2)).join('0');\n os.cordova = typeof window.PhoneGap !== UNDEFINED || typeof window.cordova !== UNDEFINED;\n os.appMode = window.navigator.standalone || /file|local|wmapp/.test(window.location.protocol) || os.cordova;\n if (os.android && (support.devicePixelRatio < 1.5 && os.flatVersion < 400 || notAndroidPhone) && (support.screenWidth > 800 || support.screenHeight > 800)) {\n os.tablet = agent;\n }\n break;\n }\n }\n }\n return os;\n };\n var mobileOS = support.mobileOS = support.detectOS(navigator.userAgent);\n support.wpDevicePixelRatio = mobileOS.wp ? screen.width / 320 : 0;\n support.hasNativeScrolling = false;\n if (mobileOS.ios || mobileOS.android && mobileOS.majorVersion > 2 || mobileOS.wp) {\n support.hasNativeScrolling = mobileOS;\n }\n support.delayedClick = function () {\n if (support.touch) {\n if (mobileOS.ios) {\n return true;\n }\n if (mobileOS.android) {\n if (!support.browser.chrome) {\n return true;\n }\n if (support.browser.version < 32) {\n return false;\n }\n return !($('meta[name=viewport]').attr('content') || '').match(/user-scalable=no/i);\n }\n }\n return false;\n };\n support.mouseAndTouchPresent = support.touch && !(support.mobileOS.ios || support.mobileOS.android);\n support.detectBrowser = function (ua) {\n var browser = false, match = [], browserRxs = {\n edge: /(edge)[ \\/]([\\w.]+)/i,\n webkit: /(chrome)[ \\/]([\\w.]+)/i,\n safari: /(webkit)[ \\/]([\\w.]+)/i,\n opera: /(opera)(?:.*version|)[ \\/]([\\w.]+)/i,\n msie: /(msie\\s|trident.*? rv:)([\\w.]+)/i,\n mozilla: /(mozilla)(?:.*? rv:([\\w.]+)|)/i\n };\n for (var agent in browserRxs) {\n if (browserRxs.hasOwnProperty(agent)) {\n match = ua.match(browserRxs[agent]);\n if (match) {\n browser = {};\n browser[agent] = true;\n browser[match[1].toLowerCase().split(' ')[0].split('/')[0]] = true;\n browser.version = parseInt(document.documentMode || match[2], 10);\n break;\n }\n }\n }\n return browser;\n };\n support.browser = support.detectBrowser(navigator.userAgent);\n support.detectClipboardAccess = function () {\n var commands = {\n copy: document.queryCommandSupported ? document.queryCommandSupported('copy') : false,\n cut: document.queryCommandSupported ? document.queryCommandSupported('cut') : false,\n paste: document.queryCommandSupported ? document.queryCommandSupported('paste') : false\n };\n if (support.browser.chrome) {\n commands.paste = false;\n if (support.browser.version >= 43) {\n commands.copy = true;\n commands.cut = true;\n }\n }\n return commands;\n };\n support.clipboard = support.detectClipboardAccess();\n support.zoomLevel = function () {\n try {\n var browser = support.browser;\n var ie11WidthCorrection = 0;\n var docEl = document.documentElement;\n if (browser.msie && browser.version == 11 && docEl.scrollHeight > docEl.clientHeight && !support.touch) {\n ie11WidthCorrection = support.scrollbar();\n }\n return support.touch ? docEl.clientWidth / window.innerWidth : browser.msie && browser.version >= 10 ? ((top || window).document.documentElement.offsetWidth + ie11WidthCorrection) / (top || window).innerWidth : 1;\n } catch (e) {\n return 1;\n }\n };\n support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n webComponents: kendo.webComponents || [],\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value) && option != 'mask') {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options) {\n var result = {}, option, value;\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option)) {\n if (typeof value === 'string') {\n value = kendo.template($('#' + value).html());\n } else {\n value = element.getAttribute(option);\n }\n }\n result[option] = value;\n }\n }\n return result;\n }\n kendo.initWidget = function (element, options, roles) {\n var result, option, widget, idx, length, role, value, dataSource, fullPath, widgetKeyRegExp;\n if (!roles) {\n roles = kendo.ui.roles;\n } else if (roles.roles) {\n roles = roles.roles;\n }\n element = element.nodeType ? element : element[0];\n role = element.getAttribute('data-' + kendo.ns + 'role');\n if (!role) {\n return;\n }\n fullPath = role.indexOf('.') === -1;\n if (fullPath) {\n widget = roles[role];\n } else {\n widget = kendo.getter(role)(window);\n }\n var data = $(element).data(), widgetKey = widget ? 'kendo' + widget.fn.options.prefix + widget.fn.options.name : '';\n if (fullPath) {\n widgetKeyRegExp = new RegExp('^kendo.*' + role + '$', 'i');\n } else {\n widgetKeyRegExp = new RegExp('^' + widgetKey + '$', 'i');\n }\n for (var key in data) {\n if (key.match(widgetKeyRegExp)) {\n if (key === widgetKey) {\n result = data[key];\n } else {\n return data[key];\n }\n }\n }\n if (!widget) {\n return;\n }\n dataSource = parseOption(element, 'dataSource');\n options = $.extend({}, parseOptions(element, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle, options) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $(kendo.format('
{1}
', cssClass, kendo.ui.progress.messages.loading)).width(options.width).height(options.height).css('top', options.top).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (suites) {\n if (suites[0]) {\n for (i = 0, length = suites.length; i < length; i++) {\n widgets.push(suites[i].roles[role]);\n }\n } else {\n widgets.push(suites.roles[role]);\n }\n } else {\n widgets = [\n kendo.ui.roles[role],\n kendo.dataviz.ui.roles[role],\n kendo.mobile.ui.roles[role]\n ];\n }\n if (role.indexOf('.') >= 0) {\n widgets = [kendo.getter(role)(window)];\n }\n for (i = 0, length = widgets.length; i < length; i++) {\n var widget = widgets[i];\n if (widget) {\n var instance = element.data('kendo' + widget.fn.options.prefix + widget.fn.options.name);\n if (instance) {\n return instance;\n }\n }\n }\n }\n };\n kendo.onResize = function (callback) {\n var handler = callback;\n if (support.mobileOS.android) {\n handler = function () {\n setTimeout(callback, 600);\n };\n }\n $(window).on(support.resize, handler);\n return handler;\n };\n kendo.unbindResize = function (callback) {\n $(window).off(support.resize, callback);\n };\n kendo.attrValue = function (element, key) {\n return element.data(kendo.ns + key);\n };\n kendo.days = {\n Sunday: 0,\n Monday: 1,\n Tuesday: 2,\n Wednesday: 3,\n Thursday: 4,\n Friday: 5,\n Saturday: 6\n };\n function focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n return (/input|select|textarea|button|object/.test(nodeName) ? !element.disabled : 'a' === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && visible(element);\n }\n function visible(element) {\n return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr[':'], {\n kendoFocusable: function (element) {\n var idx = $.attr(element, 'tabindex');\n return focusable(element, !isNaN(idx) && idx > -1);\n }\n });\n var MOUSE_EVENTS = [\n 'mousedown',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'mouseover',\n 'mouseout',\n 'mouseup',\n 'click'\n ];\n var EXCLUDE_BUST_CLICK_SELECTOR = 'label, input, [data-rel=external]';\n var MouseEventNormalizer = {\n setupMouseMute: function () {\n var idx = 0, length = MOUSE_EVENTS.length, element = document.documentElement;\n if (MouseEventNormalizer.mouseTrap || !support.eventCapture) {\n return;\n }\n MouseEventNormalizer.mouseTrap = true;\n MouseEventNormalizer.bustClick = false;\n MouseEventNormalizer.captureMouse = false;\n var handler = function (e) {\n if (MouseEventNormalizer.captureMouse) {\n if (e.type === 'click') {\n if (MouseEventNormalizer.bustClick && !$(e.target).is(EXCLUDE_BUST_CLICK_SELECTOR)) {\n e.preventDefault();\n e.stopPropagation();\n }\n } else {\n e.stopPropagation();\n }\n }\n };\n for (; idx < length; idx++) {\n element.addEventListener(MOUSE_EVENTS[idx], handler, true);\n }\n },\n muteMouse: function (e) {\n MouseEventNormalizer.captureMouse = true;\n if (e.data.bustClick) {\n MouseEventNormalizer.bustClick = true;\n }\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n },\n unMuteMouse: function () {\n clearTimeout(MouseEventNormalizer.mouseTrapTimeoutID);\n MouseEventNormalizer.mouseTrapTimeoutID = setTimeout(function () {\n MouseEventNormalizer.captureMouse = false;\n MouseEventNormalizer.bustClick = false;\n }, 400);\n }\n };\n var eventMap = {\n down: 'touchstart mousedown',\n move: 'mousemove touchmove',\n up: 'mouseup touchend touchcancel',\n cancel: 'mouseleave touchcancel'\n };\n if (support.touch && (support.mobileOS.ios || support.mobileOS.android)) {\n eventMap = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel',\n cancel: 'touchcancel'\n };\n } else if (support.pointers) {\n eventMap = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup',\n cancel: 'pointercancel pointerleave'\n };\n } else if (support.msPointers) {\n eventMap = {\n down: 'MSPointerDown',\n move: 'MSPointerMove',\n up: 'MSPointerUp',\n cancel: 'MSPointerCancel MSPointerLeave'\n };\n }\n if (support.msPointers && !('onmspointerenter' in window)) {\n $.each({\n MSPointerEnter: 'MSPointerOver',\n MSPointerLeave: 'MSPointerOut'\n }, function (orig, fix) {\n $.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n handle: function (event) {\n var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj;\n if (!related || related !== target && !$.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n }\n var getEventMap = function (e) {\n return eventMap[e] || e;\n }, eventRegEx = /([^ ]+)/g;\n kendo.applyEventMap = function (events, ns) {\n events = events.replace(eventRegEx, getEventMap);\n if (ns) {\n events = events.replace(eventRegEx, '$1.' + ns);\n }\n return events;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n extend(true, kendoJQuery, $);\n kendoJQuery.fn = kendoJQuery.prototype = new $();\n kendoJQuery.fn.constructor = kendoJQuery;\n kendoJQuery.fn.init = function (selector, context) {\n if (context && context instanceof $ && !(context instanceof kendoJQuery)) {\n context = kendoJQuery(context);\n }\n return $.fn.init.call(this, selector, context, rootjQuery);\n };\n kendoJQuery.fn.init.prototype = kendoJQuery.fn;\n var rootjQuery = kendoJQuery(document);\n extend(kendoJQuery.fn, {\n handler: function (handler) {\n this.data('handler', handler);\n return this;\n },\n autoApplyNS: function (ns) {\n this.data('kendoNS', ns || kendo.guid());\n return this;\n },\n on: function () {\n var that = this, ns = that.data('kendoNS');\n if (arguments.length === 1) {\n return on.call(that, arguments[0]);\n }\n var context = that, args = slice.call(arguments);\n if (typeof args[args.length - 1] === UNDEFINED) {\n args.pop();\n }\n var callback = args[args.length - 1], events = kendo.applyEventMap(args[0], ns);\n if (support.mouseAndTouchPresent && events.search(/mouse|click/) > -1 && this[0] !== document.documentElement) {\n MouseEventNormalizer.setupMouseMute();\n var selector = args.length === 2 ? null : args[1], bustClick = events.indexOf('click') > -1 && events.indexOf('touchend') > -1;\n on.call(this, {\n touchstart: MouseEventNormalizer.muteMouse,\n touchend: MouseEventNormalizer.unMuteMouse\n }, selector, { bustClick: bustClick });\n }\n if (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.unique(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.then($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.then($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = { 'Content-Type': 'multipart/mixed; boundary=' + boundary };\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n for (var idx = 0; idx < data.length; idx++) {\n this[idx] = data[idx];\n }\n this.length = idx;\n this._parent = proxy(function () {\n return this;\n }, this);\n },\n at: function (index) {\n var item = this[index];\n if (!(item instanceof this.type)) {\n item = this[index] = this.wrap(item, this._parent);\n } else {\n item.parent = this._parent;\n }\n return item;\n }\n });\n function eventHandler(context, type, field, prefix) {\n return function (e) {\n var event = {}, key;\n for (key in e) {\n event[key] = e[key];\n }\n if (prefix) {\n event.field = field + '.' + e.field;\n } else {\n event.field = field;\n }\n if (type == CHANGE && context._notifyChange) {\n context._notifyChange(event);\n }\n context.trigger(type, event);\n };\n }\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore) {\n b += '';\n if (ignore) {\n a = '(' + a + ' || \\'\\').toLowerCase()';\n b = b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\').toLowerCase()';\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(value);\n },\n eq: function (a, b, ignore) {\n return operator('==', a, b, ignore);\n },\n neq: function (a, b, ignore) {\n return operator('!=', a, b, ignore);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\n }),\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' == null)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\n },\n isnullorempty: function (a) {\n return '(' + a + ' === null) || (' + a + ' === \\'\\')';\n },\n isnotnullorempty: function (a) {\n return '(' + a + ' !== null) && (' + a + ' !== \\'\\')';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates\n };\n });\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var query = new Query(data), group = options.group, sort = normalizeGroup(group || []).concat(normalizeSort(options.sort || [])), total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n if (inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n } else {\n query = query.sort(sort);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data);\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n that.submit = options.submit;\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n getters[field] = getter(fromName || fieldName);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model);\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n var length = data.length;\n var dataItem;\n var idx;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n this._insertModelInRange(index, model);\n return model;\n },\n pushInsert: function (index, items) {\n if (!items) {\n items = index;\n index = 0;\n }\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.insert(index, item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n });\n } else {\n that._storeData(true);\n that._change({ action: 'sync' });\n }\n return promise;\n },\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data, 0);\n that._change();\n that._markOfflineUpdatesAsDirty();\n }\n },\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx]) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n this._eachItem(this._pristineData, callback);\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.trigger(PROGRESS);\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options, requestParams;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n }\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n requestParams = arguments.length > 1 ? arguments[1] : undefined;\n data = that._readData(data, requestParams);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n var items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n that._pristineData = data.slice(0);\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n data = that._observe(data);\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this._readData(state);\n }\n }\n },\n _addRange: function (data, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : that._skip || 0, end = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n timestamp: new Date().getTime()\n });\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n that._aggregateResult = that._calculateAggregates(data, options);\n }\n result = that._queryProcess(data, options);\n that.view(result.data);\n if (result.total !== undefined && !that.options.serverFiltering) {\n that._total = result.total;\n }\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _queryProcess: function (data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n } else {\n return Query.process(data, options);\n }\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n result = this._queryProcess(this._data, this._mergeState(options));\n if (!this.options.serverFiltering) {\n if (result.total !== undefined) {\n this._total = result.total;\n } else {\n this._total = this._data.length;\n }\n }\n this._aggregateResult = this._calculateAggregates(this._data, options);\n this.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().then(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n that._query({ page: val });\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({\n pageSize: val,\n page: 1\n });\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get(group.field),\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n callback = isFunction(callback) ? callback : noop;\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length || that.total() === 0) {\n that._processRangeData(data, skip, take, pageSkip, size);\n callback();\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroup(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n }\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n _processRangeData: function (data, skip, take, pageSkip, size) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n break;\n }\n }\n if (!found) {\n that._ranges.push(range);\n }\n }\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _removeModelFromRanges: function (model) {\n var that = this;\n var result, range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n this._eachItem(range.data, function (items) {\n result = removeModel(items, model);\n });\n if (result) {\n break;\n }\n }\n that._updateRangesLength();\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function () {\n return true;\n });\n return false;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n this._updateHierarchicalFilter(filter);\n return true;\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio' && value != null) {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n widget[fieldName].data(source);\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n });\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.view', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'view',\n name: 'View',\n category: 'framework',\n description: 'The View class instantiates and handles the events of a certain screen from the application.',\n depends: [\n 'core',\n 'binder',\n 'fx'\n ],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, SCRIPT = 'SCRIPT', INIT = 'init', SHOW = 'show', HIDE = 'hide', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var View = Observable.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n Observable.fn.init.call(that);\n that.content = content;\n that.id = kendo.guid();\n that.tagName = options.tagName || 'div';\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n that._fragments = {};\n that.bind([\n INIT,\n SHOW,\n HIDE,\n TRANSITION_START,\n TRANSITION_END\n ], options);\n },\n render: function (container) {\n var that = this, notInitialized = !that.element;\n if (notInitialized) {\n that.element = that._createElement();\n }\n if (container) {\n $(container).append(that.element);\n }\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n return that.element;\n },\n clone: function () {\n return new ViewClone(this);\n },\n triggerBeforeShow: function () {\n return true;\n },\n triggerBeforeHide: function () {\n return true;\n },\n showStart: function () {\n this.element.css('display', '');\n },\n showEnd: function () {\n },\n hideEnd: function () {\n this.hide();\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n hide: function () {\n this._eachFragment(DETACH);\n this.element.detach();\n this.trigger(HIDE);\n },\n destroy: function () {\n var element = this.element;\n if (element) {\n kendo.unbind(element);\n kendo.destroy(element);\n element.remove();\n }\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + ' />', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('
    ').append(element.clone(true)).html())(that.model || {}));\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n return element;\n }\n });\n var ViewClone = kendo.Class.extend({\n init: function (view) {\n $.extend(this, {\n element: view.element.clone(true),\n transition: view.transition,\n id: view.id\n });\n view.element.parent().append(this.element);\n },\n hideEnd: function () {\n this.element.remove();\n },\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n var Layout = View.extend({\n init: function (content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n container: function (selector) {\n var container = this.containers[selector];\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n return container;\n },\n showIn: function (selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n _createContainer: function (selector) {\n var root = this.render(), element = root.find(selector), container;\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n throw new Error('can\\'t find a container with the specified ' + selector + ' selector');\n }\n }\n container = new ViewContainer(element);\n container.bind('accepted', function (e) {\n e.view.render(element);\n });\n return container;\n }\n });\n var Fragment = View.extend({\n attach: function (view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n detach: function () {\n }\n });\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n var matches = transition.match(transitionRegExp) || [];\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === 'reverse'\n };\n }\n var ViewContainer = Observable.extend({\n init: function (container) {\n Observable.fn.init.call(this);\n this.container = container;\n this.history = [];\n this.view = null;\n this.running = false;\n },\n after: function () {\n this.running = false;\n this.trigger('complete', { view: this.view });\n this.trigger('after');\n },\n end: function () {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\n show: function (view, transition, locationID) {\n if (!view.triggerBeforeShow() || this.view && !this.view.triggerBeforeHide()) {\n this.trigger('after');\n return false;\n }\n locationID = locationID || view.id;\n var that = this, current = view === that.view ? view.clone() : that.view, history = that.history, previousEntry = history[history.length - 2] || {}, back = previousEntry.id === locationID, theTransition = transition || (back ? history[history.length - 1].transition : view.transition), transitionData = parseTransition(theTransition);\n if (that.running) {\n that.effect.stop();\n }\n if (theTransition === 'none') {\n theTransition = null;\n }\n that.trigger('accepted', { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n if (!back) {\n history.push({\n id: locationID,\n transition: theTransition\n });\n } else {\n history.pop();\n }\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n view.element.addClass('k-fx-hidden');\n view.showStart();\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type).beforeTransition(function () {\n view.beforeTransition('show');\n current.beforeTransition('hide');\n }).afterTransition(function () {\n view.afterTransition('show');\n current.afterTransition('hide');\n }).direction(transitionData.direction).setReverse(transitionData.reverse);\n that.effect.run().then(function () {\n that.end();\n });\n }\n return true;\n }\n });\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.signalr', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'data.signalr',\n name: 'SignalR',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($) {\n var transport = kendo.data.RemoteTransport.extend({\n init: function (options) {\n var signalr = options && options.signalr ? options.signalr : {};\n var promise = signalr.promise;\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n if (typeof promise.done != 'function' || typeof promise.fail != 'function') {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n this.promise = promise;\n var hub = signalr.hub;\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\n }\n if (typeof hub.on != 'function' || typeof hub.invoke != 'function') {\n throw new Error('The \"hub\" option is not a valid SignalR hub proxy.');\n }\n this.hub = hub;\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n push: function (callbacks) {\n var client = this.options.signalr.client || {};\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\n },\n _crud: function (options, type) {\n var hub = this.hub;\n var server = this.options.signalr.server;\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n var args = [server[type]];\n var data = this.parameterMap(options.data, type);\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n this.promise.done(function () {\n hub.invoke.apply(hub, args).done(options.success).fail(options.error);\n });\n },\n read: function (options) {\n this._crud(options, 'read');\n },\n create: function (options) {\n this._crud(options, 'create');\n },\n update: function (options) {\n this._crud(options, 'update');\n },\n destroy: function (options) {\n this._crud(options, 'destroy');\n }\n });\n $.extend(true, kendo.data, { transports: { signalr: transport } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n this._trigger(TAP, touchInfo);\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n var defaultAction = 'pinch-zoom double-tap-zoom';\n element.css('-ms-touch-action', options.touchAction && options.touchAction != 'none' ? defaultAction + ' ' + options.touchAction : defaultAction);\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container ? $(options.container) : null, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.chrome ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('
    ');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('
    ').prepend('
    ');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\n }\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, Class = kendo.Class, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), proxy = $.proxy, WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).attr('aria-hidden', true).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('wheel' + NS, function (e) {\n var list = $(e.target).find('.k-list');\n var scrollArea = list.parent();\n if (list.length && list.is(':visible') && (scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0 || scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0)) {\n e.preventDefault();\n }\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n }\n kendo.destroy(that.element.children());\n element.removeData();\n if (options.appendTo[0] === document.body) {\n parent = element.parent('.k-animation-container');\n if (parent[0]) {\n parent.remove();\n } else {\n element.remove();\n }\n }\n },\n open: function (x, y) {\n var that = this, fixed = {\n isFixed: !isNaN(parseInt(y, 10)),\n x: x,\n y: y\n }, element = that.element, options = that.options, animation, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (!that.visible()) {\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n if (element.data('animating') || that._trigger(OPEN)) {\n return;\n }\n that._activated = false;\n if (!options.modal) {\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy).bind(that.downEvent, that._mousedownProxy);\n that._toggleResize(false);\n that._toggleResize(true);\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n }).attr('aria-hidden', false);\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that.flipped = that._position(fixed);\n animation = that._openAnimation();\n if (options.anchor != BODY) {\n that._showDirClass(animation);\n }\n element.data(EFFECTS, animation.effects).kendoStop(true).kendoAnimate(animation).attr('aria-hidden', false);\n }\n },\n _location: function (isFixed) {\n var that = this, element = that.element, options = that.options, wrapper, anchor = $(options.anchor), mobile = element[0] && element.hasClass('km-widget');\n if (options.copyAnchorStyles) {\n if (mobile && styles[0] == 'font-size') {\n styles.shift();\n }\n element.css(kendo.getComputedStyles(anchor[0], styles));\n }\n that.wrapper = wrapper = kendo.wrap(element, options.autosize).css({\n overflow: HIDDEN,\n display: 'block',\n position: ABSOLUTE\n });\n if (support.mobileOS.android) {\n wrapper.css(TRANSFORM, 'translatez(0)');\n }\n wrapper.css(POSITION);\n if ($(options.appendTo)[0] == document.body) {\n wrapper.css(TOP, '-10000px');\n }\n that._position(isFixed || {});\n var offset = wrapper.offset();\n return {\n width: kendo._outerWidth(wrapper),\n height: kendo._outerHeight(wrapper),\n left: offset.left,\n top: offset.top\n };\n },\n _openAnimation: function () {\n var animation = extend(true, {}, this.options.animation.open);\n animation.effects = kendo.parseEffects(animation.effects, this.flipped);\n return animation;\n },\n _hideDirClass: function () {\n var anchor = $(this.options.anchor);\n var direction = ((anchor.attr('class') || '').match(ACTIVEBORDERREGEXP) || [\n '',\n 'down'\n ])[1];\n var dirClass = ACTIVEBORDER + '-' + direction;\n anchor.removeClass(dirClass).children(ACTIVECHILDREN).removeClass(ACTIVE).removeClass(dirClass);\n this.element.removeClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n _showDirClass: function (animation) {\n var direction = animation.effects.slideIn ? animation.effects.slideIn.direction : 'down';\n var dirClass = ACTIVEBORDER + '-' + direction;\n $(this.options.anchor).addClass(dirClass).children(ACTIVECHILDREN).addClass(ACTIVE).addClass(dirClass);\n this.element.addClass(ACTIVEBORDER + '-' + kendo.directions[direction].reverse);\n },\n position: function () {\n if (this.visible()) {\n this.flipped = this._position();\n }\n },\n toggle: function () {\n var that = this;\n that[that.visible() ? CLOSE : OPEN]();\n },\n visible: function () {\n return this.element.is(':' + VISIBLE);\n },\n close: function (skipEffects) {\n var that = this, options = that.options, wrap, animation, openEffects, closeEffects;\n if (that.visible()) {\n wrap = that.wrapper[0] ? that.wrapper : kendo.wrap(that.element).hide();\n that._toggleResize(false);\n if (that._closing || that._trigger(CLOSE)) {\n that._toggleResize(true);\n return;\n }\n that.element.find('.k-popup').each(function () {\n var that = $(this), popup = that.data('kendoPopup');\n if (popup) {\n popup.close(skipEffects);\n }\n });\n DOCUMENT_ELEMENT.unbind(that.downEvent, that._mousedownProxy);\n if (skipEffects) {\n animation = {\n hide: true,\n effects: {}\n };\n } else {\n animation = extend(true, {}, options.animation.close);\n openEffects = that.element.data(EFFECTS);\n closeEffects = animation.effects;\n if (!closeEffects && !kendo.size(closeEffects) && openEffects && kendo.size(openEffects)) {\n animation.effects = openEffects;\n animation.reverse = true;\n }\n that._closing = true;\n }\n that.element.kendoStop(true).attr('aria-hidden', true);\n wrap.css({ overflow: HIDDEN }).attr('aria-hidden', true);\n that.element.kendoAnimate(animation);\n if (skipEffects) {\n that._animationClose();\n }\n }\n },\n _trigger: function (ev) {\n return this.trigger(ev, { type: ev });\n },\n _resize: function (e) {\n var that = this;\n if (support.resize.indexOf(e.type) !== -1) {\n clearTimeout(that._resizeTimeout);\n that._resizeTimeout = setTimeout(function () {\n that._position();\n that._resizeTimeout = null;\n }, 50);\n } else {\n if (!that._hovered || that._activated && that.element.hasClass('k-list-container')) {\n that.close();\n }\n }\n },\n _toggleResize: function (toggle) {\n var method = toggle ? 'on' : 'off';\n var eventNames = support.resize;\n if (!(support.mobileOS.ios || support.mobileOS.android)) {\n eventNames += ' ' + SCROLL;\n }\n this._scrollableParents()[method](SCROLL, this._resizeProxy);\n WINDOW[method](eventNames, this._resizeProxy);\n },\n _mousedown: function (e) {\n var that = this, container = that.element[0], options = that.options, anchor = $(options.anchor)[0], toggleTarget = options.toggleTarget, target = kendo.eventTarget(e), popup = $(target).closest('.k-popup'), mobile = popup.parent().parent('.km-shim').length;\n popup = popup[0];\n if (!mobile && popup && popup !== that.element[0]) {\n return;\n }\n if ($(e.target).closest('a').data('rel') === 'popover') {\n return;\n }\n if (!contains(container, target) && !contains(anchor, target) && !(toggleTarget && contains($(toggleTarget)[0], target))) {\n that.close();\n }\n },\n _fit: function (position, size, viewPortSize) {\n var output = 0;\n if (position + size > viewPortSize) {\n output = viewPortSize - (position + size);\n }\n if (position < 0) {\n output = -position;\n }\n return output;\n },\n _flip: function (offset, size, anchorSize, viewPortSize, origin, position, boxSize) {\n var output = 0;\n boxSize = boxSize || size;\n if (position !== origin && position !== CENTER && origin !== CENTER) {\n if (offset + boxSize > viewPortSize) {\n output += -(anchorSize + size);\n }\n if (offset + output < 0) {\n output += anchorSize + size;\n }\n }\n return output;\n },\n _scrollableParents: function () {\n return $(this.options.anchor).parentsUntil('body').filter(function (index, element) {\n return kendo.isScrollable(element);\n });\n },\n _position: function (fixed) {\n var that = this, element = that.element, wrapper = that.wrapper, options = that.options, viewport = $(options.viewport), zoomLevel = support.zoomLevel(), isWindow = !!(viewport[0] == window && window.innerWidth && zoomLevel <= 1.02), anchor = $(options.anchor), origins = options.origin.toLowerCase().split(' '), positions = options.position.toLowerCase().split(' '), collisions = that.collisions, siblingContainer, parents, parentZIndex, zIndex = 10002, idx = 0, docEl = document.documentElement, length, viewportOffset, viewportWidth, viewportHeight;\n if (options.viewport === window) {\n viewportOffset = {\n top: window.pageYOffset || document.documentElement.scrollTop || 0,\n left: window.pageXOffset || document.documentElement.scrollLeft || 0\n };\n } else {\n viewportOffset = viewport.offset();\n }\n if (isWindow) {\n viewportWidth = window.innerWidth;\n viewportHeight = window.innerHeight;\n } else {\n viewportWidth = viewport.width();\n viewportHeight = viewport.height();\n }\n if (isWindow && docEl.scrollHeight - docEl.clientHeight > 0) {\n var sign = options.isRtl ? -1 : 1;\n viewportWidth -= sign * kendo.support.scrollbar();\n }\n siblingContainer = anchor.parents().filter(wrapper.siblings());\n if (siblingContainer[0]) {\n parentZIndex = Math.max(Number(siblingContainer.css('zIndex')), 0);\n if (parentZIndex) {\n zIndex = parentZIndex + 10;\n } else {\n parents = anchor.parentsUntil(siblingContainer);\n for (length = parents.length; idx < length; idx++) {\n parentZIndex = Number($(parents[idx]).css('zIndex'));\n if (parentZIndex && zIndex < parentZIndex) {\n zIndex = parentZIndex + 10;\n }\n }\n }\n }\n wrapper.css('zIndex', zIndex);\n if (fixed && fixed.isFixed) {\n wrapper.css({\n left: fixed.x,\n top: fixed.y\n });\n } else {\n wrapper.css(that._align(origins, positions));\n }\n var pos = getOffset(wrapper, POSITION, anchor[0] === wrapper.offsetParent()[0]), offset = getOffset(wrapper), anchorParent = anchor.offsetParent().parent('.k-animation-container,.k-popup,.k-group');\n if (anchorParent.length) {\n pos = getOffset(wrapper, POSITION, true);\n offset = getOffset(wrapper);\n }\n offset.top -= viewportOffset.top;\n offset.left -= viewportOffset.left;\n if (!that.wrapper.data(LOCATION)) {\n wrapper.data(LOCATION, extend({}, pos));\n }\n var offsets = extend({}, offset), location = extend({}, pos), adjustSize = options.adjustSize;\n if (collisions[0] === 'fit') {\n location.top += that._fit(offsets.top, outerHeight(wrapper) + adjustSize.height, viewportHeight / zoomLevel);\n }\n if (collisions[1] === 'fit') {\n location.left += that._fit(offsets.left, outerWidth(wrapper) + adjustSize.width, viewportWidth / zoomLevel);\n }\n var flipPos = extend({}, location);\n var elementHeight = outerHeight(element);\n var wrapperHeight = outerHeight(wrapper);\n if (!wrapper.height() && elementHeight) {\n wrapperHeight = wrapperHeight + elementHeight;\n }\n if (collisions[0] === 'flip') {\n location.top += that._flip(offsets.top, elementHeight, outerHeight(anchor), viewportHeight / zoomLevel, origins[0], positions[0], wrapperHeight);\n }\n if (collisions[1] === 'flip') {\n location.left += that._flip(offsets.left, outerWidth(element), outerWidth(anchor), viewportWidth / zoomLevel, origins[1], positions[1], outerWidth(wrapper));\n }\n element.css(POSITION, ABSOLUTE);\n wrapper.css(location);\n return location.left != flipPos.left || location.top != flipPos.top;\n },\n _align: function (origin, position) {\n var that = this, element = that.wrapper, anchor = $(that.options.anchor), verticalOrigin = origin[0], horizontalOrigin = origin[1], verticalPosition = position[0], horizontalPosition = position[1], anchorOffset = getOffset(anchor), appendTo = $(that.options.appendTo), appendToOffset, width = outerWidth(element), height = outerHeight(element) || outerHeight(element.children().first()), anchorWidth = outerWidth(anchor), anchorHeight = outerHeight(anchor), top = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var stableSort = kendo.support.stableSort;\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n this._focus(next);\n e.preventDefault();\n },\n _focusableElements: function () {\n var elements = this.element.find(focusableNodesSelector).filter(function (i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n });\n if (this.element.is('[tabindex]')) {\n elements.push(this.element[0]);\n }\n return elements;\n },\n _sortFocusableElements: function (elements) {\n var sortedElements;\n if (stableSort) {\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = '__k_index';\n elements.each(function (i, item) {\n item.setAttribute(attrName, i);\n });\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex === next.tabIndex ? parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) : prev.tabIndex - next.tabIndex;\n });\n elements.removeAttr(attrName);\n }\n return sortedElements;\n },\n _nextFocusable: function (e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function (element) {\n if (element.nodeName == 'IFRAME') {\n element.contentWindow.document.body.focus();\n return;\n }\n element.focus();\n if (element.nodeName == 'INPUT' && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function (element) {\n var elementType = element.type.toLowerCase();\n return elementType === 'text' || elementType === 'search' || elementType === 'url' || elementType === 'tel' || elementType === 'password';\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tooltip', [\n 'kendo.core',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '
    #if (!autoHide) {#
    #}#' + '
    ' + '#if (callout){ #
    #}#' + '
    ', IFRAMETEMPLATE = kendo.template(''), NS = '.kendoTooltip', POSITIONS = {\n bottom: {\n origin: 'bottom center',\n position: 'top center'\n },\n top: {\n origin: 'top center',\n position: 'bottom center'\n },\n left: {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n right: {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n },\n center: {\n position: 'center center',\n origin: 'center center'\n }\n }, REVERSE = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'center': 'center'\n }, DIRCLASSES = {\n bottom: 'n',\n top: 's',\n left: 'e',\n right: 'w',\n center: 'n'\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'outerHeight'\n },\n 'vertical': {\n offset: 'left',\n size: 'outerWidth'\n }\n }, DEFAULTCONTENT = function (e) {\n return e.target.data(kendo.ns + 'title');\n };\n function restoreTitle(element) {\n while (element.length) {\n if (restoreTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n function restoreTitleAttributeForElement(element) {\n var title = element.data(kendo.ns + 'title');\n if (title) {\n element.attr('title', title);\n element.removeData(kendo.ns + 'title');\n return true;\n }\n }\n function saveTitleAttributeForElement(element) {\n var title = element.attr('title');\n if (title) {\n element.data(kendo.ns + 'title', title);\n element.attr('title', '');\n return true;\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n if (saveTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n var Tooltip = Widget.extend({\n init: function (element, options) {\n var that = this, axis;\n Widget.fn.init.call(that, element, options);\n axis = that.options.position.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that));\n if (!this._isShownOnFocus()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && !this._isShownOnFocus()) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on('blur' + NS, that.options.filter, proxy(that._blur, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n callout: true,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _isShownOnFocus: function () {\n return this.options.showOn && this.options.showOn.match(/focus/);\n },\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that.options.showOn && that.options.showOn.match(/click/)) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n saveTitleAttributes(currentTarget);\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide && !this._isShownOnFocus()) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n this._closePopup(e.currentTarget);\n clearTimeout(this.timeout);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), arrowBorder = parseInt(that.arrow.css('border-top-width'), 10), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2 - arrowBorder;\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n h *= 60;\n s *= 100;\n l *= 100;\n }\n return new HSL(h, s, l, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var l = ref.l;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n h /= 360;\n s /= 100;\n l /= 100;\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\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)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\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)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n return 1;\n }\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function bindEvents(element, events) {\n for (var eventName in events) {\n var eventNames = eventName.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n }\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n var documentElement = document.documentElement;\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n }\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element);\n var stylesArray = Array.isArray(styles) ? styles : [styles];\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n return result;\n }\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + 'px';\n }\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n } else {\n var size$1 = elementStyles(element, [\n 'width',\n 'height'\n ]);\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n function unbindEvents(element, events) {\n if (events === void 0) {\n events = {};\n }\n for (var name in events) {\n var eventNames = name.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n }\n var util = {\n append: append,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n },\n get: function (field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n },\n set: function (field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n },\n _set: function (field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n },\n _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n }\n });\n ObserversMixin.extend(OptionsStore.prototype);\n function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n },\n multiplyCopy: function (matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n },\n invert: function () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n },\n clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n },\n round: function (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n },\n toArray: function (precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n },\n toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n },\n scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n },\n transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n },\n toString: function (digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n }\n });\n Point.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function () {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function () {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width || 0;\n this.height = height || 0;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n }\n });\n Size.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n },\n transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n },\n expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n },\n _isOnPath: function (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n });\n Rect.fromPoints = function () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n ObserversMixin.extend(Rect.prototype);\n var Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n },\n multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform(parentMatrix);\n }\n },\n currentTransform: function (parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n },\n opacity: function (value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n },\n clippedBBox: function (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n return {\n x: extremeX,\n y: extremeY\n };\n }\n var PI_DIV_2 = Math.PI / 2;\n var Circle$2 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle$2(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _pointAt: function (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n },\n containsPoint: function (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n },\n _isOnPath: function (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n });\n defineAccessors(Circle$2.prototype, ['radius']);\n ObserversMixin.extend(Circle$2.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n },\n stroke: function (color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n }\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n },\n geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var DEFAULT_STROKE = '#000';\n var Circle = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle.prototype.nodeType = 'Circle';\n Paintable.extend(Circle.prototype);\n Measurable.extend(Circle.prototype);\n defineGeometryAccessors(Circle.prototype, ['geometry']);\n var PRECISION = 10;\n function close(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc$2 = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n },\n clone: function () {\n return new Arc$2(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n },\n curvePoints: function () {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n },\n bbox: function (matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _arcInterval: function () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n },\n _intervalCurvePoints: function (startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n },\n _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n },\n _isOnPath: function (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n });\n Arc$2.fromPoints = function (start, end, rx, ry, largeArc, swipe, rotation) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n return new Arc$2(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n defineAccessors(Arc$2.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc$2.prototype);\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var rotation = parameters.rotation;\n if (rotation === void 0) {\n rotation = 0;\n }\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n var sign = largeArc !== swipe ? 1 : -1;\n var xt2 = Math.pow(xT, 2);\n var yt2 = Math.pow(yT, 2);\n var rx2 = Math.pow(rx, 2);\n var ry2 = Math.pow(ry, 2);\n var delta = xt2 / rx2 + yt2 / ry2;\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n if (isNaN(constT)) {\n constT = 0;\n }\n var cxT = constT * (rx * yT) / ry;\n var cyT = -constT * (ry * xT) / rx;\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n var uX = (xT - cxT) / rx;\n var uY = (yT - cyT) / ry;\n var vX = -(xT + cxT) / rx;\n var vY = -(yT + cyT) / ry;\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n if (swipe && angle < 0) {\n angle += 360;\n }\n var endAngle = startAngle + angle;\n var signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = Math.abs(endAngle) % 360 * signEndAngle;\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n },\n push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n },\n shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n },\n _splice: function (index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n },\n _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\n });\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n },\n equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n },\n _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n },\n _curveExtremesFor: function (points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n },\n _curveExtremes: function (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n },\n _intersectionsTo: function (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n },\n _isOnCurveTo: function (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n },\n _isOnLineTo: function (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n },\n _isOnPathTo: function (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n var Path = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n },\n moveTo: function (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n },\n lineTo: function (x, y) {\n var point = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point);\n this.segments.push(segment);\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n this.segments.push(segment);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start), anchor.y - radiusY * Math.sin(start));\n var arc = new Arc$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n },\n close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n },\n _isOnPath: function (point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n },\n _bbox: function (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n }\n });\n Path.fromRect = function (rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function (points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n var DEFAULT_STROKE$1 = '#000';\n var Arc = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc.prototype.nodeType = 'Arc';\n Paintable.extend(Arc.prototype);\n Measurable.extend(Arc.prototype);\n defineGeometryAccessors(Arc.prototype, ['geometry']);\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n var MultiPath = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n moveTo: function (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n },\n lineTo: function (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n return this;\n },\n close: function () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n },\n _bbox: function (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n },\n rawBBox: function () {\n return elementsBoundingBox(this.paths, false);\n },\n _containsPoint: function (point) {\n var paths = this.paths;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n },\n _isOnPath: function (point) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n });\n MultiPath.prototype.nodeType = 'MultiPath';\n Paintable.extend(MultiPath.prototype);\n Measurable.extend(MultiPath.prototype);\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = Element$1.extend({\n init: function (content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.content(content);\n this.position(position);\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n },\n content: function (value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n },\n measure: function () {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n },\n rect: function () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [\n size.width,\n size.height\n ]);\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this.rect().bbox();\n },\n _containsPoint: function (point) {\n return this.rect().containsPoint(point);\n }\n });\n Text.prototype.nodeType = 'Text';\n Paintable.extend(Text.prototype);\n definePointAccessors(Text.prototype, ['position']);\n var Image$1 = Element$1.extend({\n init: function (src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.src(src);\n this.rect(rect);\n },\n src: function (value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this._rect.bbox();\n },\n _containsPoint: function (point) {\n return this._rect.containsPoint(point);\n },\n _hasFill: function () {\n return this.src();\n }\n });\n Image$1.prototype.nodeType = 'Image';\n defineGeometryAccessors(Image$1.prototype, ['rect']);\n var Traversable = {\n extend: function (proto, childrenField) {\n proto.traverse = function (callback) {\n var children = this[childrenField];\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n return this;\n };\n }\n };\n var Group = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.children = [];\n },\n childrenChange: function (action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n },\n append: function () {\n append(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n },\n insert: function (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n },\n insertAt: function (element, index) {\n return this.insert(index, element);\n },\n remove: function (element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n removeAt: function (index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n clear: function () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n },\n bbox: function (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n },\n rawBBox: function () {\n return elementsBoundingBox(this.children, false);\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n },\n currentTransform: function (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n },\n _reparent: function (elements, newParent) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var child = elements[i];\n var parent = child.parent;\n if (parent && parent !== this$1 && parent.remove) {\n parent.remove(child);\n }\n child.parent = newParent;\n }\n }\n });\n Group.prototype.nodeType = 'Group';\n Traversable.extend(Group.prototype, 'children');\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\n function alignStart(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis];\n } else if (align === 'end') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n function alignStartReverse(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === 'end') {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n var DEFAULT_OPTIONS = {\n alignContent: 'start',\n justifyContent: 'start',\n alignItems: 'start',\n spacing: 0,\n orientation: 'horizontal',\n lineSpacing: 0,\n wrap: true,\n revers: false\n };\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n };\n var Layout = Group.extend({\n init: function (rect, options) {\n Group.fn.init.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n },\n rect: function (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n },\n _initMap: function () {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === 'horizontal') {\n fieldMap.sizeField = 'width';\n fieldMap.groupsSizeField = 'height';\n fieldMap.groupAxis = 'x';\n fieldMap.groupsAxis = 'y';\n } else {\n fieldMap.sizeField = 'height';\n fieldMap.groupsSizeField = 'width';\n fieldMap.groupAxis = 'y';\n fieldMap.groupsAxis = 'x';\n }\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n },\n reflow: function () {\n var this$1 = this;\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n if (this.options.transform) {\n this.transform(null);\n }\n var options = this.options;\n var rect = this._rect;\n var ref = this._initGroups();\n var groups = ref.groups;\n var groupsSize = ref.groupsSize;\n var ref$1 = this._fieldMap;\n var sizeField = ref$1.sizeField;\n var groupsSizeField = ref$1.groupsSizeField;\n var groupAxis = ref$1.groupAxis;\n var groupsAxis = ref$1.groupsAxis;\n var groupOrigin = new Point();\n var elementOrigin = new Point();\n var size = new Size();\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var elementStart, group, groupBox;\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[idx];\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this$1.forEach(group.bboxes, arrangeElements);\n groupStart += group.lineSize + options.lineSpacing;\n }\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform$$1 = transform();\n if (groupAxis === 'x') {\n transform$$1.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform$$1.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform$$1.scale(scale, scale);\n this.transform(transform$$1);\n }\n },\n _initGroups: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var lineSpacing = options.lineSpacing;\n var wrap = options.wrap;\n var spacing = options.spacing;\n var sizeField = this._fieldMap.sizeField;\n var group = this._newGroup();\n var groups = [];\n var addGroup = function () {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n var groupsSize = -lineSpacing;\n for (var idx = 0; idx < children.length; idx++) {\n var element = children[idx];\n var bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1._newGroup();\n } else {\n addGroup();\n group = this$1._newGroup();\n this$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1._addToGroup(group, bbox, element);\n }\n }\n }\n if (group.bboxes.length) {\n addGroup();\n }\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n },\n _addToGroup: function (group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n },\n _newGroup: function () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n });\n var Rect$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _containsPoint: function (point) {\n return this._geometry.containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Rect$2.prototype.nodeType = 'Rect';\n Paintable.extend(Rect$2.prototype);\n Measurable.extend(Rect$2.prototype);\n defineGeometryAccessors(Rect$2.prototype, ['geometry']);\n function alignElements(elements, rect, alignment, axis, sizeField) {\n for (var idx = 0; idx < elements.length; idx++) {\n var bbox = elements[idx].clippedBBox();\n if (bbox) {\n var point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || 'start', axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n }\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'x', 'width');\n }\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'y', 'height');\n }\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n var origin = new Point();\n var previousBBox = elements[0].bbox;\n for (var idx = 1; idx < elements.length; idx++) {\n var element = elements[idx].element;\n var bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n }\n function createStackElements(elements) {\n var stackElements = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n return stackElements;\n }\n function stack(elements) {\n stackElements(createStackElements(elements), 'x', 'y', 'width');\n }\n function vStack(elements) {\n stackElements(createStackElements(elements), 'y', 'x', 'height');\n }\n function getStacks(elements, rect, sizeField) {\n var maxSize = rect.size[sizeField];\n var stacks = [];\n var stack = [];\n var stackSize = 0;\n var element, bbox;\n var addElementToStack = function () {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n bbox = element.clippedBBox();\n if (bbox) {\n var size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n if (stack.length) {\n stacks.push(stack);\n }\n return stacks;\n }\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n var stacks = getStacks(elements, rect, sizeField);\n var origin = rect.origin.clone();\n var result = [];\n for (var idx = 0; idx < stacks.length; idx++) {\n var stack = stacks[idx];\n var startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n }\n function wrap(elements, rect) {\n return wrapElements(elements, rect, 'x', 'y', 'width');\n }\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, 'y', 'x', 'height');\n }\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform$$1 = element.transform() || transform();\n transform$$1.scale(scale, scale);\n element.transform(transform$$1);\n }\n }\n }\n var StopsArray = ElementsArray.extend({\n _change: function () {\n this.optionsChange({ field: 'stops' });\n }\n });\n function optionsAccessor(name) {\n return function (value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n return this.options.get(name);\n };\n }\n function defineOptionsAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n }\n var GradientStop = Class.extend({\n init: function (offset, color, opacity) {\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n this.options.addObserver(this);\n }\n });\n GradientStop.create = function (arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n return stop;\n }\n };\n defineOptionsAccessors(GradientStop.prototype, [\n 'offset',\n 'color',\n 'opacity'\n ]);\n ObserversMixin.extend(GradientStop.prototype);\n var Gradient = Class.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n },\n userSpace: function (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n },\n _createStops: function (stops) {\n if (stops === void 0) {\n stops = [];\n }\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n return result;\n },\n addStop: function (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n },\n removeStop: function (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n });\n Gradient.prototype.nodeType = 'Gradient';\n ObserversMixin.extend(Gradient.prototype);\n $.extend(Gradient.prototype, {\n optionsChange: function (e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n },\n geometryChange: function () {\n this.optionsChange();\n }\n });\n var LinearGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n });\n definePointAccessors(LinearGradient.prototype, [\n 'start',\n 'end'\n ]);\n var RadialGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n },\n radius: function (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n },\n fallbackFill: function (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n }\n });\n definePointAccessors(RadialGradient.prototype, ['center']);\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n function linear(position) {\n return position;\n }\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158, p = 0, a = diff;\n if (position === 0) {\n return start;\n }\n if (position === 1) {\n return start + diff;\n }\n if (!p) {\n p = 0.5;\n }\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n return a * Math.pow(2, -10 * position) * Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n var easingFunctions = {\n swing: swing,\n linear: linear,\n easeOutElastic: easeOutElastic\n };\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var Animation = Class.extend({\n init: function (element, options) {\n this.options = $.extend({}, this.options, options);\n this.element = element;\n },\n setup: function () {\n },\n step: function () {\n },\n play: function () {\n var this$1 = this;\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay;\n if (delay === void 0) {\n delay = 0;\n }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1._stopped) {\n return;\n }\n var wallTime = now();\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n this$1.step(easingPosition);\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1.abort();\n }\n };\n loop();\n }, delay);\n }\n },\n abort: function () {\n this._stopped = true;\n },\n destroy: function () {\n this.abort();\n }\n });\n Animation.prototype.options = {\n duration: 500,\n easing: 'swing'\n };\n var AnimationFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (element, options) {\n var items = this._items;\n var match;\n if (options && options.type) {\n var type = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n }\n });\n AnimationFactory.current = new AnimationFactory();\n Animation.create = function (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n var ShapeMap = {\n l: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n point.translateWith(position);\n }\n path.lineTo(point.x, point.y);\n position.x = point.x;\n position.y = point.y;\n }\n },\n c: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 6) {\n var controlOut = new Point(parameters[i], parameters[i + 1]);\n var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n var point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n path.curveTo(controlOut, controlIn, point);\n position.x = point.x;\n position.y = point.y;\n }\n },\n v: function (path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n h: function (path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n a: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 7) {\n var radiusX = parameters[i];\n var radiusY = parameters[i + 1];\n var rotation = parameters[i + 2];\n var largeArc = parameters[i + 3];\n var swipe = parameters[i + 4];\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n s: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var lastControlIn;\n if (previousCommand === 's' || previousCommand === 'c') {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n for (var i = 0; i < parameters.length; i += 4) {\n var controlIn = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n var controlOut = void 0;\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n lastControlIn = controlIn;\n path.curveTo(controlOut, controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n q: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 4) {\n var controlPoint = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n t: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var controlPoint;\n if (previousCommand === 'q' || previousCommand === 't') {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone().translateWith(position.scaleCopy(-1 / 3)).scale(3 / 2);\n }\n for (var i = 0; i < parameters.length; i += 2) {\n var endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n var third = 1 / 3;\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n var scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n }\n var SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n var SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n var MOVE = 'm';\n var CLOSE = 'z';\n function parseParameters(str) {\n var parameters = [];\n str.replace(SPLIT_REGEX, function (match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n }\n var PathParser = Class.extend({\n parse: function (str, options) {\n var multiPath = new MultiPath(options);\n var position = new Point();\n var previousCommand;\n str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n var command = element.toLowerCase();\n var isRelative = command === element;\n var parameters = parseParameters(params.trim());\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n multiPath.moveTo(position.x, position.y);\n if (parameters.length > 2) {\n command = 'l';\n parameters.splice(0, 2);\n }\n }\n if (ShapeMap[command]) {\n ShapeMap[command](multiPath, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n multiPath.close();\n }\n } else if (command !== MOVE) {\n throw new Error('Error while parsing SVG path. Unsupported command: ' + command);\n }\n previousCommand = command;\n });\n return multiPath;\n }\n });\n PathParser.current = new PathParser();\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var SurfaceFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type, order) {\n var items = this._items;\n var first = items[0];\n var entry = {\n name: name,\n type: type,\n order: order\n };\n if (!first || order < first.order) {\n items.unshift(entry);\n } else {\n items.push(entry);\n }\n },\n create: function (element, options) {\n var items = this._items;\n var match = items[0];\n if (options && options.type) {\n var preferred = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n kendo.logToConsole('Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n' + '- The browser does not support SVG and Canvas. User agent: ' + navigator.userAgent);\n }\n });\n SurfaceFactory.current = new SurfaceFactory();\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize'\n ];\n var Surface = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = $.extend({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n this._click = this._handler('click');\n this._mouseenter = this._handler('mouseenter');\n this._mouseleave = this._handler('mouseleave');\n this._mousemove = this._handler('mousemove');\n this._visual = new Group();\n elementSize(element, this.options);\n this.bind(events, this.options);\n this._enableTracking();\n },\n draw: function (element) {\n this._visual.children.push(element);\n },\n clear: function () {\n this._visual.children = [];\n },\n destroy: function () {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n },\n eventTarget: function (e) {\n var this$1 = this;\n var domNode = eventElement(e);\n var node;\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1.element) {\n break;\n }\n domNode = domNode.parentElement;\n }\n if (node) {\n return node.srcElement;\n }\n },\n exportVisual: function () {\n return this._visual;\n },\n getSize: function () {\n return elementSize(this.element);\n },\n currentSize: function (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n },\n setSize: function (size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n size: function (value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n },\n suspendTracking: function () {\n this._suspendedTracking = true;\n },\n resumeTracking: function () {\n this._suspendedTracking = false;\n },\n _enableTracking: function () {\n },\n _resize: function () {\n },\n _handler: function (eventName) {\n var this$1 = this;\n return function (e) {\n var node = this$1.eventTarget(e);\n if (node && !this$1._suspendedTracking) {\n this$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n },\n _elementOffset: function () {\n var element = this.element;\n var ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var ref$1 = elementOffset(element);\n var left = ref$1.left;\n var top = ref$1.top;\n return {\n left: left + parseInt(paddingLeft, 10),\n top: top + parseInt(paddingTop, 10)\n };\n },\n _surfacePoint: function (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n return new Point(x, y);\n }\n });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n },\n load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n },\n removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n }\n });\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\\'' + value + '\\' ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var hashIndex = href.indexOf('#');\n var url = '';\n if (base && !supportBrowser.msie) {\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n url = href;\n }\n return url;\n }\n function refUrl(id, skipBaseHref) {\n var base = skipBaseHref ? '' : baseUrl();\n return 'url(' + base + '#' + id + ')';\n }\n var Node = BaseNode.extend({\n init: function (srcElement, options) {\n BaseNode.fn.init.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n },\n destroy: function () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode.fn.destroy.call(this);\n },\n load: function (elements, pos) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1.options);\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n childNode.createDefinitions();\n if (children && children.length > 0) {\n childNode.load(children);\n }\n var element = this$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n },\n root: function () {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n },\n attachTo: function (domElement, pos) {\n var container = document.createElement('div');\n renderSVG$1(container, '' + this.render() + '');\n var element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n },\n setElement: function (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n this.element = element;\n this.element._kendoNode = this;\n var nodes = this.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n },\n clear: function () {\n this.clearDefinitions();\n if (this.element) {\n this.element.innerHTML = '';\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n this.childNodes = [];\n },\n removeSelf: function () {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n BaseNode.fn.removeSelf.call(this);\n },\n template: function () {\n return this.renderChildren();\n },\n render: function () {\n return this.template();\n },\n renderChildren: function () {\n var nodes = this.childNodes;\n var output = '';\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n return output;\n },\n optionsChange: function (e) {\n var field = e.field;\n var value = e.value;\n if (field === 'visible') {\n this.css('display', value ? '' : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === 'opacity') {\n this.attr('opacity', value);\n } else if (field === 'cursor') {\n this.css('cursor', value);\n } else if (field === 'id') {\n if (value) {\n this.attr('id', value);\n } else {\n this.removeAttr('id');\n }\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n attr: function (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n },\n allAttr: function (attrs) {\n var this$1 = this;\n for (var i = 0; i < attrs.length; i++) {\n this$1.attr(attrs[i][0], attrs[i][1]);\n }\n },\n css: function (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n },\n allCss: function (styles) {\n var this$1 = this;\n for (var i = 0; i < styles.length; i++) {\n this$1.css(styles[i][0], styles[i][1]);\n }\n },\n removeAttr: function (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n },\n mapTransform: function (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n 'matrix(' + transform.matrix().toString(6) + ')'\n ]);\n }\n return attrs;\n },\n renderTransform: function () {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n },\n transformChange: function (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n },\n mapStyle: function () {\n var options = this.srcElement.options;\n var style = [[\n 'cursor',\n options.cursor\n ]];\n if (options.visible === false) {\n style.push([\n 'display',\n NONE\n ]);\n }\n return style;\n },\n renderStyle: function () {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n },\n renderOpacity: function () {\n return renderAttr('opacity', this.srcElement.options.opacity);\n },\n renderId: function () {\n return renderAttr('id', this.srcElement.options.id);\n },\n createDefinitions: function () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n for (var field in DefinitionMap) {\n var definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: 'add',\n definitions: definitions\n });\n }\n }\n },\n definitionChange: function (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n },\n updateDefinition: function (type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: 'remove',\n definitions: definition\n });\n delete definitions[type];\n }\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: 'add',\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n },\n clearDefinitions: function () {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n },\n renderDefinitions: function () {\n return renderAllAttr(this.mapDefinitions());\n },\n mapDefinitions: function () {\n var this$1 = this;\n var definitions = this.definitions;\n var attrs = [];\n for (var field in definitions) {\n attrs.push([\n DefinitionMap[field],\n this$1.refUrl(definitions[field].id)\n ]);\n }\n return attrs;\n },\n refUrl: function (id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n return refUrl(id, skipBaseHref);\n }\n });\n var GradientStopNode = Node.extend({\n template: function () {\n return '';\n },\n renderOffset: function () {\n return renderAttr('offset', this.srcElement.offset());\n },\n mapStyle: function () {\n var srcElement = this.srcElement;\n return [\n [\n 'stop-color',\n srcElement.color()\n ],\n [\n 'stop-opacity',\n srcElement.opacity()\n ]\n ];\n },\n optionsChange: function (e) {\n if (e.field === 'offset') {\n this.attr(e.field, e.value);\n } else if (e.field === 'color' || e.field === 'opacity') {\n this.css('stop-' + e.field, e.value);\n }\n }\n });\n var GradientNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n },\n loadStops: function () {\n var this$1 = this;\n var stops = this.srcElement.stops;\n var element = this.element;\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n },\n optionsChange: function (e) {\n if (e.field === 'gradient.stops') {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === 'gradient') {\n this.allAttr(this.mapCoordinates());\n }\n },\n renderCoordinates: function () {\n return renderAllAttr(this.mapCoordinates());\n },\n mapSpace: function () {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n }\n });\n var LinearGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [\n 'x1',\n start.x\n ],\n [\n 'y1',\n start.y\n ],\n [\n 'x2',\n end.x\n ],\n [\n 'y2',\n end.y\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var RadialGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [\n 'cx',\n center.x\n ],\n [\n 'cy',\n center.y\n ],\n [\n 'r',\n radius\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var ClipNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n },\n template: function () {\n return '' + this.renderChildren() + '';\n }\n });\n var DefinitionNode = Node.extend({\n init: function () {\n Node.fn.init.call(this);\n this.definitionMap = {};\n },\n attachTo: function (domElement) {\n this.element = domElement;\n },\n template: function () {\n return '' + this.renderChildren() + '';\n },\n definitionChange: function (e) {\n var definitions = e.definitions;\n var action = e.action;\n if (action === 'add') {\n this.addDefinitions(definitions);\n } else if (action === 'remove') {\n this.removeDefinitions(definitions);\n }\n },\n createDefinition: function (type, item) {\n var nodeType;\n if (type === 'clip') {\n nodeType = ClipNode;\n } else if (type === 'fill') {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n },\n addDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n },\n addDefinition: function (type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n },\n removeDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n },\n removeDefinition: function (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n });\n var RootNode = Node.extend({\n init: function (options) {\n Node.fn.init.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n },\n attachTo: function (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n },\n clear: function () {\n BaseNode.prototype.clear.call(this);\n },\n template: function () {\n return this.defs.render() + this.renderChildren();\n },\n definitionChange: function (e) {\n this.defs.definitionChange(e);\n }\n });\n var RTL = 'rtl';\n function alignToScreen(element) {\n var ctm;\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) {\n }\n if (ctm) {\n var left = -ctm.e % 1;\n var top = -ctm.f % 1;\n var style = element.style;\n if (left !== 0 || top !== 0) {\n style.left = left + 'px';\n style.top = top + 'px';\n }\n }\n }\n var Surface$1 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this._root = new RootNode($.extend({ rtl: elementStyles(element, 'direction').direction === RTL }, this.options));\n renderSVG$1(this.element, this._template());\n this._rootElement = this.element.firstElementChild;\n alignToScreen(this._rootElement);\n this._root.attachTo(this._rootElement);\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n this.resize();\n },\n destroy: function () {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n Surface.fn.destroy.call(this);\n },\n translate: function (offset) {\n var viewBox = Math.round(offset.x) + ' ' + Math.round(offset.y) + ' ' + this._size.width + ' ' + this._size.height;\n this._offset = offset;\n this._rootElement.setAttribute('viewBox', viewBox);\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element]);\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n },\n svg: function () {\n return '' + this._template();\n },\n exportVisual: function () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n wrap.transform(transform().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n },\n _resize: function () {\n if (this._offset) {\n this.translate(this._offset);\n }\n },\n _template: function () {\n return '' + this._root.render() + '';\n }\n });\n Surface$1.prototype.type = 'svg';\n if (typeof document !== 'undefined' && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')) {\n Surface.support.svg = true;\n SurfaceFactory.current.register('svg', Surface$1, 10);\n }\n var GroupNode = Node.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n optionsChange: function (e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node.fn.optionsChange.call(this, e);\n }\n });\n NODE_MAP.Group = GroupNode;\n var DASH_ARRAYS = {\n dot: [\n 1.5,\n 3.5\n ],\n dash: [\n 4,\n 3.5\n ],\n longdash: [\n 8,\n 3.5\n ],\n dashdot: [\n 3.5,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdot: [\n 8,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdotdot: [\n 8,\n 3.5,\n 1.5,\n 3.5,\n 1.5,\n 3.5\n ]\n };\n var SOLID = 'solid';\n var BUTT = 'butt';\n var ATTRIBUTE_MAP = {\n 'fill.opacity': 'fill-opacity',\n 'stroke.color': 'stroke',\n 'stroke.width': 'stroke-width',\n 'stroke.opacity': 'stroke-opacity'\n };\n var SPACE = ' ';\n var PathNode = Node.extend({\n geometryChange: function () {\n this.attr('d', this.renderData());\n this.invalidate();\n },\n optionsChange: function (e) {\n switch (e.field) {\n case 'fill':\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr('fill');\n }\n break;\n case 'fill.color':\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n case 'stroke':\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr('stroke');\n }\n break;\n case 'transform':\n this.transformChange(e.value);\n break;\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n Node.fn.optionsChange.call(this, e);\n },\n content: function () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n },\n renderData: function () {\n return this.printPath(this.srcElement);\n },\n printPath: function (path) {\n var this$1 = this;\n var segments = path.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var output, currentType;\n for (var i = 1; i < length; i++) {\n var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n if (segmentType === 'L') {\n parts.push(this$1.printPoints(segments[i].anchor()));\n } else {\n parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n output = 'M' + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += 'Z';\n }\n return output;\n }\n },\n printPoints: function () {\n var points = arguments;\n var length = points.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n return result.join(' ');\n },\n segmentType: function (segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n },\n mapStroke: function (stroke) {\n var attrs = [];\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([\n 'stroke',\n stroke.color\n ]);\n attrs.push([\n 'stroke-width',\n stroke.width\n ]);\n attrs.push([\n 'stroke-linecap',\n this.renderLinecap(stroke)\n ]);\n attrs.push([\n 'stroke-linejoin',\n stroke.lineJoin\n ]);\n if (defined(stroke.opacity)) {\n attrs.push([\n 'stroke-opacity',\n stroke.opacity\n ]);\n }\n if (defined(stroke.dashType)) {\n attrs.push([\n 'stroke-dasharray',\n this.renderDashType(stroke)\n ]);\n }\n } else {\n attrs.push([\n 'stroke',\n NONE\n ]);\n }\n return attrs;\n },\n renderStroke: function () {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n },\n renderDashType: function (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width;\n if (width === void 0) {\n width = 1;\n }\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n return result.join(' ');\n }\n },\n renderLinecap: function (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n },\n mapFill: function (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === 'Gradient')) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([\n 'fill',\n fill.color\n ]);\n if (defined(fill.opacity)) {\n attrs.push([\n 'fill-opacity',\n fill.opacity\n ]);\n }\n } else {\n attrs.push([\n 'fill',\n NONE\n ]);\n }\n }\n return attrs;\n },\n renderFill: function () {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Path = PathNode;\n var ArcNode = PathNode.extend({\n renderData: function () {\n return this.printPath(this.srcElement.toPath());\n }\n });\n NODE_MAP.Arc = ArcNode;\n var CircleNode = PathNode.extend({\n geometryChange: function () {\n var center = this.center();\n this.attr('cx', center.x);\n this.attr('cy', center.y);\n this.attr('r', this.radius());\n this.invalidate();\n },\n center: function () {\n return this.srcElement.geometry().center;\n },\n radius: function () {\n return this.srcElement.geometry().radius;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Circle = CircleNode;\n var RectNode = PathNode.extend({\n geometryChange: function () {\n var geometry = this.srcElement.geometry();\n this.attr('x', geometry.origin.x);\n this.attr('y', geometry.origin.y);\n this.attr('width', geometry.size.width);\n this.attr('height', geometry.size.height);\n this.invalidate();\n },\n size: function () {\n return this.srcElement.geometry().size;\n },\n origin: function () {\n return this.srcElement.geometry().origin;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Rect = RectNode;\n var ImageNode = PathNode.extend({\n geometryChange: function () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapPosition: function () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n return [\n [\n 'x',\n tl.x\n ],\n [\n 'y',\n tl.y\n ],\n [\n 'width',\n rect.width() + 'px'\n ],\n [\n 'height',\n rect.height() + 'px'\n ]\n ];\n },\n renderPosition: function () {\n return renderAllAttr(this.mapPosition());\n },\n mapSource: function (encode) {\n var src = this.srcElement.src();\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n return [[\n 'xlink:href',\n src\n ]];\n },\n renderSource: function () {\n return renderAllAttr(this.mapSource(true));\n },\n template: function () {\n return '' + '';\n }\n });\n NODE_MAP.Image = ImageNode;\n var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n function decodeEntities(text) {\n if (!text || typeof text !== 'string' || !ENTITY_REGEX.test(text)) {\n return text;\n }\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n return element.textContent || element.innerText;\n });\n }\n if (typeof document !== 'undefined') {\n decodeEntities._element = document.createElement('span');\n }\n var TextNode = PathNode.extend({\n geometryChange: function () {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode.fn.content.call(this, this.srcElement.content());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapStyle: function (encode) {\n var style = PathNode.fn.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n style.push([\n 'font',\n font\n ], [\n 'white-space',\n 'pre'\n ]);\n return style;\n },\n pos: function () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n },\n renderContent: function () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return kendoUtil.normalizeText(content);\n },\n renderTextAnchor: function () {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n },\n template: function () {\n return '' + this.renderContent() + '';\n }\n });\n NODE_MAP.Text = TextNode;\n var MultiPathNode = PathNode.extend({\n renderData: function () {\n var this$1 = this;\n var paths = this.srcElement.paths;\n if (paths.length > 0) {\n var result = [];\n for (var i = 0; i < paths.length; i++) {\n result.push(this$1.printPath(paths[i]));\n }\n return result.join(' ');\n }\n }\n });\n NODE_MAP.MultiPath = MultiPathNode;\n var geometry = {\n Circle: Circle$2,\n Arc: Arc$2,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\n function exportGroup(group) {\n var root = new RootNode({ skipBaseHref: true });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '' + root.render() + '';\n root.destroy();\n return svg;\n }\n var svg = {\n Surface: Surface$1,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n },\n loadElements: function (elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n }\n });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas) {\n GroupNode$2.fn.init.call(this);\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d');\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n },\n destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _invalidate: function () {\n if (!this.ctx) {\n return;\n }\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n },\n insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n }\n });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n },\n pointShape: function (point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n },\n assignZindex: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n },\n optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n },\n add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n },\n _insert: function (elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n },\n remove: function (element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n });\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var SurfaceCursor = Class.extend({\n init: function (surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n },\n clear: function () {\n this._resetCursor();\n },\n destroy: function () {\n this._resetCursor();\n delete this.element;\n },\n _mouseenter: function (e) {\n var cursor = this._shapeCursor(e);\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n this._setCursor(cursor);\n }\n },\n _mouseleave: function () {\n this._resetCursor();\n },\n _shapeCursor: function (e) {\n var shape = e.element;\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n if (shape) {\n return shape.options.cursor;\n }\n },\n _getCursor: function () {\n if (this.element) {\n return this.element.style.cursor;\n }\n },\n _setCursor: function (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n },\n _resetCursor: function () {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n }\n });\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n destroy: function () {\n Surface.fn.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n if (this._cursor) {\n this._cursor.clear();\n }\n },\n eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate();\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n return promise;\n },\n suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n },\n _resize: function () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.invalidate();\n },\n _template: function () {\n return '';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n }\n });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\n }\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n },\n setFill: function (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n },\n setGradientFill: function (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n },\n setStroke: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n },\n dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n },\n setLineCap: function (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n },\n setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n }\n });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n },\n renderTo: function (ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n }\n });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n }\n });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$3(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = supportBrowser;\n function slice$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n var microsoft = browser.msie || browser.edge;\n var TextRect = Text.extend({\n init: function (str, rect, options) {\n Text.fn.init.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n },\n rect: function () {\n return this._pdfRect;\n },\n rawBBox: function () {\n return this._pdfRect;\n }\n });\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += ' ' + cls;\n }\n }\n function removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function (a, word) {\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(' ');\n }\n }\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function (key) {\n el.style[key] = styles[key];\n });\n }\n var matches = typeof Element !== 'undefined' && Element.prototype && function (p) {\n if (p.matches) {\n return function (el, selector) {\n return el.matches(selector);\n };\n }\n if (p.webkitMatchesSelector) {\n return function (el, selector) {\n return el.webkitMatchesSelector(selector);\n };\n }\n if (p.mozMatchesSelector) {\n return function (el, selector) {\n return el.mozMatchesSelector(selector);\n };\n }\n if (p.msMatchesSelector) {\n return function (el, selector) {\n return el.msMatchesSelector(selector);\n };\n }\n return function (s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n }(Element.prototype);\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n var cloneNodes = function ($) {\n if ($) {\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext('2d').drawImage(el, 0, 0);\n } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n clone.removeAttribute('id');\n clone.removeAttribute('name');\n clone.value = el.value;\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n return function cloneNodes(el) {\n var clone = function dive(node) {\n var clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n for (var i = node.firstChild; i; i = i.nextSibling) {\n clone.appendChild(dive(i));\n }\n return clone;\n }(el);\n var canvases = el.querySelectorAll('canvas');\n if (canvases.length) {\n slice$1(clone.querySelectorAll('canvas')).forEach(function (canvas$$1, i) {\n canvas$$1.getContext('2d').drawImage(canvases[i], 0, 0);\n });\n }\n var orig = el.querySelectorAll('input, select, textarea, option');\n slice$1(clone.querySelectorAll('input, select, textarea, option')).forEach(function (el, i) {\n el.removeAttribute('id');\n el.removeAttribute('name');\n el.value = orig[i].value;\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n return clone;\n };\n }\n }(typeof window !== 'undefined' && window.kendo && window.kendo.jQuery);\n function getXY(thing) {\n if (typeof thing == 'number') {\n return {\n x: thing,\n y: thing\n };\n }\n if (Array.isArray(thing)) {\n return {\n x: thing[0],\n y: thing[1]\n };\n }\n return {\n x: thing.x,\n y: thing.y\n };\n }\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n if (!element) {\n return promise.reject('No element to export');\n }\n if (typeof window.getComputedStyle != 'function') {\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+.');\n }\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n var scale = getXY(options.scale || 1);\n function doOne(element) {\n var group = new Group();\n var pos = element.getBoundingClientRect();\n setTransform(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n -pos.left * scale.x,\n -pos.top * scale.y\n ]);\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = 'a';\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n addClass(element, 'k-pdf-export');\n renderElement(element, group);\n removeClass(element, 'k-pdf-export');\n return group;\n }\n cacheImages(element, function () {\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != 'auto';\n var paperOptions = kendo.pdf.getPaperOptions(function (key, def) {\n if (key == 'paperSize') {\n return hasPaperSize ? options[key] : 'A4';\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n if (pageWidth) {\n pageWidth /= scale.x;\n }\n if (pageHeight) {\n pageHeight /= scale.y;\n }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n var group = new Group({\n pdf: {\n multiPage: true,\n paperSize: hasPaperSize ? paperOptions.paperSize : 'auto',\n _ignoreMargin: hasMargin\n }\n });\n handlePageBreaks(function (x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next() {\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function () {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }());\n } else {\n x.pages.forEach(function (page) {\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }, element, forceBreak, pageWidth ? pageWidth - margin.left - margin.right : null, pageHeight ? pageHeight - margin.top - margin.bottom : null, margin, options);\n } else {\n promise.resolve(doOne(element));\n }\n });\n function makeTemplate(template$$1) {\n if (template$$1 != null) {\n if (typeof template$$1 == 'string') {\n template$$1 = kendo.template(template$$1.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template$$1 == 'function') {\n return function (data) {\n var el = template$$1(data);\n if (el && typeof el == 'string') {\n var div = document.createElement('div');\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n return function () {\n return template$$1.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template$$1 = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement('KENDO-PDF-DOCUMENT');\n var adjust = 0;\n slice$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1(ol.children).forEach(function (li, index) {\n li.setAttribute('kendo-split-index', index);\n });\n });\n setCSS(container, {\n display: 'block',\n position: 'absolute',\n boxSizing: 'content-box',\n left: '-10000px',\n top: '-10000px'\n });\n if (pageWidth) {\n setCSS(container, {\n width: pageWidth + 'px',\n paddingLeft: margin.left + 'px',\n paddingRight: margin.right + 'px'\n });\n setCSS(copy, { overflow: 'hidden' });\n }\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n if (options.beforePageBreak) {\n setTimeout(function () {\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n function doPageBreak() {\n if (forceBreak != '-' || pageHeight) {\n splitElement(copy);\n }\n {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n if (template$$1) {\n pages.forEach(function (page, i) {\n var el = template$$1({\n element: page,\n pageNum: i + 1,\n totalPages: pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n cacheImages(pages, function () {\n whenImagesAreActuallyLoaded(pages, function () {\n callback({\n pages: pages,\n container: container\n });\n });\n });\n }\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n return el.getAttribute('data-kendo-chart') || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName);\n }\n function splitElement(element) {\n if (element.tagName == 'TABLE') {\n setCSS(element, { tableLayout: 'fixed' });\n }\n var style = getComputedStyle(element);\n var bottomPadding = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var bottomBorder = parseFloat(getPropertyValue(style, 'border-bottom-width'));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), 'position'))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n breakAtElement(el);\n } else if (fall) {\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n } else {\n splitElement(el);\n }\n } else if (el.nodeType == 3 && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 || first.nodeType == 8) {\n return true;\n }\n if (first.nodeType == 3) {\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, 'table');\n colgroup = table && table.querySelector('colgroup');\n if (options.repeatHeaders) {\n thead = table && table.querySelector('thead');\n grid = closest(el, '.k-grid.k-widget');\n if (grid && grid.querySelector('.k-auto-scrollable')) {\n gridHead = grid.querySelector('.k-grid-header');\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, 'table');\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, '.k-grid.k-widget');\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n function makePage() {\n var page = doc.createElement('KENDO-PDF-PAGE');\n setCSS(page, {\n display: 'block',\n boxSizing: 'content-box',\n width: pageWidth ? pageWidth + 'px' : 'auto',\n padding: margin.top + 'px ' + margin.right + 'px ' + margin.bottom + 'px ' + margin.left + 'px',\n position: 'relative',\n height: pageHeight ? pageHeight + 'px' : 'auto',\n overflow: pageHeight || pageWidth ? 'hidden' : 'visible',\n clear: 'both'\n });\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return box.height > available ? 3 : box.top - top > available ? 1 : box.bottom - top > available ? 2 : 0;\n }\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return;\n }\n var nextnode = node;\n if (fall == 1) {\n if (isFirst) {\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n } else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, min + pos >> 1, pos);\n } else {\n return findEOP(pos, pos + max >> 1, max);\n }\n }(0, len >> 1, len));\n if (!/\\S/.test(range.toString()) && isFirst) {\n breakAtElement(node.parentNode);\n } else {\n nextnode = node.splitText(range.endOffset);\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n splitText(nextnode);\n }\n function preventBulletOnListItem(el) {\n var li = closest(el, 'li');\n if (li) {\n li.setAttribute('kendo-no-bullet', '1');\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n return promise;\n }\n drawDOM.getFontFaces = getFontFaces;\n drawDOM.drawText = function (element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n };\n var parseBackgroundImage = function () {\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn))/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n var cache1 = {}, cache2 = {};\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match = /^#[0-9a-f]+/i.exec(input) || /^rgba?\\(.*?\\)/i.exec(input) || /^..*?\\b/.exec(input);\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return {\n color: color,\n length: length,\n percent: percent\n };\n }\n }\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n if (read(tok_popen)) {\n angle = read(tok_angle);\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n } else {\n to1 = read(tok_keyword);\n if (to1 == 'to') {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == '0%') {\n to1 = 'left';\n } else if (x == '100%') {\n to1 = 'right';\n }\n if (y == '0%') {\n to2 = 'top';\n } else if (y == '100%') {\n to2 = 'bottom';\n }\n read(tok_comma);\n }\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n return {\n type: 'linear',\n angle: angle,\n to: to1 && to2 ? to1 + ' ' + to2 : to1 ? to1 : to2 ? to2 : null,\n stops: stops,\n reverse: reverse\n };\n }\n }\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, '');\n read(tok_pclose);\n return {\n type: 'url',\n url: url\n };\n }\n }\n var tok;\n if (tok = read(tok_linear_gradient)) {\n tok = read_linear_gradient(tok);\n } else if (tok = read(tok_url)) {\n tok = read_url();\n }\n return cache1[orig] = tok || { type: 'none' };\n }\n return function (input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return cache2[input] = splitProperty(input).map(parse);\n };\n }();\n var splitProperty = function () {\n var cache = {};\n return function (input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n var cacheKey = input + separator;\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n var ret = [];\n var last$$1 = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n function looking_at(rx) {\n return m = rx.exec(input.substr(pos));\n }\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n }\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n } else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n } else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n } else if (in_string == '\\'' && looking_at(/^\\\\\\'/)) {\n pos += 2;\n } else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n } else if (in_string == '\\'' && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n } else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n } else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last$$1) {\n ret.push(trim(input.substring(last$$1, pos)));\n last$$1 = pos + m[0].length;\n }\n pos += m[0].length;\n } else {\n pos++;\n }\n }\n if (last$$1 < pos) {\n ret.push(trim(input.substring(last$$1, pos)));\n }\n return cache[cacheKey] = ret;\n };\n }();\n var getFontURL = function (cache) {\n return function (el) {\n var url = cache[el];\n if (!url) {\n var m;\n if (m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el)) {\n url = cache[el] = m[2];\n } else if (m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el)) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n }(Object.create ? Object.create(null) : {});\n var getFontHeight = function (cache) {\n return function (font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = kendoUtil.measureText('Mapq', { font: font }).height;\n }\n return height;\n };\n }(Object.create ? Object.create(null) : {});\n function getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {\n }\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, 'src');\n if (src) {\n return splitProperty(src).reduce(function (a, el) {\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n var font = getFontURL(rule.cssText);\n return font ? [font] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3:\n doStylesheet(r.styleSheet);\n break;\n case 5:\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, 'font-family'));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, 'font-weight'));\n var italic = 'italic' == getPropertyValue(style, 'font-style');\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n if (!/^data:/i.test(url)) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, '') + url;\n }\n }\n names.forEach(function (name) {\n name = name.replace(/^(['\"]?)(.*?)\\1$/, '$2');\n if (bold) {\n name += '|bold';\n }\n if (italic) {\n name += '|italic';\n }\n result[name] = url;\n });\n }\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function getCounter(name) {\n name = '_counter_' + name;\n return nodeInfo[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = '_counter_' + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n }\n function incCounter(name, inc) {\n var p = nodeInfo;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\n function doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n }\n function updateCounters(style) {\n var counterReset = getPropertyValue(style, 'counter-reset');\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, 'counter-increment');\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n }\n function parseColor$1(str, css) {\n var color = kendo.parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n }\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function (el) {\n var images = el.querySelectorAll('img');\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n }\n function cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n function dive(element) {\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(getPropertyValue(getComputedStyle(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1(element.children).forEach(dive);\n }\n }\n if (Array.isArray(element)) {\n element.forEach(dive);\n } else {\n dive(element);\n }\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function (url) {\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function () {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n }\n function alphaNumeral(n) {\n var result = '';\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n }\n function pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, 'text-decoration');\n if (decoration && decoration != 'none') {\n var color = getPropertyValue(style, 'color');\n decoration.split(/\\s+/g).forEach(function (name) {\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\n function updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n }\n function createsStackingContext(style) {\n function prop(name) {\n return getPropertyValue(style, name);\n }\n if (prop('transform') != 'none' || prop('position') != 'static' || prop('z-index') != 'auto' || prop('opacity') < 1) {\n return true;\n }\n }\n function getComputedStyle(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\n function getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === '') {\n if (browser.webkit) {\n val = style.getPropertyValue('-webkit-' + prop);\n } else if (browser.mozilla) {\n val = style.getPropertyValue('-moz-' + prop);\n } else if (browser.opera) {\n val = style.getPropertyValue('-o-' + prop);\n } else if (microsoft) {\n val = style.getPropertyValue('-ms-' + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === '')) {\n return defa;\n } else {\n return val;\n }\n }\n function pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty('-webkit-' + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty('-moz-' + prop, value, important);\n } else if (browser.opera) {\n style.setProperty('-o-' + prop, value, important);\n } else if (microsoft) {\n style.setProperty('-ms-' + prop, value, important);\n prop = 'ms' + prop.replace(/(^|-)([a-z])/g, function (s, p1, p2) {\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n }\n function getBorder(style, side) {\n side = 'border-' + side;\n return {\n width: parseFloat(getPropertyValue(style, side + '-width')),\n style: getPropertyValue(style, side + '-style'),\n color: parseColor$1(getPropertyValue(style, side + '-color'), true)\n };\n }\n function saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n }\n function getBorderRadius(style, side) {\n var r = getPropertyValue(style, 'border-' + side + '-radius').split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({\n x: r[0],\n y: r[1]\n });\n }\n function getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, 'border-*-width', element);\n box = innerBox(box, 'padding-*', element);\n return box;\n }\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == 'string') {\n style = getComputedStyle(element);\n wt = parseFloat(getPropertyValue(style, prop.replace('*', 'top')));\n wr = parseFloat(getPropertyValue(style, prop.replace('*', 'right')));\n wb = parseFloat(getPropertyValue(style, prop.replace('*', 'bottom')));\n wl = parseFloat(getPropertyValue(style, prop.replace('*', 'left')));\n } else if (typeof prop == 'number') {\n wt = wr = wb = wl = prop;\n }\n return {\n top: box.top + wt,\n right: box.right - wr,\n bottom: box.bottom - wb,\n left: box.left + wl,\n width: box.right - box.left - wr - wl,\n height: box.bottom - box.top - wb - wt\n };\n }\n function getTransform(style) {\n var transform$$1 = getPropertyValue(style, 'transform');\n if (transform$$1 == 'none') {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n if (matrix) {\n var origin = getPropertyValue(style, 'transform-origin');\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n }\n function radiansToDegrees(radians) {\n return 180 * radians / Math.PI % 360;\n }\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n } else if (/rad$/.test(angle)) {\n return num;\n } else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n } else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n function setTransform(shape, m) {\n m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n }\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([\n x,\n y\n ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n }\n function sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n }\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n var f = Math.min(box.width / (tl_x + tr_x), box.height / (tr_y + br_y), box.width / (br_x + bl_x), box.height / (bl_y + tl_y));\n if (f < 1) {\n tl_x *= f;\n tl_y *= f;\n tr_x *= f;\n tr_y *= f;\n br_x *= f;\n br_y *= f;\n bl_x *= f;\n bl_y *= f;\n }\n return {\n tl: {\n x: tl_x,\n y: tl_y\n },\n tr: {\n x: tr_x,\n y: tr_y\n },\n br: {\n x: br_x,\n y: br_y\n },\n bl: {\n x: bl_x,\n y: bl_y\n }\n };\n }\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle(element);\n var rTL = getBorderRadius(style, 'top-left');\n var rTR = getBorderRadius(style, 'top-right');\n var rBL = getBorderRadius(style, 'bottom-left');\n var rBR = getBorderRadius(style, 'bottom-right');\n if (type == 'padding' || type == 'content') {\n var bt = getBorder(style, 'top');\n var br = getBorder(style, 'right');\n var bb = getBorder(style, 'bottom');\n var bl = getBorder(style, 'left');\n rTL.x -= bl.width;\n rTL.y -= bt.width;\n rTR.x -= br.width;\n rTR.y -= bt.width;\n rBR.x -= br.width;\n rBR.y -= bb.width;\n rBL.x -= bl.width;\n rBL.y -= bb.width;\n if (type == 'content') {\n var pt = parseFloat(getPropertyValue(style, 'padding-top'));\n var pr = parseFloat(getPropertyValue(style, 'padding-right'));\n var pb = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var pl = parseFloat(getPropertyValue(style, 'padding-left'));\n rTL.x -= pl;\n rTL.y -= pt;\n rTR.x -= pr;\n rTR.y -= pt;\n rBR.x -= pr;\n rBR.y -= pb;\n rBL.x -= pl;\n rBL.y -= pb;\n }\n }\n if (typeof type == 'number') {\n rTL.x -= type;\n rTL.y -= type;\n rTR.x -= type;\n rTR.y -= type;\n rBR.x -= type;\n rBR.y -= type;\n rBL.x -= type;\n rBL.y -= type;\n }\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n function roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({\n fill: null,\n stroke: null\n });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n }\n function formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case 'decimal-leading-zero':\n if (str.length < 2) {\n str = '0' + str;\n }\n return str;\n case 'lower-roman':\n return arabicToRoman(val).toLowerCase();\n case 'upper-roman':\n return arabicToRoman(val).toUpperCase();\n case 'lower-latin':\n case 'lower-alpha':\n return alphaNumeral(val - 1);\n case 'upper-latin':\n case 'upper-alpha':\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n }\n function evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, '$2');\n return getAllCounters(name).map(function (val) {\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function (el) {\n var tmp;\n if (m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el)) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function (s, p) {\n return String.fromCharCode(parseInt(p, 16));\n }));\n } else if (m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n } else if (m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n } else if (m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el)) {\n result.push(element.getAttribute(m[1]) || '');\n } else {\n result.push(el);\n }\n });\n return result.join('');\n }\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + ': ' + getPropertyValue(style, style[i]));\n }\n return result.join(';\\n');\n }\n function _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n var fake = [];\n function pseudo(kind, place) {\n var style = getComputedStyle(element, kind), content = style.content;\n updateCounters(style);\n if (content && content != 'normal' && content != 'none' && style.width != '0px') {\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(':before', element.firstChild);\n pseudo(':after', null);\n if (fake.length > 0) {\n var saveClass = element.className;\n element.className += ' kendo-pdf-hide-pseudo-elements';\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function (el) {\n element.removeChild(el);\n });\n } else {\n _renderElement(element, group);\n }\n }\n function _renderElement(element, group) {\n var style = getComputedStyle(element);\n var top = getBorder(style, 'top');\n var right = getBorder(style, 'right');\n var bottom = getBorder(style, 'bottom');\n var left = getBorder(style, 'left');\n var rTL0 = getBorderRadius(style, 'top-left');\n var rTR0 = getBorderRadius(style, 'top-right');\n var rBL0 = getBorderRadius(style, 'bottom-left');\n var rBR0 = getBorderRadius(style, 'bottom-right');\n var dir = getPropertyValue(style, 'direction');\n var backgroundColor = getPropertyValue(style, 'background-color');\n backgroundColor = parseColor$1(backgroundColor);\n var backgroundImage = parseBackgroundImage(getPropertyValue(style, 'background-image'));\n var backgroundRepeat = splitProperty(getPropertyValue(style, 'background-repeat'));\n var backgroundPosition = splitProperty(getPropertyValue(style, 'background-position'));\n var backgroundOrigin = splitProperty(getPropertyValue(style, 'background-origin'));\n var backgroundSize = splitProperty(getPropertyValue(style, 'background-size'));\n if (browser.msie && browser.version < 10) {\n backgroundPosition = splitProperty(element.currentStyle.backgroundPosition);\n }\n var innerbox = innerBox(element.getBoundingClientRect(), 'border-*-width', element);\n (function () {\n var clip = getPropertyValue(style, 'clip');\n var m = /^\\s*rect\\((.*)\\)\\s*$/.exec(clip);\n if (m) {\n var a = m[1].split(/[ ,]+/g);\n var top = a[0] == 'auto' ? innerbox.top : parseFloat(a[0]) + innerbox.top;\n var right = a[1] == 'auto' ? innerbox.right : parseFloat(a[1]) + innerbox.left;\n var bottom = a[2] == 'auto' ? innerbox.bottom : parseFloat(a[2]) + innerbox.top;\n var left = a[3] == 'auto' ? innerbox.left : parseFloat(a[3]) + innerbox.left;\n var tmp = new Group();\n var clipPath = new Path().moveTo(left, top).lineTo(right, top).lineTo(right, bottom).lineTo(left, bottom).close();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n }());\n var boxes, i, cells;\n var display = getPropertyValue(style, 'display');\n if (display == 'table-row') {\n boxes = [];\n for (i = 0, cells = element.children; i < cells.length; ++i) {\n boxes.push(cells[i].getBoundingClientRect());\n }\n } else {\n boxes = element.getClientRects();\n if (boxes.length == 1) {\n boxes = [element.getBoundingClientRect()];\n }\n }\n boxes = adjustBoxes(boxes);\n for (i = 0; i < boxes.length; ++i) {\n drawOneBox(boxes[i], i === 0, i == boxes.length - 1);\n }\n if (element.tagName == 'A' && element.href && !/^#?$/.test(element.getAttribute('href'))) {\n if (!nodeInfo._avoidLinks || !matches(element, nodeInfo._avoidLinks)) {\n var r = document.createRange();\n r.selectNodeContents(element);\n slice$1(r.getClientRects()).forEach(function (box) {\n var g = new Group();\n g._pdfLink = {\n url: element.href,\n top: box.top,\n right: box.right,\n bottom: box.bottom,\n left: box.left\n };\n group.append(g);\n });\n }\n }\n if (boxes.length > 0 && display == 'list-item' && !element.getAttribute('kendo-no-bullet')) {\n drawBullet(boxes[0]);\n }\n (function () {\n function clipit() {\n var clipPath = elementRoundBox(element, innerbox, 'padding');\n var tmp = new Group();\n setClipping(tmp, clipPath);\n group.append(tmp);\n group = tmp;\n updateClipbox(clipPath);\n }\n if (isFormField(element)) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-x'))) {\n clipit();\n } else if (/^(hidden|auto|scroll)/.test(getPropertyValue(style, 'overflow-y'))) {\n clipit();\n }\n }());\n if (!maybeRenderWidget(element, group)) {\n renderContents(element, group);\n }\n return group;\n function adjustBoxes(boxes) {\n if (/^td$/i.test(element.tagName)) {\n var table = nodeInfo.table;\n if (table && getPropertyValue(table.style, 'border-collapse') == 'collapse') {\n var tableBorderLeft = getBorder(table.style, 'left').width;\n var tableBorderTop = getBorder(table.style, 'top').width;\n if (tableBorderLeft === 0 && tableBorderTop === 0) {\n return boxes;\n }\n var tableBox = table.element.getBoundingClientRect();\n var firstCell = table.element.rows[0].cells[0];\n var firstCellBox = firstCell.getBoundingClientRect();\n if (firstCellBox.top == tableBox.top || firstCellBox.left == tableBox.left) {\n return slice$1(boxes).map(function (box) {\n return {\n left: box.left + tableBorderLeft,\n top: box.top + tableBorderTop,\n right: box.right + tableBorderLeft,\n bottom: box.bottom + tableBorderTop,\n height: box.height,\n width: box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n var path, edge = new Group();\n setTransform(edge, transform$$1);\n group.append(edge);\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0).lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0).lineTo(len - Math.max(rr.x, Wright), Wtop).lineTo(Math.max(rl.x, Wleft), Wtop).close();\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [\n -1,\n 0,\n 0,\n 1,\n rl.x,\n 0\n ]);\n }\n if (rr.x) {\n drawRoundCorner(Wright, rr, [\n 1,\n 0,\n 0,\n 1,\n len - rr.x,\n 0\n ]);\n }\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI / 2 * Wright / (Wright + Wtop);\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n setTransform(path, transform$$1);\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n } else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop).lineTo(0, Wtop);\n } else {\n path.lineTo(ri.x, Wtop).lineTo(ri.x, 0);\n }\n edge.append(path.close());\n }\n }\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top).lineTo(box.right, box.top).lineTo(box.right, box.bottom).lineTo(box.left, box.bottom).close();\n background.append(path);\n }\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(background, box, backgroundImage[i], backgroundRepeat[i % backgroundRepeat.length], backgroundPosition[i % backgroundPosition.length], backgroundOrigin[i % backgroundOrigin.length], backgroundSize[i % backgroundSize.length]);\n }\n }\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || background == 'none') {\n return;\n }\n if (background.type == 'url') {\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\n return;\n }\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function (group, rect) {\n group.append(new Image$1(background.url, rect));\n });\n }\n } else if (background.type == 'linear') {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n var orgBox = box;\n if (backgroundOrigin == 'content-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n orgBox = innerBox(orgBox, 'padding-*', element);\n } else if (backgroundOrigin == 'padding-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n }\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == 'contain') {\n f = Math.min(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else if (backgroundSize == 'cover') {\n f = Math.max(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else {\n var size = backgroundSize.split(/\\s+/g);\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n if (size.length == 1 || size[1] == 'auto') {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n var pos = String(backgroundPosition);\n switch (pos) {\n case 'bottom':\n pos = '50% 100%';\n break;\n case 'top':\n pos = '50% 0';\n break;\n case 'left':\n pos = '0 50%';\n break;\n case 'right':\n pos = '100% 50%';\n break;\n case 'center':\n pos = '50% 50%';\n break;\n }\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = '50%';\n }\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n var rect = new Rect([\n orgBox.left + pos[0],\n orgBox.top + pos[1]\n ], [\n img_width,\n img_height\n ]);\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n if (backgroundRepeat == 'no-repeat') {\n renderBG(group, rect);\n } else if (backgroundRepeat == 'repeat-x') {\n rewX();\n repeatX();\n } else if (backgroundRepeat == 'repeat-y') {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n } else if (backgroundRepeat == 'repeat') {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n function drawBullet() {\n var listStyleType = getPropertyValue(style, 'list-style-type');\n if (listStyleType == 'none') {\n return;\n }\n var listStylePosition = getPropertyValue(style, 'list-style-position');\n function _drawBullet(f) {\n saveStyle(element, function () {\n element.style.position = 'relative';\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = 'absolute';\n bullet.style.boxSizing = 'border-box';\n if (listStylePosition == 'outside') {\n bullet.style.width = '6em';\n bullet.style.left = '-6.8em';\n bullet.style.textAlign = 'right';\n } else {\n bullet.style.left = '0px';\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute('kendo-split-index');\n if (k != null) {\n return f(k | 0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n switch (listStyleType) {\n case 'circle':\n case 'disc':\n case 'square':\n _drawBullet(function (bullet) {\n bullet.style.fontSize = '60%';\n bullet.style.lineHeight = '200%';\n bullet.style.paddingRight = '0.5em';\n bullet.style.fontFamily = 'DejaVu Serif';\n bullet.innerHTML = {\n 'disc': '\\u25CF',\n 'circle': '\\u25EF',\n 'square': '\\u25A0'\n }[listStyleType];\n });\n break;\n case 'decimal':\n case 'decimal-leading-zero':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n ++idx;\n if (listStyleType == 'decimal-leading-zero' && idx < 10) {\n idx = '0' + idx;\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-roman':\n case 'upper-roman':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = arabicToRoman(idx + 1);\n if (listStyleType == 'upper-roman') {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-latin':\n case 'lower-alpha':\n case 'upper-latin':\n case 'upper-alpha':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n }\n }\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n drawBackground(box);\n var shouldDrawLeft = left.width > 0 && (isFirst && dir == 'ltr' || isLast && dir == 'rtl');\n var shouldDrawRight = right.width > 0 && (isLast && dir == 'ltr' || isFirst && dir == 'rtl');\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n if (top.width == right.width && top.width == bottom.width && top.width == left.width) {\n if (shouldDrawLeft && shouldDrawRight) {\n box = innerBox(box, top.width / 2);\n var path = elementRoundBox(element, box, top.width / 2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n if (top.width > 0) {\n group.append(new Path({\n stroke: {\n width: top.width,\n color: top.color\n }\n }).moveTo(box.left, box.top + top.width / 2).lineTo(box.right, box.top + top.width / 2));\n }\n if (bottom.width > 0) {\n group.append(new Path({\n stroke: {\n width: bottom.width,\n color: bottom.color\n }\n }).moveTo(box.left, box.bottom - bottom.width / 2).lineTo(box.right, box.bottom - bottom.width / 2));\n }\n if (shouldDrawLeft) {\n group.append(new Path({\n stroke: {\n width: left.width,\n color: left.color\n }\n }).moveTo(box.left + left.width / 2, box.top).lineTo(box.left + left.width / 2, box.bottom));\n }\n if (shouldDrawRight) {\n group.append(new Path({\n stroke: {\n width: right.width,\n color: right.color\n }\n }).moveTo(box.right - right.width / 2, box.top).lineTo(box.right - right.width / 2, box.bottom));\n }\n return;\n }\n }\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n drawEdge(top.color, box.width, top.width, left.width, right.width, rTL, rTR, [\n 1,\n 0,\n 0,\n 1,\n box.left,\n box.top\n ]);\n drawEdge(bottom.color, box.width, bottom.width, right.width, left.width, rBR, rBL, [\n -1,\n 0,\n 0,\n -1,\n box.right,\n box.bottom\n ]);\n function inv(p) {\n return {\n x: p.y,\n y: p.x\n };\n }\n drawEdge(left.color, box.height, left.width, bottom.width, top.width, inv(rBL), inv(rTL), [\n 0,\n -1,\n 1,\n 0,\n box.left,\n box.bottom\n ]);\n drawEdge(right.color, box.height, right.width, top.width, bottom.width, inv(rTR), inv(rBR), [\n 0,\n 1,\n -1,\n 0,\n box.right,\n box.top\n ]);\n }\n }\n function gradientRenderer(gradient) {\n return function (group, rect) {\n var width = rect.width(), height = rect.height();\n switch (gradient.type) {\n case 'linear':\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case 'top':\n angle = 0;\n break;\n case 'left':\n angle = -Math.PI / 2;\n break;\n case 'bottom':\n angle = Math.PI;\n break;\n case 'right':\n angle = Math.PI / 2;\n break;\n case 'top left':\n case 'left top':\n angle = -Math.atan2(height, width);\n break;\n case 'top right':\n case 'right top':\n angle = Math.atan2(height, width);\n break;\n case 'bottom left':\n case 'left bottom':\n angle = Math.PI + Math.atan2(height, width);\n break;\n case 'bottom right':\n case 'right bottom':\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len / 2 * sin;\n var y = len / 2 * cos;\n if (angle > Math.PI / 2 && angle <= 3 * Math.PI / 2) {\n x = -x;\n y = -y;\n }\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function (s, i) {\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n implicit.forEach(function (s, i) {\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({\n left: right,\n stop: stop\n });\n }\n return stop;\n });\n var start = [\n 0.5 - x,\n 0.5 + y\n ];\n var end = [\n 0.5 + x,\n 0.5 - y\n ];\n group.append(Path.fromRect(rect).stroke(null).fill(new LinearGradient({\n start: start,\n end: end,\n stops: stops,\n userSpace: false\n })));\n break;\n case 'radial':\n if (window.console && window.console.log) {\n window.console.log('Radial gradients are not yet supported in HTML renderer');\n }\n break;\n }\n };\n }\n function maybeRenderWidget(element, group) {\n var visual;\n if (element._kendoExportVisual) {\n visual = element._kendoExportVisual();\n } else if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr('role'))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n }\n }\n if (!visual) {\n return false;\n }\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform().translate(bbox.left, bbox.top));\n group.append(wrap$$1);\n return true;\n }\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, 'content'));\n group.append(image);\n }\n function zIndexSort(a, b) {\n var sa = getComputedStyle(a);\n var sb = getComputedStyle(b);\n var za = parseFloat(getPropertyValue(sa, 'z-index'));\n var zb = parseFloat(getPropertyValue(sb, 'z-index'));\n var pa = getPropertyValue(sa, 'position');\n var pb = getPropertyValue(sb, 'position');\n if (isNaN(za) && isNaN(zb)) {\n if (/static|absolute/.test(pa) && /static|absolute/.test(pb)) {\n return 0;\n }\n if (pa == 'static') {\n return -1;\n }\n if (pb == 'static') {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n }\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\n function getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n }\n function renderCheckbox(element, group) {\n var style = getComputedStyle(element);\n var color = getPropertyValue(style, 'color');\n var box = element.getBoundingClientRect();\n if (element.type == 'checkbox') {\n group.append(Path.fromRect(new Rect([\n box.left + 1,\n box.top + 1\n ], [\n box.width - 2,\n box.height - 2\n ])).stroke(color, 1));\n if (element.checked) {\n group.append(new Path().stroke(color, 1.2).moveTo(box.left + 0.22 * box.width, box.top + 0.55 * box.height).lineTo(box.left + 0.45 * box.width, box.top + 0.75 * box.height).lineTo(box.left + 0.78 * box.width, box.top + 0.22 * box.width));\n }\n } else {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 2, box.height - 2) / 2)).stroke(color, 1));\n if (element.checked) {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 8, box.height - 8) / 2)).fill(color).stroke(null));\n }\n }\n }\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == 'input' && (element.type == 'checkbox' || element.type == 'radio')) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle(element));\n if (tag == 'input') {\n el.style.whiteSpace = 'pre';\n }\n if (tag == 'select' || tag == 'textarea') {\n el.style.overflow = 'auto';\n }\n if (tag == 'select') {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\n option.style.display = 'block';\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n element.style.display = 'none';\n renderContents(el, group);\n element.style.display = '';\n p.removeChild(el);\n }\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case 'img':\n renderImage(element, element.src, group);\n break;\n case 'canvas':\n try {\n renderImage(element, element.toDataURL('image/png'), group);\n } catch (ex) {\n }\n break;\n case 'textarea':\n case 'input':\n case 'select':\n renderFormField(element, group);\n break;\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3:\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1:\n var style = getComputedStyle(i);\n var floating = getPropertyValue(style, 'float');\n var position = getPropertyValue(style, 'position');\n if (position != 'static') {\n positioned.push(i);\n } else if (floating != 'none') {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n mergeSort(children, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(floats, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(positioned, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n }\n }\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle(element);\n if (parseFloat(getPropertyValue(style, 'text-indent')) < -500) {\n return;\n }\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n if (!end) {\n return;\n }\n var fontSize = getPropertyValue(style, 'font-size');\n var lineHeight = getPropertyValue(style, 'line-height');\n var font = [\n getPropertyValue(style, 'font-style'),\n getPropertyValue(style, 'font-variant'),\n getPropertyValue(style, 'font-weight'),\n fontSize,\n getPropertyValue(style, 'font-family')\n ].join(' ');\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n if (fontSize === 0) {\n return;\n }\n var color = getPropertyValue(style, 'color');\n var range = element.ownerDocument.createRange();\n var align$$1 = getPropertyValue(style, 'text-align');\n var isJustified = align$$1 == 'justify';\n var columnCount = getPropertyValue(style, 'column-count', 1);\n var whiteSpace = getPropertyValue(style, 'white-space');\n var textTransform = getPropertyValue(style, 'text-transform');\n var textOverflow, saveTextOverflow;\n if (microsoft) {\n textOverflow = style.textOverflow;\n if (textOverflow == 'ellipsis') {\n saveTextOverflow = element.style.textOverflow;\n element.style.textOverflow = 'clip';\n }\n }\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n var prevLineBottom = null;\n var underline = nodeInfo['underline'];\n var lineThrough = nodeInfo['line-through'];\n var overline = nodeInfo['overline'];\n var hasDecoration = underline || lineThrough || overline;\n while (!doChunk()) {\n }\n if (microsoft && textOverflow == 'ellipsis') {\n element.style.textOverflow = saveTextOverflow;\n }\n if (hasDecoration) {\n range.selectNode(node);\n slice$1(range.getClientRects()).forEach(decorate);\n }\n return;\n function actuallyGetRangeBoundingRect(range) {\n if (microsoft || browser.chrome) {\n var rectangles = range.getClientRects(), box = {\n top: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n };\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue;\n }\n box.left = Math.min(b.left, box.left);\n box.top = Math.min(b.top, box.top);\n box.right = Math.max(b.right, box.right);\n box.bottom = Math.max(b.bottom, box.bottom);\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n if (!found) {\n pos = function findEOL(min, eol, max) {\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, min + eol >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, eol + max >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n }(start, Math.min(end, start + estimateLineLength), end);\n if (pos == start) {\n return true;\n }\n start = pos;\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false;\n }\n if (pos > 0) {\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n str = str.replace(/\\s+/g, ' ');\n } else if (/\\t/.test(str)) {\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n cc = 0;\n } else {\n cc++;\n }\n }\n while ((pos = str.search('\\t')) >= 0) {\n var indent = ' '.substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n function drawText(str, box) {\n if (microsoft && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top: top,\n right: box.right,\n bottom: top + height,\n left: box.left,\n height: height,\n width: box.right - box.left\n };\n }\n switch (textTransform) {\n case 'uppercase':\n str = str.toUpperCase();\n break;\n case 'lowercase':\n str = str.toLowerCase();\n break;\n case 'capitalize':\n str = str.replace(/(?:^|\\s)\\S/g, function (l) {\n return l.toUpperCase();\n });\n break;\n }\n var text = new TextRect(str, new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]), {\n font: font,\n fill: { color: color }\n });\n group.append(text);\n }\n function decorate(box) {\n line(underline, box.bottom);\n line(lineThrough, box.bottom - box.height / 2.7);\n line(overline, box.top);\n function line(color, ypos) {\n if (color) {\n var width = fontSize / 12;\n var path = new Path({\n stroke: {\n width: width,\n color: color\n }\n });\n ypos -= width;\n path.moveTo(box.left, ypos).lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n }\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != 'auto') {\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n if (main !== group) {\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n }\n }\n return tmp;\n }\n function renderElement(element, container) {\n var style = getComputedStyle(element);\n updateCounters(style);\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n if (nodeInfo._clipbox == null) {\n return;\n }\n var opacity = parseFloat(getPropertyValue(style, 'opacity'));\n var visibility = getPropertyValue(style, 'visibility');\n var display = getPropertyValue(style, 'display');\n if (opacity === 0 || visibility == 'hidden' || display == 'none') {\n return;\n }\n var tr = getTransform(style);\n var group;\n var zIndex = getPropertyValue(style, 'z-index');\n if ((tr || opacity < 1) && zIndex == 'auto') {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n pushNodeInfo(element, style, group);\n if (!tr) {\n _renderWithPseudoElements(element, group);\n } else {\n saveStyle(element, function () {\n pleaseSetPropertyValue(element.style, 'transform', 'none', 'important');\n pleaseSetPropertyValue(element.style, 'transition', 'none', 'important');\n if (getPropertyValue(style, 'position') == 'static') {\n pleaseSetPropertyValue(element.style, 'position', 'relative', 'important');\n }\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [\n 1,\n 0,\n 0,\n 1,\n -x,\n -y\n ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [\n 1,\n 0,\n 0,\n 1,\n x,\n y\n ]);\n m = setTransform(group, m);\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfo();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle,\n Arc: Arc,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '
    ' + '
    ' + '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = '';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n },\n getPopup: function () {\n if (!this.popup) {\n this.popup = new kendo.ui.Popup(this.element, this.popupOptions);\n }\n return this.popup;\n },\n destroy: function () {\n var popup = this.popup;\n this.surface.unbind('click', this._showHandler);\n this.surface.unbind('mouseenter', this._showHandler);\n this.surface.unbind('mouseleave', this._mouseleaveHandler);\n this.surface.unbind('mousemove', this._mousemoveHandler);\n this.surface.element.off('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.off('click' + NS);\n if (popup) {\n popup.destroy();\n delete this.popup;\n }\n delete this.popupOptions;\n clearTimeout(this._timeout);\n delete this.element;\n delete this.content;\n delete this.surface;\n },\n _tooltipOptions: function (options) {\n options = options || {};\n return {\n position: options.position,\n showOn: options.showOn,\n offset: options.offset,\n autoHide: options.autoHide,\n width: options.width,\n height: options.height,\n content: options.content,\n shared: options.shared,\n hideDelay: options.hideDelay,\n showAfter: options.showAfter\n };\n },\n _tooltipShape: function (shape) {\n while (shape && !shape.options.tooltip) {\n shape = shape.parent;\n }\n return shape;\n },\n _updateContent: function (target, shape, options) {\n var content = options.content;\n if (kendo.isFunction(content)) {\n content = content({\n element: shape,\n target: target\n });\n }\n if (content) {\n this.content.html(content);\n return true;\n }\n },\n _position: function (shape, options, elementSize, event) {\n var position = options.position;\n var tooltipOffset = options.offset || 0;\n var surface = this.surface;\n var offset = surface._instance._elementOffset();\n var size = surface.getSize();\n var surfaceOffset = surface._instance._offset;\n var bbox = shape.bbox();\n var width = elementSize.width;\n var height = elementSize.height;\n var left = 0, top = 0;\n bbox.origin.translate(offset.left, offset.top);\n if (surfaceOffset) {\n bbox.origin.translate(-surfaceOffset.x, -surfaceOffset.y);\n }\n if (position == 'cursor' && event) {\n var coord = eventCoordinates(event);\n left = coord.x - width / 2;\n top = coord.y - height - tooltipOffset;\n } else if (position == 'left') {\n left = bbox.origin.x - width - tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'right') {\n left = bbox.bottomRight().x + tooltipOffset;\n top = bbox.center().y - height / 2;\n } else if (position == 'bottom') {\n left = bbox.center().x - width / 2;\n top = bbox.bottomRight().y + tooltipOffset;\n } else {\n left = bbox.center().x - width / 2;\n top = bbox.origin.y - height - tooltipOffset;\n }\n return {\n left: limitValue(left, offset.left, offset.left + size.width),\n top: limitValue(top, offset.top, offset.top + size.height)\n };\n },\n show: function (shape, options) {\n this._show(shape, shape, deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip), options));\n },\n hide: function () {\n var popup = this.popup;\n var current = this._current;\n delete this._current;\n clearTimeout(this._showTimeout);\n if (popup && popup.visible() && current && !this.surface.trigger('tooltipClose', {\n element: current.shape,\n target: current.target,\n popup: popup\n })) {\n popup.close();\n }\n },\n _hideClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _show: function (target, shape, options, event, delay) {\n var current = this._current;\n clearTimeout(this._timeout);\n if (current && (current.shape === shape && options.shared || current.target === target)) {\n return;\n }\n clearTimeout(this._showTimeout);\n var popup = this.getPopup();\n if (!this.surface.trigger('tooltipOpen', {\n element: shape,\n target: target,\n popup: popup\n }) && this._updateContent(target, shape, options)) {\n this._autoHide(options);\n var elementSize = this._measure(options);\n if (popup.visible()) {\n popup.close(true);\n }\n this._current = {\n options: options,\n elementSize: elementSize,\n shape: shape,\n target: target,\n position: this._position(options.shared ? shape : target, options, elementSize, event)\n };\n if (delay) {\n this._showTimeout = setTimeout(this._openPopupHandler, options.showAfter || 0);\n } else {\n this._openPopup();\n }\n }\n },\n _openPopup: function () {\n var current = this._current;\n var position = current.position;\n this.getPopup().open(position.left, position.top);\n },\n _autoHide: function (options) {\n if (options.autoHide && this._closeButton) {\n this.element.removeClass('k-tooltip-closable');\n this._closeButton.remove();\n delete this._closeButton;\n }\n if (!options.autoHide && !this._closeButton) {\n this.element.addClass('k-tooltip-closable');\n this._closeButton = $(TOOLTIP_CLOSE_TEMPLATE).prependTo(this.element);\n }\n },\n _showEvent: function (e) {\n var shape = this._tooltipShape(e.element);\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\n }\n },\n _measure: function (options) {\n var popup = this.getPopup();\n var width, height;\n this.element.css({\n width: 'auto',\n height: 'auto'\n });\n var visible = popup.visible();\n if (!visible) {\n popup.wrapper.show();\n }\n this.element.css({\n width: defined(options.width) ? options.width : 'auto',\n height: defined(options.height) ? options.height : 'auto'\n });\n width = outerWidth(this.element);\n height = outerHeight(this.element);\n if (!visible) {\n popup.wrapper.hide();\n }\n return {\n width: width,\n height: height\n };\n },\n _mouseleave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n clearTimeout(tooltip._showTimeout);\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n },\n _mousemove: function (e) {\n var current = this._current;\n if (current && e.element) {\n var options = current.options;\n if (options.position == 'cursor') {\n var position = this._position(e.element, options, current.elementSize, e.originalEvent);\n current.position = position;\n this.getPopup().wrapper.css({\n left: position.left,\n top: position.top\n });\n }\n }\n },\n _surfaceLeave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e)) {\n clearTimeout(this._showTimeout);\n this.hide();\n }\n },\n _popupRelatedTarget: function (e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n }\n });\n kendo.drawing.SurfaceTooltip = SurfaceTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface', [\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip'\n ], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var draw = kendo.drawing;\n var DrawingSurface = draw.Surface;\n var Widget = kendo.ui.Widget;\n var deepExtend = kendo.deepExtend;\n var proxy = $.proxy;\n kendo.support.svg = DrawingSurface.support.svg;\n kendo.support.canvas = DrawingSurface.support.canvas;\n var Surface = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, {});\n this.options = deepExtend({}, this.options, options);\n this._instance = DrawingSurface.create(this.element[0], options);\n if (this._instance.translate) {\n this.translate = translate;\n }\n this._triggerInstanceHandler = proxy(this._triggerInstanceEvent, this);\n this._bindHandler('click');\n this._bindHandler('mouseenter');\n this._bindHandler('mouseleave');\n this._bindHandler('mousemove');\n this._enableTracking();\n },\n options: {\n name: 'Surface',\n tooltip: {}\n },\n events: [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize',\n 'tooltipOpen',\n 'tooltipClose'\n ],\n _triggerInstanceEvent: function (e) {\n this.trigger(e.type, e);\n },\n _bindHandler: function (event) {\n this._instance.bind(event, this._triggerInstanceHandler);\n },\n draw: function (element) {\n this._instance.draw(element);\n },\n clear: function () {\n if (this._instance) {\n this._instance.clear();\n }\n this.hideTooltip();\n },\n destroy: function () {\n if (this._instance) {\n this._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n Widget.fn.destroy.call(this);\n },\n exportVisual: function () {\n return this._instance.exportVisual();\n },\n eventTarget: function (e) {\n return this._instance.eventTarget(e);\n },\n showTooltip: function (shape, options) {\n if (this._tooltip) {\n this._tooltip.show(shape, options);\n }\n },\n hideTooltip: function () {\n if (this._tooltip) {\n this._tooltip.hide();\n }\n },\n suspendTracking: function () {\n this._instance.suspendTracking();\n this.hideTooltip();\n },\n resumeTracking: function () {\n this._instance.resumeTracking();\n },\n getSize: function () {\n return {\n width: this.element.width(),\n height: this.element.height()\n };\n },\n setSize: function (size) {\n this.element.css({\n width: size.width,\n height: size.height\n });\n this._size = size;\n this._instance.currentSize(size);\n this._resize();\n },\n _resize: function () {\n this._instance.currentSize(this._size);\n this._instance._resize();\n },\n _enableTracking: function () {\n if (kendo.ui.Popup) {\n this._tooltip = new draw.SurfaceTooltip(this, this.options.tooltip || {});\n }\n }\n });\n kendo.ui.plugin(Surface);\n Surface.create = function (element, options) {\n return new Surface(element, options);\n };\n kendo.drawing.Surface = Surface;\n function translate(offset) {\n this._instance.translate(offset);\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/html', ['drawing/kendo-drawing'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var drawing = kendo.drawing;\n var drawDOM = drawing.drawDOM;\n drawing.drawDOM = function (element, options) {\n return drawDOM($(element)[0], options);\n };\n drawing.drawDOM.drawText = drawDOM.drawText;\n drawing.drawDOM.getFontFaces = drawDOM.getFontFaces;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.drawing', [\n 'drawing/util',\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip',\n 'drawing/surface',\n 'drawing/html'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'drawing',\n name: 'Drawing API',\n category: 'framework',\n description: 'The Kendo UI low-level drawing API',\n depends: [\n 'core',\n 'color',\n 'popup'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/kendo-core', [\n 'kendo.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var drawing = kendo.drawing;\n var util = drawing.util;\n var Path = drawing.Path;\n var Group = drawing.Group;\n var Class = kendo.Class;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var Circle = geometry.Circle;\n var geometryTransform = geometry.transform;\n var Segment = geometry.Segment;\n var dataviz = kendo.dataviz;\n var deepExtend = kendo.deepExtend;\n var isFunction = kendo.isFunction;\n var __common_getter_js = kendo.getter;\n var X = 'x';\n var Y = 'y';\n var TOP = 'top';\n var BOTTOM = 'bottom';\n var LEFT = 'left';\n var RIGHT = 'right';\n var CENTER = 'center';\n var WIDTH = 'width';\n var HEIGHT = 'height';\n var COORD_PRECISION = 3;\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var DEFAULT_WIDTH = 600;\n var DEFAULT_HEIGHT = 400;\n var WHITE = '#fff';\n var BLACK = '#000';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_PRECISION = 10;\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var OUTSIDE = 'outside';\n var NONE = 'none';\n var CIRCLE = 'circle';\n var TRIANGLE = 'triangle';\n var CROSS = 'cross';\n var ARC = 'arc';\n var INSIDE = 'inside';\n var VALUE = 'value';\n var STRING = 'string';\n var OBJECT = 'object';\n var DATE = 'date';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HIGHLIGHT_ZINDEX = 100;\n var constants = {\n X: X,\n Y: Y,\n WIDTH: WIDTH,\n HEIGHT: HEIGHT,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n TOP: TOP,\n LEFT: LEFT,\n BOTTOM: BOTTOM,\n RIGHT: RIGHT,\n CENTER: CENTER,\n COORD_PRECISION: COORD_PRECISION,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n CIRCLE: CIRCLE,\n TRIANGLE: TRIANGLE,\n CROSS: CROSS,\n MAX_VALUE: MAX_VALUE,\n MIN_VALUE: MIN_VALUE,\n WHITE: WHITE,\n BLACK: BLACK,\n DEFAULT_FONT: DEFAULT_FONT,\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n OUTSIDE: OUTSIDE,\n INSIDE: INSIDE,\n NONE: NONE,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n VALUE: VALUE,\n STRING: STRING,\n OBJECT: OBJECT,\n DATE: DATE,\n ARC: ARC,\n FORMAT_REGEX: FORMAT_REGEX,\n HIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX\n };\n function isArray(value) {\n return Array.isArray(value);\n }\n function addClass(element, classes) {\n var classArray = isArray(classes) ? classes : [classes];\n for (var idx = 0; idx < classArray.length; idx++) {\n var className = classArray[idx];\n if (element.className.indexOf(className) === -1) {\n element.className += ' ' + className;\n }\n }\n }\n var SPACE_REGEX = /\\s+/g;\n function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, '').replace(SPACE_REGEX, ' ');\n }\n }\n function alignPathToPixel(path) {\n var offset = 0.5;\n if (path.options.stroke && kendo.drawing.util.defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n for (var i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n return path;\n }\n function clockwise(angle1, angle2) {\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n }\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n function isString(value) {\n return typeof value === STRING;\n }\n function convertableToNumber(value) {\n return isNumber(value) || isString(value) && isFinite(value);\n }\n function isObject(value) {\n return typeof value === 'object';\n }\n function styleValue(value) {\n if (isNumber(value)) {\n return value + 'px';\n }\n return value;\n }\n var SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n function isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n }\n function elementStyles(element, styles) {\n var stylesArray = isString(styles) ? [styles] : styles;\n if (isArray(stylesArray)) {\n var result = {};\n var style = window.getComputedStyle(element);\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n }\n return result;\n } else if (isObject(styles)) {\n for (var field$1 in styles) {\n element.style[field$1] = styleValue(styles[field$1]);\n }\n }\n }\n function getSpacing(value, defaultSpacing) {\n if (defaultSpacing === void 0) {\n defaultSpacing = 0;\n }\n var spacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n if (typeof value === 'number') {\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n } else {\n spacing[TOP] = value[TOP] || defaultSpacing;\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n spacing[LEFT] = value[LEFT] || defaultSpacing;\n }\n return spacing;\n }\n var defaultImplementation = {\n format: function (format, value) {\n return value;\n },\n toString: function (value) {\n return value;\n },\n parseDate: function (value) {\n return new Date(value);\n }\n };\n var current = defaultImplementation;\n var IntlService = Class.extend({});\n IntlService.register = function (userImplementation) {\n current = userImplementation;\n };\n if (Object.defineProperties) {\n Object.defineProperties(IntlService, {\n implementation: {\n get: function () {\n return current;\n }\n }\n });\n }\n var FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n var FormatService = Class.extend({\n init: function (intlService) {\n this._intlService = intlService;\n },\n auto: function (formatString) {\n var values = [], len = arguments.length - 1;\n while (len-- > 0)\n values[len] = arguments[len + 1];\n var intl = this.intlService;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format.apply(intl, [formatString].concat(values));\n }\n return intl.toString(values[0], formatString);\n },\n localeAuto: function (formatString, values, locale) {\n var intl = this.intlService;\n var result;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n result = formatString.replace(FORMAT_REPLACE_REGEX, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10)];\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : '', locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n return result;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(FormatService.fn, {\n intlService: {\n get: function () {\n return this._intlService || IntlService.implementation;\n }\n }\n });\n }\n var ChartService = Class.extend({\n init: function (chart, context) {\n if (context === void 0) {\n context = {};\n }\n this._intlService = context.intlService;\n this.sender = context.sender || chart;\n this.format = new FormatService(context.intlService);\n this.chart = chart;\n this.rtl = context.rtl;\n },\n notify: function (name, args) {\n this.chart.trigger(name, args);\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(ChartService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n }\n }\n });\n }\n var current$1;\n var DomEventsBuilder = Class.extend({});\n DomEventsBuilder.register = function (userImplementation) {\n current$1 = userImplementation;\n };\n DomEventsBuilder.create = function (element, events) {\n if (current$1) {\n return current$1.create(element, events);\n }\n };\n var current$2 = {\n compile: function (template) {\n return template;\n }\n };\n var TemplateService = Class.extend({});\n TemplateService.register = function (userImplementation) {\n current$2 = userImplementation;\n };\n TemplateService.compile = function (template) {\n return current$2.compile(template);\n };\n var services = {\n ChartService: ChartService,\n DomEventsBuilder: DomEventsBuilder,\n FormatService: FormatService,\n IntlService: IntlService,\n TemplateService: TemplateService\n };\n function getTemplate(options) {\n if (options === void 0) {\n options = {};\n }\n var template;\n if (options.template) {\n options.template = template = TemplateService.compile(options.template);\n } else if (isFunction(options.content)) {\n template = options.content;\n }\n return template;\n }\n function grep(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (callback(array[idx])) {\n result.push(array[idx]);\n }\n }\n return result;\n }\n function hasClasses(element, classNames) {\n if (element.className) {\n var names = classNames.split(' ');\n for (var idx = 0; idx < names.length; idx++) {\n if (element.className.indexOf(names[idx]) !== -1) {\n return true;\n }\n }\n }\n }\n function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n }\n function interpolateValue(start, end, progress) {\n return kendo.drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n }\n var TRIGGER = 'trigger';\n var InstanceObserver = Class.extend({\n init: function (observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n },\n trigger: function (name, args) {\n var ref = this;\n var observer = ref.observer;\n var handlerMap = ref.handlerMap;\n var isDefaultPrevented;\n if (handlerMap[name]) {\n isDefaultPrevented = this.callObserver(handlerMap[name], args);\n } else if (observer[TRIGGER]) {\n isDefaultPrevented = this.callObserver(TRIGGER, name, args);\n }\n return isDefaultPrevented;\n },\n callObserver: function (fnName) {\n var args = [], len = arguments.length - 1;\n while (len-- > 0)\n args[len] = arguments[len + 1];\n return this.observer[fnName].apply(this.observer, args);\n },\n requiresHandlers: function (names) {\n var this$1 = this;\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n for (var idx = 0; idx < names.length; idx++) {\n if (this$1.handlerMap[names[idx]]) {\n return true;\n }\n }\n }\n });\n function map(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n var value = callback(array[idx]);\n if (kendo.drawing.util.defined(value)) {\n result.push(value);\n }\n }\n return result;\n }\n function mousewheelDelta(e) {\n var delta = 0;\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n if (e.detail) {\n delta = kendo.drawing.util.round(e.detail / 3);\n }\n return delta;\n }\n var ref = kendo.drawing.util;\n var append = ref.append;\n var bindEvents = ref.bindEvents;\n var defined = ref.defined;\n var deg = ref.deg;\n var elementOffset = ref.elementOffset;\n var elementSize = ref.elementSize;\n var eventElement = ref.eventElement;\n var eventCoordinates = ref.eventCoordinates;\n var last = ref.last;\n var limitValue = ref.limitValue;\n var objectKey = ref.objectKey;\n var rad = ref.rad;\n var round = ref.round;\n var unbindEvents = ref.unbindEvents;\n var valueOrDefault = ref.valueOrDefault;\n var FontLoader = Class.extend({});\n FontLoader.fetchFonts = function (options, fonts, state) {\n if (state === void 0) {\n state = { depth: 0 };\n }\n var MAX_DEPTH = 5;\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n Object.keys(options).forEach(function (key) {\n var value = options[key];\n if (key === 'dataSource' || key[0] === '$' || !value) {\n return;\n }\n if (key === 'font') {\n fonts.push(value);\n } else if (typeof value === 'object') {\n state.depth++;\n FontLoader.fetchFonts(value, fonts, state);\n state.depth--;\n }\n });\n };\n FontLoader.loadFonts = function (fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n };\n FontLoader.preloadFonts = function (options, callback) {\n var fonts = [];\n FontLoader.fetchFonts(options, fonts);\n FontLoader.loadFonts(fonts, callback);\n };\n function setDefaultOptions(type, options) {\n var proto = type.prototype;\n if (proto.options) {\n proto.options = deepExtend({}, proto.options, options);\n } else {\n proto.options = options;\n }\n }\n function sparseArrayLimits(arr) {\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var idx = 0, length = arr.length; idx < length; idx++) {\n var value = arr[idx];\n if (value !== null && isFinite(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n equals: function (point) {\n return point && this.x === point.x && this.y === point.y;\n },\n rotate: function (center, degrees) {\n var theta = rad(degrees);\n var cosT = Math.cos(theta);\n var sinT = Math.sin(theta);\n var cx = center.x;\n var cy = center.y;\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = round(cx + (x - cx) * cosT + (y - cy) * sinT, COORD_PRECISION);\n this.y = round(cy + (y - cy) * cosT - (x - cx) * sinT, COORD_PRECISION);\n return this;\n },\n multiply: function (a) {\n this.x *= a;\n this.y *= a;\n return this;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n });\n Point.onCircle = function (center, angle, radius) {\n var radians = rad(angle);\n return new Point(center.x - radius * Math.cos(radians), center.y - radius * Math.sin(radians));\n };\n var Box = Class.extend({\n init: function (x1, y1, x2, y2) {\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n },\n equals: function (box) {\n return this.x1 === box.x1 && this.x2 === box.x2 && this.y1 === box.y1 && this.y2 === box.y2;\n },\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y2 - this.y1;\n },\n translate: function (dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n move: function (x, y) {\n var height = this.height();\n var width = this.width();\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n return this;\n },\n wrap: function (targetBox) {\n this.x1 = Math.min(this.x1, targetBox.x1);\n this.y1 = Math.min(this.y1, targetBox.y1);\n this.x2 = Math.max(this.x2, targetBox.x2);\n this.y2 = Math.max(this.y2, targetBox.y2);\n return this;\n },\n wrapPoint: function (point) {\n var arrayPoint = isArray(point);\n var x = arrayPoint ? point[0] : point.x;\n var y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box(x, y, x, y));\n return this;\n },\n snapTo: function (targetBox, axis) {\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n return this;\n },\n alignTo: function (targetBox, anchor) {\n var height = this.height();\n var width = this.width();\n var axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n var offset = axis === Y ? height : width;\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = this.center();\n this.x1 += targetCenter.x - center.x;\n this.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n this[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n this[axis + 1] = targetBox[axis + 2];\n }\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n shrink: function (dw, dh) {\n this.x2 -= dw;\n this.y2 -= dh;\n return this;\n },\n expand: function (dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n pad: function (padding) {\n var spacing = getSpacing(padding);\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n return this;\n },\n unpad: function (padding) {\n var spacing = getSpacing(padding);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return this.pad(spacing);\n },\n clone: function () {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n },\n center: function () {\n return new Point(this.x1 + this.width() / 2, this.y1 + this.height() / 2);\n },\n containsPoint: function (point) {\n return point.x >= this.x1 && point.x <= this.x2 && point.y >= this.y1 && point.y <= this.y2;\n },\n points: function () {\n return [\n new Point(this.x1, this.y1),\n new Point(this.x2, this.y1),\n new Point(this.x2, this.y2),\n new Point(this.x1, this.y2)\n ];\n },\n getHash: function () {\n return [\n this.x1,\n this.y1,\n this.x2,\n this.y2\n ].join(',');\n },\n overlaps: function (box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n },\n rotate: function (rotation) {\n var width = this.width();\n var height = this.height();\n var ref = this.center();\n var cx = ref.x;\n var cy = ref.y;\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\n var r3 = rotatePoint(width, height, cx, cy, rotation);\n var r4 = rotatePoint(0, height, cx, cy, rotation);\n width = Math.max(r1.x, r2.x, r3.x, r4.x) - Math.min(r1.x, r2.x, r3.x, r4.x);\n height = Math.max(r1.y, r2.y, r3.y, r4.y) - Math.min(r1.y, r2.y, r3.y, r4.y);\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n toRect: function () {\n return new Rect([\n this.x1,\n this.y1\n ], [\n this.width(),\n this.height()\n ]);\n },\n hasSize: function () {\n return this.width() !== 0 && this.height() !== 0;\n },\n align: function (targetBox, axis, alignment) {\n var c1 = axis + 1;\n var c2 = axis + 2;\n var sizeFunc = axis === X ? WIDTH : HEIGHT;\n var size = this[sizeFunc]();\n if (inArray(alignment, [\n LEFT,\n TOP\n ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [\n RIGHT,\n BOTTOM\n ])) {\n this[c2] = targetBox[c2];\n this[c1] = this[c2] - size;\n } else if (alignment === CENTER) {\n this[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n this[c2] = this[c1] + size;\n }\n }\n });\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = rad(angle);\n return new Point(cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta), cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta));\n }\n var Ring = Class.extend({\n init: function (center, innerRadius, radius, startAngle, angle) {\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n },\n clone: function () {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n },\n middle: function () {\n return this.startAngle + this.angle / 2;\n },\n setRadius: function (newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n return this;\n },\n point: function (angle, innerRadius) {\n var radianAngle = rad(angle);\n var ax = Math.cos(radianAngle);\n var ay = Math.sin(radianAngle);\n var radius = innerRadius ? this.innerRadius : this.radius;\n var x = round(this.center.x - ax * radius, COORD_PRECISION);\n var y = round(this.center.y - ay * radius, COORD_PRECISION);\n return new Point(x, y);\n },\n adjacentBox: function (distance, width, height) {\n var sector = this.clone().expand(distance);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n var hw = width / 2;\n var hh = height / 2;\n var sa = Math.sin(rad(midAndle));\n var ca = Math.cos(rad(midAndle));\n var x = midPoint.x - hw;\n var y = midPoint.y - hh;\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n return new Box(x, y, x + width, y + height);\n },\n containsPoint: function (p) {\n var center = this.center;\n var innerRadius = this.innerRadius;\n var radius = this.radius;\n var startAngle = this.startAngle;\n var endAngle = this.startAngle + this.angle;\n var dx = p.x - center.x;\n var dy = p.y - center.y;\n var vector = new Point(dx, dy);\n var startPoint = this.point(startAngle);\n var startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n var endPoint = this.point(endAngle);\n var endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n var dist = round(dx * dx + dy * dy, COORD_PRECISION);\n return (startVector.equals(vector) || clockwise(startVector, vector)) && !clockwise(endVector, vector) && dist >= innerRadius * innerRadius && dist <= radius * radius;\n },\n getBBox: function () {\n var this$1 = this;\n var box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n var startAngle = round(this.startAngle % 360);\n var endAngle = round((startAngle + this.angle) % 360);\n var innerRadius = this.innerRadius;\n var allAngles = [\n 0,\n 90,\n 180,\n 270,\n startAngle,\n endAngle\n ].sort(numericComparer);\n var startAngleIndex = allAngles.indexOf(startAngle);\n var endAngleIndex = allAngles.indexOf(endAngle);\n var angles;\n if (startAngle === endAngle) {\n angles = allAngles;\n } else {\n if (startAngleIndex < endAngleIndex) {\n angles = allAngles.slice(startAngleIndex, endAngleIndex + 1);\n } else {\n angles = [].concat(allAngles.slice(0, endAngleIndex + 1), allAngles.slice(startAngleIndex, allAngles.length));\n }\n }\n for (var i = 0; i < angles.length; i++) {\n var point = this$1.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n return box;\n },\n expand: function (value) {\n this.radius += value;\n return this;\n }\n });\n function numericComparer(a, b) {\n return a - b;\n }\n var Sector = Ring.extend({\n init: function (center, radius, startAngle, angle) {\n Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\n },\n expand: function (value) {\n return Ring.fn.expand.call(this, value);\n },\n clone: function () {\n return new Sector(this.center, this.radius, this.startAngle, this.angle);\n },\n setRadius: function (newRadius) {\n this.radius = newRadius;\n return this;\n }\n });\n var DIRECTION_ANGLE = 0.001;\n var ShapeBuilder = Class.extend({\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\n var center = new geometry.Point(sector.center.x, sector.center.y);\n var radius = Math.max(sector.radius, 0);\n var innerRadius = Math.max(sector.innerRadius, 0);\n var arc = new geometry.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n var path = Path.fromArc(arc, options).close();\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n var innerEnd = arc.pointAt(endAngle);\n path.lineTo(innerEnd.x, innerEnd.y);\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n } else {\n path.lineTo(center.x, center.y);\n }\n return path;\n }\n });\n ShapeBuilder.current = new ShapeBuilder();\n var ChartElement = Class.extend({\n init: function (options) {\n this.children = [];\n this.options = deepExtend({}, this.options, options);\n },\n reflow: function (targetBox) {\n var children = this.children;\n var box;\n for (var i = 0; i < children.length; i++) {\n var currentChild = children[i];\n currentChild.reflow(targetBox);\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n this.box = box || targetBox;\n },\n destroy: function () {\n var children = this.children;\n if (this.animation) {\n this.animation.destroy();\n }\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n getRoot: function () {\n var parent = this.parent;\n return parent ? parent.getRoot() : null;\n },\n getSender: function () {\n var service = this.getService();\n if (service) {\n return service.sender;\n }\n },\n getService: function () {\n var element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n },\n translateChildren: function (dx, dy) {\n var children = this.children;\n var childrenCount = children.length;\n for (var i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n append: function () {\n var arguments$1 = arguments;\n var this$1 = this;\n for (var i = 0; i < arguments.length; i++) {\n var item = arguments$1[i];\n this$1.children.push(item);\n item.parent = this$1;\n }\n },\n renderVisual: function () {\n if (this.options.visible === false) {\n return;\n }\n this.createVisual();\n this.addVisual();\n this.renderChildren();\n this.createAnimation();\n this.renderComplete();\n },\n addVisual: function () {\n if (this.visual) {\n this.visual.chartElement = this;\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n },\n renderChildren: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n },\n createVisual: function () {\n this.visual = new Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n createAnimation: function () {\n if (this.visual) {\n this.animation = drawing.Animation.create(this.visual, this.options.animation);\n }\n },\n appendVisual: function (childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.isStackRoot) {\n this.stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n this.parent.appendVisual(childVisual);\n }\n },\n clipRoot: function () {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n return this;\n },\n stackRoot: function () {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n return this;\n },\n stackVisual: function (childVisual) {\n var zIndex = childVisual.options.zIndex || 0;\n var visuals = this.visual.children;\n var length = visuals.length;\n var pos;\n for (pos = 0; pos < length; pos++) {\n var sibling = visuals[pos];\n var here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n this.visual.insert(pos, childVisual);\n },\n traverse: function (callback) {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n var child = children[i];\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n closest: function (match) {\n var element = this;\n var matched = false;\n while (element && !matched) {\n matched = match(element);\n if (!matched) {\n element = element.parent;\n }\n }\n if (matched) {\n return element;\n }\n },\n renderComplete: function () {\n },\n hasHighlight: function () {\n var options = (this.options || {}).highlight;\n return !(!this.createHighlight || options && options.visible === false);\n },\n toggleHighlight: function (show) {\n var this$1 = this;\n var options = (this.options || {}).highlight || {};\n var customVisual = options.visual;\n var highlight = this._highlight;\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 0.2\n }\n };\n if (customVisual) {\n highlight = this._highlight = customVisual($.extend(this.highlightVisualArgs(), {\n createVisual: function () {\n return this$1.createHighlight(highlightOptions);\n },\n sender: this.getSender(),\n series: this.series,\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total\n }));\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, this.options.zIndex);\n }\n this.appendVisual(highlight);\n }\n highlight.visible(show);\n },\n createGradientOverlay: function (element, options, gradientOptions) {\n var overlay = new Path($.extend({\n stroke: { color: 'none' },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n overlay.segments.elements(element.segments.elements());\n return overlay;\n },\n createGradient: function (options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n });\n ChartElement.prototype.options = {};\n var BoxElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var shrinkToFit = options.shrinkToFit;\n var hasSetSize = width && height;\n var margin = options.margin;\n var padding = options.padding;\n var borderWidth = options.border.width;\n var box;\n var reflowPaddingBox = function () {\n this$1.align(targetBox, X, options.align);\n this$1.align(targetBox, Y, options.vAlign);\n this$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n var contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n ChartElement.fn.reflow.call(this, contentBox);\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = this.contentBox = this.paddingBox.clone().unpad(padding);\n } else {\n contentBox = this.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n this.translateChildren(box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left, box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n var item = children[i];\n item.reflow(item.box);\n }\n },\n align: function (targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n hasBox: function () {\n var options = this.options;\n return options.border.width || options.background;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(Path.fromRect(this.paddingBox.toRect(), this.visualStyle()));\n }\n },\n visualStyle: function () {\n var options = this.options;\n var border = options.border || {};\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n });\n setDefaultOptions(BoxElement, {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: '',\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n });\n var ShapeElement = BoxElement.extend({\n init: function (options, pointData) {\n BoxElement.fn.init.call(this, options);\n this.pointData = pointData;\n },\n getElement: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.paddingBox;\n var type = options.type;\n var rotation = options.rotation;\n var center = box.center();\n var halfWidth = box.width() / 2;\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n var style = this.visualStyle();\n var element;\n if (type === CIRCLE) {\n element = new drawing.Circle(new Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + box.height() / 2, COORD_PRECISION)\n ], halfWidth), style);\n } else if (type === TRIANGLE) {\n element = Path.fromPoints([\n [\n box.x1 + halfWidth,\n box.y1\n ],\n [\n box.x1,\n box.y2\n ],\n [\n box.x2,\n box.y2\n ]\n ], style).close();\n } else if (type === CROSS) {\n element = new drawing.MultiPath(style);\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n element = Path.fromRect(box.toRect(), style);\n }\n if (rotation) {\n element.transform(geometryTransform().rotate(-rotation, [\n center.x,\n center.y\n ]));\n }\n element.options.zIndex = options.zIndex;\n return element;\n },\n createElement: function () {\n var this$1 = this;\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: function () {\n return this$1.getElement();\n }\n });\n } else {\n visual = this.getElement();\n }\n return visual;\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n createVisual: function () {\n this.visual = this.createElement();\n }\n });\n setDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n var LINEAR = 'linear';\n var RADIAL = 'radial';\n var GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 1,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n },\n {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n }\n ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n },\n {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n },\n {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n },\n {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [\n 0.5,\n 0.5\n ],\n radius: 0.5\n }\n };\n function boxDiff(r, s) {\n if (r.x1 === s.x1 && r.y1 === s.y1 && r.x2 === s.x2 && r.y2 === s.y2) {\n return s;\n }\n var a = Math.min(r.x1, s.x1);\n var b = Math.max(r.x1, s.x1);\n var c = Math.min(r.x2, s.x2);\n var d = Math.max(r.x2, s.x2);\n var e = Math.min(r.y1, s.y1);\n var f = Math.max(r.y1, s.y1);\n var g = Math.min(r.y2, s.y2);\n var h = Math.max(r.y2, s.y2);\n var boxes = [];\n boxes[0] = new Box(b, e, c, f);\n boxes[1] = new Box(a, f, b, g);\n boxes[2] = new Box(c, f, d, g);\n boxes[3] = new Box(b, g, c, h);\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) {\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else {\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n return grep(boxes, function (box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n var RootElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n var rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n this.gradients = {};\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var currentBox = new Box(0, 0, options.width, options.height);\n this.box = currentBox.unpad(options.margin);\n for (var i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n },\n createVisual: function () {\n this.visual = new Group();\n this.createBackground();\n },\n createBackground: function () {\n var options = this.options;\n var border = options.border || {};\n var box = this.box.clone().pad(options.margin).unpad(border.width);\n var background = Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n this.visual.append(background);\n },\n getRoot: function () {\n return this;\n },\n createGradient: function (options) {\n var gradients = this.gradients;\n var hashCode = objectKey(options);\n var gradient = GRADIENTS[options.gradient];\n var drawingGradient;\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n var gradientOptions = $.extend({}, gradient, options);\n if (gradient.type === 'linear') {\n drawingGradient = new drawing.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new drawing.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n return drawingGradient;\n }\n });\n setDefaultOptions(RootElement, {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT,\n background: WHITE,\n border: {\n color: BLACK,\n width: 0\n },\n margin: getSpacing(5),\n zIndex: -2\n });\n function innerRadialStops(options) {\n var stops = options.stops;\n var usedSpace = options.innerRadius / options.radius * 100;\n var length = stops.length;\n var currentStops = [];\n for (var i = 0; i < length; i++) {\n var currentStop = $.extend({}, stops[i]);\n currentStop.offset = (currentStop.offset * (100 - usedSpace) + usedSpace) / 100;\n currentStops.push(currentStop);\n }\n return currentStops;\n }\n var FloatElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this._initDirection();\n },\n _initDirection: function () {\n var options = this.options;\n if (options.vertical) {\n this.groupAxis = X;\n this.elementAxis = Y;\n this.groupSizeField = WIDTH;\n this.elementSizeField = HEIGHT;\n this.groupSpacing = options.spacing;\n this.elementSpacing = options.vSpacing;\n } else {\n this.groupAxis = Y;\n this.elementAxis = X;\n this.groupSizeField = HEIGHT;\n this.elementSizeField = WIDTH;\n this.groupSpacing = options.vSpacing;\n this.elementSpacing = options.spacing;\n }\n },\n reflow: function (targetBox) {\n this.box = targetBox.clone();\n this.reflowChildren();\n },\n reflowChildren: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var elementAxis = ref.elementAxis;\n var groupAxis = ref.groupAxis;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var ref$1 = this.groupOptions();\n var groups = ref$1.groups;\n var groupsSize = ref$1.groupsSize;\n var maxGroupElementsSize = ref$1.maxGroupElementsSize;\n var groupsCount = groups.length;\n var groupsStart = box[groupAxis + 1] + this.alignStart(groupsSize, box[groupSizeField]());\n if (groupsCount) {\n var groupStart = groupsStart;\n for (var groupIdx = 0; groupIdx < groupsCount; groupIdx++) {\n var group = groups[groupIdx];\n var groupElements = group.groupElements;\n var elementStart = box[elementAxis + 1];\n var groupElementsCount = groupElements.length;\n for (var idx = 0; idx < groupElementsCount; idx++) {\n var element = groupElements[idx];\n var elementSize$$1 = this$1.elementSize(element);\n var groupElementStart = groupStart + this$1.alignStart(elementSize$$1[groupSizeField], group.groupSize);\n var elementBox = new Box();\n elementBox[groupAxis + 1] = groupElementStart;\n elementBox[groupAxis + 2] = groupElementStart + elementSize$$1[groupSizeField];\n elementBox[elementAxis + 1] = elementStart;\n elementBox[elementAxis + 2] = elementStart + elementSize$$1[elementSizeField];\n element.reflow(elementBox);\n elementStart += elementSize$$1[elementSizeField] + this$1.elementSpacing;\n }\n groupStart += group.groupSize + this$1.groupSpacing;\n }\n box[groupAxis + 1] = groupsStart;\n box[groupAxis + 2] = groupsStart + groupsSize;\n box[elementAxis + 2] = box[elementAxis + 1] + maxGroupElementsSize;\n }\n },\n alignStart: function (size, maxSize) {\n var start = 0;\n var align = this.options.align;\n if (align === RIGHT || align === BOTTOM) {\n start = maxSize - size;\n } else if (align === CENTER) {\n start = (maxSize - size) / 2;\n }\n return start;\n },\n groupOptions: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var children = ref.children;\n var elementSizeField = ref.elementSizeField;\n var groupSizeField = ref.groupSizeField;\n var elementSpacing = ref.elementSpacing;\n var groupSpacing = ref.groupSpacing;\n var maxSize = round(box[elementSizeField]());\n var childrenCount = children.length;\n var groups = [];\n var groupSize = 0;\n var groupElementsSize = 0;\n var groupsSize = 0;\n var maxGroupElementsSize = 0;\n var groupElements = [];\n for (var idx = 0; idx < childrenCount; idx++) {\n var element = children[idx];\n if (!element.box) {\n element.reflow(box);\n }\n var elementSize$$1 = this$1.elementSize(element);\n if (this$1.options.wrap && round(groupElementsSize + elementSpacing + elementSize$$1[elementSizeField]) > maxSize) {\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSpacing + groupSize;\n groupSize = 0;\n groupElementsSize = 0;\n groupElements = [];\n }\n groupSize = Math.max(groupSize, elementSize$$1[groupSizeField]);\n if (groupElementsSize > 0) {\n groupElementsSize += elementSpacing;\n }\n groupElementsSize += elementSize$$1[elementSizeField];\n groupElements.push(element);\n }\n groups.push({\n groupElements: groupElements,\n groupSize: groupSize,\n groupElementsSize: groupElementsSize\n });\n maxGroupElementsSize = Math.max(maxGroupElementsSize, groupElementsSize);\n groupsSize += groupSize;\n return {\n groups: groups,\n groupsSize: groupsSize,\n maxGroupElementsSize: maxGroupElementsSize\n };\n },\n elementSize: function (element) {\n return {\n width: element.box.width(),\n height: element.box.height()\n };\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(FloatElement, {\n vertical: true,\n wrap: true,\n vSpacing: 0,\n spacing: 0\n });\n var DrawingText = drawing.Text;\n var Text = ChartElement.extend({\n init: function (content, options) {\n ChartElement.fn.init.call(this, options);\n this.content = content;\n this.reflow(new Box());\n },\n reflow: function (targetBox) {\n var options = this.options;\n var size = options.size = util.measureText(this.content, { font: options.font });\n this.baseline = size.baseline;\n this.box = new Box(targetBox.x1, targetBox.y1, targetBox.x1 + size.width, targetBox.y1 + size.height);\n },\n createVisual: function () {\n var ref = this.options;\n var font = ref.font;\n var color = ref.color;\n var opacity = ref.opacity;\n var cursor = ref.cursor;\n this.visual = new DrawingText(this.content, this.box.toRect().topLeft(), {\n font: font,\n fill: {\n color: color,\n opacity: opacity\n },\n cursor: cursor\n });\n }\n });\n setDefaultOptions(Text, {\n font: DEFAULT_FONT,\n color: BLACK\n });\n function rectToBox(rect) {\n var origin = rect.origin;\n var bottomRight = rect.bottomRight();\n return new Box(origin.x, origin.y, bottomRight.x, bottomRight.y);\n }\n var ROWS_SPLIT_REGEX = /\\n/m;\n var TextBox = BoxElement.extend({\n init: function (content, options) {\n BoxElement.fn.init.call(this, options);\n this.content = content;\n this._initContainer();\n if (this.options._autoReflow !== false) {\n this.reflow(new Box());\n }\n },\n _initContainer: function () {\n var options = this.options;\n var rows = String(this.content).split(ROWS_SPLIT_REGEX);\n var floatElement = new FloatElement({\n vertical: true,\n align: options.align,\n wrap: false\n });\n var textOptions = deepExtend({}, options, {\n opacity: 1,\n animation: null\n });\n this.container = floatElement;\n this.append(floatElement);\n for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {\n var text = new Text(rows[rowIdx].trim(), textOptions);\n floatElement.append(text);\n }\n },\n reflow: function (targetBox) {\n var options = this.options;\n var visualFn = options.visual;\n this.container.options.align = options.align;\n if (visualFn && !this._boxReflow) {\n var visualBox = targetBox;\n if (!visualBox.hasSize()) {\n this._boxReflow = true;\n this.reflow(visualBox);\n this._boxReflow = false;\n visualBox = this.box;\n }\n var visual = this.visual = visualFn(this.visualContext(visualBox));\n if (visual) {\n visualBox = rectToBox(visual.clippedBBox() || new Rect());\n visual.options.zIndex = options.zIndex;\n }\n this.box = this.contentBox = this.paddingBox = visualBox;\n } else {\n BoxElement.fn.reflow.call(this, targetBox);\n if (options.rotation) {\n var margin = getSpacing(options.margin);\n var box = this.box.unpad(margin);\n this.targetBox = targetBox;\n this.normalBox = box.clone();\n box = this.rotate();\n box.translate(margin.left - margin.right, margin.top - margin.bottom);\n this.rotatedBox = box.clone();\n box.pad(margin);\n }\n }\n },\n createVisual: function () {\n var options = this.options;\n if (!options.visible) {\n return;\n }\n this.visual = new Group({\n transform: this.rotationTransform(),\n zIndex: options.zIndex,\n noclip: options.noclip\n });\n if (this.hasBox()) {\n var box = Path.fromRect(this.paddingBox.toRect(), this.visualStyle());\n this.visual.append(box);\n }\n },\n renderVisual: function () {\n if (this.options.visual) {\n var visual = this.visual;\n if (visual && !defined(visual.options.noclip)) {\n visual.options.noclip = this.options.noclip;\n }\n this.addVisual();\n this.createAnimation();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n color: options.color,\n font: options.font,\n margin: options.margin,\n padding: options.padding,\n visible: options.visible\n };\n },\n visualContext: function (targetBox) {\n var this$1 = this;\n return {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.visualOptions(),\n createVisual: function () {\n this$1._boxReflow = true;\n this$1.reflow(targetBox);\n this$1._boxReflow = false;\n return this$1.getDefaultVisual();\n }\n };\n },\n getDefaultVisual: function () {\n this.createVisual();\n this.renderChildren();\n var visual = this.visual;\n delete this.visual;\n return visual;\n },\n rotate: function () {\n var options = this.options;\n this.box.rotate(options.rotation);\n this.align(this.targetBox, X, options.align);\n this.align(this.targetBox, Y, options.vAlign);\n return this.box;\n },\n rotationTransform: function () {\n var rotation = this.options.rotation;\n if (!rotation) {\n return null;\n }\n var ref = this.normalBox.center();\n var cx = ref.x;\n var cy = ref.y;\n var boxCenter = this.rotatedBox.center();\n return geometryTransform().translate(boxCenter.x - cx, boxCenter.y - cy).rotate(rotation, [\n cx,\n cy\n ]);\n }\n });\n var Title = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.append(new TextBox(this.options.text, $.extend({}, this.options, { vAlign: this.options.position })));\n },\n reflow: function (targetBox) {\n ChartElement.fn.reflow.call(this, targetBox);\n this.box.snapTo(targetBox, X);\n }\n });\n Title.buildTitle = function (options, parent, defaultOptions) {\n var titleOptions = options;\n if (typeof options === 'string') {\n titleOptions = { text: options };\n }\n titleOptions = $.extend({ visible: true }, defaultOptions, titleOptions);\n var title;\n if (titleOptions && titleOptions.visible && titleOptions.text) {\n title = new Title(titleOptions);\n parent.append(title);\n }\n return title;\n };\n setDefaultOptions(Title, {\n color: BLACK,\n position: TOP,\n align: CENTER,\n margin: getSpacing(5),\n padding: getSpacing(5)\n });\n var AxisLabel = TextBox.extend({\n init: function (value, text, index, dataItem, options) {\n TextBox.fn.init.call(this, text, options);\n this.text = text;\n this.value = value;\n this.index = index;\n this.dataItem = dataItem;\n this.reflow(new Box());\n },\n visualContext: function (targetBox) {\n var context = TextBox.fn.visualContext.call(this, targetBox);\n context.value = this.value;\n context.dataItem = this.dataItem;\n context.format = this.options.format;\n context.culture = this.options.culture;\n return context;\n },\n click: function (widget, e) {\n widget.trigger(AXIS_LABEL_CLICK, {\n element: eventElement(e),\n value: this.value,\n text: this.text,\n index: this.index,\n dataItem: this.dataItem,\n axis: this.parent.options\n });\n },\n rotate: function () {\n if (this.options.alignRotation !== CENTER) {\n var box = this.normalBox.toRect();\n var transform = this.rotationTransform();\n this.box = rectToBox(box.bbox(transform.matrix()));\n } else {\n TextBox.fn.rotate.call(this);\n }\n return this.box;\n },\n rotationTransform: function () {\n var options = this.options;\n var rotation = options.rotation;\n if (!rotation) {\n return null;\n }\n if (options.alignRotation === CENTER) {\n return TextBox.fn.rotationTransform.call(this);\n }\n var rotationMatrix = geometryTransform().rotate(rotation).matrix();\n var box = this.normalBox.toRect();\n var rect = this.targetBox.toRect();\n var rotationOrigin = options.rotationOrigin || TOP;\n var alignAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? X : Y;\n var distanceAxis = rotationOrigin === TOP || rotationOrigin === BOTTOM ? Y : X;\n var axisAnchor = rotationOrigin === TOP || rotationOrigin === LEFT ? rect.origin : rect.bottomRight();\n var topLeft = box.topLeft().transformCopy(rotationMatrix);\n var topRight = box.topRight().transformCopy(rotationMatrix);\n var bottomRight = box.bottomRight().transformCopy(rotationMatrix);\n var bottomLeft = box.bottomLeft().transformCopy(rotationMatrix);\n var rotatedBox = Rect.fromPoints(topLeft, topRight, bottomRight, bottomLeft);\n var translate = {};\n translate[distanceAxis] = rect.origin[distanceAxis] - rotatedBox.origin[distanceAxis];\n var distanceLeft = Math.abs(topLeft[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var distanceRight = Math.abs(topRight[distanceAxis] + translate[distanceAxis] - axisAnchor[distanceAxis]);\n var alignStart, alignEnd;\n if (round(distanceLeft, DEFAULT_PRECISION) === round(distanceRight, DEFAULT_PRECISION)) {\n alignStart = topLeft;\n alignEnd = topRight;\n } else if (distanceRight < distanceLeft) {\n alignStart = topRight;\n alignEnd = bottomRight;\n } else {\n alignStart = topLeft;\n alignEnd = bottomLeft;\n }\n var alignCenter = alignStart[alignAxis] + (alignEnd[alignAxis] - alignStart[alignAxis]) / 2;\n translate[alignAxis] = rect.center()[alignAxis] - alignCenter;\n return geometryTransform().translate(translate.x, translate.y).rotate(rotation);\n }\n });\n setDefaultOptions(AxisLabel, { _autoReflow: false });\n var DEFAULT_ICON_SIZE = 7;\n var DEFAULT_LABEL_COLOR = '#fff';\n var Note = BoxElement.extend({\n init: function (fields, options, chartService) {\n BoxElement.fn.init.call(this, options);\n this.fields = fields;\n this.chartService = chartService;\n this.render();\n },\n hide: function () {\n this.options.visible = false;\n },\n show: function () {\n this.options.visible = true;\n },\n render: function () {\n var options = this.options;\n if (options.visible) {\n var label = options.label;\n var icon = options.icon;\n var box = new Box();\n var size = icon.size;\n var text = this.fields.text;\n var width, height;\n if (defined(label) && label.visible) {\n var noteTemplate = getTemplate(label);\n if (noteTemplate) {\n text = noteTemplate(this.fields);\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = label.position === INSIDE ? DEFAULT_LABEL_COLOR : icon.background;\n }\n this.label = new TextBox(text, deepExtend({}, label));\n if (label.position === INSIDE && !defined(size)) {\n if (icon.type === CIRCLE) {\n size = Math.max(this.label.box.width(), this.label.box.height());\n } else {\n width = this.label.box.width();\n height = this.label.box.height();\n }\n box.wrap(this.label.box);\n }\n }\n icon.width = width || size || DEFAULT_ICON_SIZE;\n icon.height = height || size || DEFAULT_ICON_SIZE;\n var marker = new ShapeElement(deepExtend({}, icon));\n this.marker = marker;\n this.append(marker);\n if (this.label) {\n this.append(this.label);\n }\n marker.reflow(new Box());\n this.wrapperBox = box.wrap(marker.box);\n }\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var marker = ref.marker;\n var wrapperBox = ref.wrapperBox;\n var center = targetBox.center();\n var length = options.line.length;\n var position = options.position;\n if (options.visible) {\n var lineStart, box, contentBox;\n if (inArray(position, [\n LEFT,\n RIGHT\n ])) {\n if (position === LEFT) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(-length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x1,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x2,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(length, targetBox.center().y - wrapperBox.center().y);\n if (options.line.visible) {\n lineStart = [\n targetBox.x2,\n center.y\n ];\n this.linePoints = [\n lineStart,\n [\n contentBox.x1,\n center.y\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n } else {\n if (position === BOTTOM) {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y2\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y1\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n } else {\n contentBox = wrapperBox.alignTo(targetBox, position).translate(targetBox.center().x - wrapperBox.center().x, -length);\n if (options.line.visible) {\n lineStart = [\n center.x,\n targetBox.y1\n ];\n this.linePoints = [\n lineStart,\n [\n center.x,\n contentBox.y2\n ]\n ];\n box = contentBox.clone().wrapPoint(lineStart);\n }\n }\n }\n if (marker) {\n marker.reflow(contentBox);\n }\n if (label) {\n label.reflow(contentBox);\n if (marker) {\n if (options.label.position === OUTSIDE) {\n label.box.alignTo(marker.box, position);\n }\n label.reflow(label.box);\n }\n }\n this.contentBox = contentBox;\n this.targetBox = targetBox;\n this.box = box || contentBox;\n }\n },\n createVisual: function () {\n BoxElement.fn.createVisual.call(this);\n this.visual.options.noclip = this.options.noclip;\n if (this.options.visible) {\n this.createLine();\n }\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (options.visible && customVisual) {\n this.visual = customVisual($.extend(this.fields, {\n sender: this.getSender(),\n rect: this.targetBox.toRect(),\n options: {\n background: options.background,\n border: options.background,\n icon: options.icon,\n label: options.label,\n line: options.line,\n position: options.position,\n visible: options.visible\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n }));\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n },\n createLine: function () {\n var options = this.options.line;\n if (this.linePoints) {\n var path = Path.fromPoints(this.linePoints, {\n stroke: {\n color: options.color,\n width: options.width,\n dashType: options.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_CLICK, args)) {\n e.preventDefault();\n }\n },\n hover: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n leave: function (widget) {\n widget._unsetActivePoint();\n },\n eventArgs: function (e) {\n var options = this.options;\n return $.extend(this.fields, {\n element: eventElement(e),\n text: defined(options.label) ? options.label.text : '',\n visual: this.visual\n });\n }\n });\n setDefaultOptions(Note, {\n icon: {\n visible: true,\n type: CIRCLE\n },\n label: {\n position: INSIDE,\n visible: true,\n align: CENTER,\n vAlign: CENTER\n },\n line: { visible: true },\n visible: true,\n position: TOP,\n zIndex: 2\n });\n function createAxisTick(options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n var tick = new Path({\n stroke: {\n width: tickOptions.width,\n color: tickOptions.color\n }\n });\n if (options.vertical) {\n tick.moveTo(tickX, position).lineTo(tickX + tickOptions.size, position);\n } else {\n tick.moveTo(position, tickY).lineTo(position, tickY + tickOptions.size);\n }\n alignPathToPixel(tick);\n return tick;\n }\n function createAxisGridLine(options, gridLine) {\n var lineStart = options.lineStart;\n var lineEnd = options.lineEnd;\n var position = options.position;\n var line = new Path({\n stroke: {\n width: gridLine.width,\n color: gridLine.color,\n dashType: gridLine.dashType\n }\n });\n if (options.vertical) {\n line.moveTo(lineStart, position).lineTo(lineEnd, position);\n } else {\n line.moveTo(position, lineStart).lineTo(position, lineEnd);\n }\n alignPathToPixel(line);\n return line;\n }\n var Axis = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = new ChartService();\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!this.options.visible) {\n this.options = deepExtend({}, this.options, {\n labels: { visible: false },\n line: { visible: false },\n margin: 0,\n majorTickSize: 0,\n minorTickSize: 0\n });\n }\n this.options.minorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.minorTickType !== NONE\n }, this.options.minorTicks, {\n size: this.options.minorTickSize,\n align: this.options.minorTickType\n });\n this.options.majorTicks = deepExtend({}, {\n color: this.options.line.color,\n width: this.options.line.width,\n visible: this.options.majorTickType !== NONE\n }, this.options.majorTicks, {\n size: this.options.majorTickSize,\n align: this.options.majorTickType\n });\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n this.createTitle();\n this.createNotes();\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n createLabels: function () {\n var this$1 = this;\n var options = this.options;\n var align = options.vertical ? RIGHT : CENTER;\n var labelOptions = deepExtend({}, options.labels, {\n align: align,\n zIndex: options.zIndex\n });\n var step = Math.max(1, labelOptions.step);\n this.children = grep(this.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n this.labels = [];\n if (labelOptions.visible) {\n var range = this.labelsRange();\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n for (var idx = range.min; idx < range.max; idx += step) {\n var label = this$1.createAxisLabel(idx, labelOptions);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n lineBox: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var axisX = mirror ? box.x1 : box.x2;\n var axisY = mirror ? box.y2 : box.y1;\n var lineWidth = options.line.width || 0;\n return vertical ? new Box(axisX, box.y1, axisX, box.y2 - lineWidth) : new Box(box.x1, axisY, box.x2 - lineWidth, axisY);\n },\n createTitle: function () {\n var options = this.options;\n var titleOptions = deepExtend({\n rotation: options.vertical ? -90 : 0,\n text: '',\n zIndex: 1,\n visualSize: true\n }, options.title);\n if (titleOptions.visible && titleOptions.text) {\n var title = new TextBox(titleOptions.text, titleOptions);\n this.append(title);\n this.title = title;\n }\n },\n createNotes: function () {\n var this$1 = this;\n var options = this.options;\n var notes = options.notes;\n var items = notes.data || [];\n this.notes = [];\n for (var i = 0; i < items.length; i++) {\n var item = deepExtend({}, notes, items[i]);\n item.value = this$1.parseNoteValue(item.value);\n var note = new Note({\n value: item.value,\n text: item.label.text,\n dataItem: item\n }, item, this$1.chartService);\n if (note.options.visible) {\n if (defined(note.options.position)) {\n if (options.vertical && !inArray(note.options.position, [\n LEFT,\n RIGHT\n ])) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else if (!options.vertical && !inArray(note.options.position, [\n TOP,\n BOTTOM\n ])) {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n } else {\n if (options.vertical) {\n note.options.position = options.reverse ? LEFT : RIGHT;\n } else {\n note.options.position = options.reverse ? BOTTOM : TOP;\n }\n }\n this$1.append(note);\n this$1.notes.push(note);\n }\n }\n },\n parseNoteValue: function (value) {\n return value;\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n this.createPlotBands();\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this.createBackground();\n this.createLine();\n },\n gridLinesVisual: function () {\n var gridLines = this._gridLines;\n if (!gridLines) {\n gridLines = this._gridLines = new Group({ zIndex: -2 });\n this.appendVisual(this._gridLines);\n }\n return gridLines;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickLineOptions = { vertical: options.vertical };\n function render(tickPositions, tickOptions, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, tickOptions.step);\n if (tickOptions.visible) {\n for (var i = tickOptions.skip; i < count; i += step) {\n if (defined(skipUnit) && i % skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(this.getMajorTickPositions(), options.majorTicks);\n render(this.getMinorTickPositions(), options.minorTicks, majorUnit / options.minorUnit);\n },\n createLine: function () {\n var options = this.options;\n var line = options.line;\n var lineBox = this.lineBox();\n if (line.width > 0 && line.visible) {\n var path = new Path({\n stroke: {\n width: line.width,\n color: line.color,\n dashType: line.dashType\n }\n });\n path.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n if (options._alignLines) {\n alignPathToPixel(path);\n }\n var group = this._lineGroup = new Group();\n group.append(path);\n this.visual.append(group);\n this.createTicks(group);\n }\n },\n getActualTickSize: function () {\n var options = this.options;\n var tickSize = 0;\n if (options.majorTicks.visible && options.minorTicks.visible) {\n tickSize = Math.max(options.majorTicks.size, options.minorTicks.size);\n } else if (options.majorTicks.visible) {\n tickSize = options.majorTicks.size;\n } else if (options.minorTicks.visible) {\n tickSize = options.minorTicks.size;\n }\n return tickSize;\n },\n createBackground: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var background = options.background;\n if (background) {\n this._backgroundPath = Path.fromRect(box.toRect(), {\n fill: { color: background },\n stroke: null\n });\n this.visual.append(this._backgroundPath);\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var options = this.options;\n var plotBands = options.plotBands || [];\n var vertical = options.vertical;\n var plotArea = this.plotArea;\n if (plotBands.length === 0) {\n return;\n }\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n var altAxis = grep(this.pane.axes, function (axis) {\n return axis.options.vertical !== this$1.options.vertical;\n })[0];\n for (var idx = 0; idx < plotBands.length; idx++) {\n var item = plotBands[idx];\n var slotX = void 0, slotY = void 0;\n if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this$1.getSlot(item.from, item.to, true);\n } else {\n slotX = this$1.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.width(),\n slotY.height()\n ]);\n var path = Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n group.append(path);\n }\n }\n this.appendVisual(group);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var minorUnit = options.minorUnit;\n var vertical = options.vertical;\n var axisLineVisible = altAxis.options.line.visible;\n var majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n var lineBox = altAxis.lineBox();\n var linePos = lineBox[vertical ? 'y1' : 'x1'];\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, gridLine.step);\n if (gridLine.visible) {\n for (var i = gridLine.skip; i < count; i += step) {\n var pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n return container.children;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var title = ref.title;\n var vertical = options.vertical;\n var count = labels.length;\n var sizeFn = vertical ? WIDTH : HEIGHT;\n var titleSize = title ? title.box[sizeFn]() : 0;\n var space = this.getActualTickSize() + options.margin + titleSize;\n var rootBox = (this.getRoot() || {}).box || box;\n var boxSize = rootBox[sizeFn]();\n var maxLabelSize = 0;\n for (var i = 0; i < count; i++) {\n var labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n if (vertical) {\n this.box = new Box(box.x1, box.y1, box.x1 + maxLabelSize + space, box.y2);\n } else {\n this.box = new Box(box.x1, box.y1, box.x2, box.y1 + maxLabelSize + space);\n }\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n },\n getLabelsTickPositions: function () {\n return this.getMajorTickPositions();\n },\n labelTickIndex: function (label) {\n return label.index;\n },\n arrangeLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelsBetweenTicks = !options.justified;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n var labelOffset = this.getActualTickSize() + options.margin;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var labelPos = tickPositions[tickIx] - labelSize / 2;\n var labelBox = void 0, firstTickPosition = void 0, nextTickPosition = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n labelPos = middle - labelSize / 2;\n }\n var labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, labelPos);\n } else {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n } else {\n firstTickPosition = labelPos;\n nextTickPosition = labelPos + labelSize;\n }\n var labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = new Box(firstTickPosition, labelY, nextTickPosition, labelY + label.box.height());\n }\n label.reflow(labelBox);\n }\n },\n autoRotateLabels: function () {\n if (this.options.autoRotateLabels && !this.options.vertical) {\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var angle;\n for (var idx = 0; idx < labels.length; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n if (labelBox.width() > width) {\n if (labelBox.height() > width) {\n angle = -90;\n break;\n }\n angle = -45;\n }\n }\n if (angle) {\n for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n labels[idx$1].options.rotation = angle;\n labels[idx$1].reflow(new Box());\n }\n return true;\n }\n }\n },\n arrangeTitle: function () {\n var ref = this;\n var options = ref.options;\n var title = ref.title;\n var mirror = options.labels.mirror;\n var vertical = options.vertical;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(this.box);\n }\n },\n arrangeNotes: function () {\n var this$1 = this;\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1.notes[idx];\n var value = item.options.value;\n var slot = void 0;\n if (defined(value)) {\n if (this$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = this$1.noteSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || this$1.lineBox());\n }\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n alignTo: function (secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, dataItem, options) {\n var tmpl = getTemplate(options);\n var text = value;\n if (tmpl) {\n text = tmpl({\n value: value,\n dataItem: dataItem,\n format: options.format,\n culture: options.culture\n });\n } else if (options.format) {\n text = this.chartService.format.localeAuto(options.format, [value], options.culture);\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n if (labels[0].options.visible) {\n box.wrap(labels[0].box);\n }\n var lastLabel = labels[labels.length - 1];\n if (lastLabel.options.visible) {\n box.wrap(lastLabel.box);\n }\n }\n return box;\n },\n limitRange: function (from, to, min, max, offset) {\n var options = this.options;\n if (from < min && offset < 0 && (!defined(options.min) || options.min <= min) || max < to && offset > 0 && (!defined(options.max) || max <= options.max)) {\n return null;\n }\n if (to < min && offset > 0 || max < from && offset < 0) {\n return {\n min: from,\n max: to\n };\n }\n var rangeSize = to - from;\n var minValue = from;\n var maxValue = to;\n if (from < min) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max) {\n maxValue = limitValue(to, min, max);\n minValue = limitValue(to - rangeSize, min, max - rangeSize);\n }\n return {\n min: minValue,\n max: maxValue\n };\n },\n valueRange: function () {\n return {\n min: this.seriesMin,\n max: this.seriesMax\n };\n }\n });\n setDefaultOptions(Axis, {\n labels: {\n visible: true,\n rotation: 0,\n mirror: false,\n step: 1,\n skip: 0\n },\n line: {\n width: 1,\n color: BLACK,\n visible: true\n },\n title: {\n visible: true,\n position: CENTER\n },\n majorTicks: {\n align: OUTSIDE,\n size: 4,\n skip: 0,\n step: 1\n },\n minorTicks: {\n align: OUTSIDE,\n size: 3,\n skip: 0,\n step: 1\n },\n axisCrossingValue: 0,\n majorTickType: OUTSIDE,\n minorTickType: NONE,\n majorGridLines: {\n skip: 0,\n step: 1\n },\n minorGridLines: {\n visible: false,\n width: 1,\n color: BLACK,\n skip: 0,\n step: 1\n },\n margin: 5,\n visible: true,\n reverse: false,\n justified: true,\n notes: { label: { text: '' } },\n _alignLines: true,\n _deferLabels: false\n });\n var MILLISECONDS = 'milliseconds';\n var SECONDS = 'seconds';\n var MINUTES = 'minutes';\n var HOURS = 'hours';\n var DAYS = 'days';\n var WEEKS = 'weeks';\n var MONTHS = 'months';\n var YEARS = 'years';\n var TIME_PER_MILLISECOND = 1;\n var TIME_PER_SECOND = 1000;\n var TIME_PER_MINUTE = 60 * TIME_PER_SECOND;\n var TIME_PER_HOUR = 60 * TIME_PER_MINUTE;\n var TIME_PER_DAY = 24 * TIME_PER_HOUR;\n var TIME_PER_WEEK = 7 * TIME_PER_DAY;\n var TIME_PER_MONTH = 31 * TIME_PER_DAY;\n var TIME_PER_YEAR = 365 * TIME_PER_DAY;\n var TIME_PER_UNIT = {\n 'years': TIME_PER_YEAR,\n 'months': TIME_PER_MONTH,\n 'weeks': TIME_PER_WEEK,\n 'days': TIME_PER_DAY,\n 'hours': TIME_PER_HOUR,\n 'minutes': TIME_PER_MINUTE,\n 'seconds': TIME_PER_SECOND,\n 'milliseconds': TIME_PER_MILLISECOND\n };\n function absoluteDateDiff(a, b) {\n var diff = a.getTime() - b;\n var offsetDiff = a.getTimezoneOffset() - b.getTimezoneOffset();\n return diff - offsetDiff * TIME_PER_MINUTE;\n }\n function addTicks(date, ticks) {\n return new Date(date.getTime() + ticks);\n }\n function toDate(value) {\n var result;\n if (value instanceof Date) {\n result = value;\n } else if (value) {\n result = new Date(value);\n }\n return result;\n }\n function startOfWeek(date, weekStartDay) {\n if (weekStartDay === void 0) {\n weekStartDay = 0;\n }\n var daysToSubtract = 0;\n var day = date.getDay();\n if (!isNaN(day)) {\n while (day !== weekStartDay) {\n if (day === 0) {\n day = 6;\n } else {\n day--;\n }\n daysToSubtract++;\n }\n }\n return addTicks(date, -daysToSubtract * TIME_PER_DAY);\n }\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function addHours(date, hours) {\n var roundedDate = new Date(date);\n roundedDate.setMinutes(0, 0, 0);\n var tzDiff = (date.getTimezoneOffset() - roundedDate.getTimezoneOffset()) * TIME_PER_MINUTE;\n return addTicks(roundedDate, tzDiff + hours * TIME_PER_HOUR);\n }\n function addDuration(dateValue, value, unit, weekStartDay) {\n var result = dateValue;\n if (dateValue) {\n var date = toDate(dateValue);\n var hours = date.getHours();\n if (unit === YEARS) {\n result = new Date(date.getFullYear() + value, 0, 1);\n adjustDST(result, 0);\n } else if (unit === MONTHS) {\n result = new Date(date.getFullYear(), date.getMonth() + value, 1);\n adjustDST(result, hours);\n } else if (unit === WEEKS) {\n result = addDuration(startOfWeek(date, weekStartDay), value * 7, DAYS);\n adjustDST(result, hours);\n } else if (unit === DAYS) {\n result = new Date(date.getFullYear(), date.getMonth(), date.getDate() + value);\n adjustDST(result, hours);\n } else if (unit === HOURS) {\n result = addHours(date, value);\n } else if (unit === MINUTES) {\n result = addTicks(date, value * TIME_PER_MINUTE);\n if (result.getSeconds() > 0) {\n result.setSeconds(0);\n }\n } else if (unit === SECONDS) {\n result = addTicks(date, value * TIME_PER_SECOND);\n } else if (unit === MILLISECONDS) {\n result = addTicks(date, value);\n }\n if (unit !== MILLISECONDS && result.getMilliseconds() > 0) {\n result.setMilliseconds(0);\n }\n }\n return result;\n }\n function floorDate(date, unit, weekStartDay) {\n return addDuration(toDate(date), 0, unit, weekStartDay);\n }\n function ceilDate(dateValue, unit, weekStartDay) {\n var date = toDate(dateValue);\n if (date && floorDate(date, unit, weekStartDay).getTime() === date.getTime()) {\n return date;\n }\n return addDuration(date, 1, unit, weekStartDay);\n }\n function dateComparer(a, b) {\n if (a && b) {\n return a.getTime() - b.getTime();\n }\n return -1;\n }\n function dateDiff(a, b) {\n return a.getTime() - b;\n }\n function toTime(value) {\n if (isArray(value)) {\n var result = [];\n for (var idx = 0; idx < value.length; idx++) {\n result.push(toTime(value[idx]));\n }\n return result;\n } else if (value) {\n return toDate(value).getTime();\n }\n }\n function dateEquals(a, b) {\n if (a && b) {\n return toTime(a) === toTime(b);\n }\n return a === b;\n }\n function timeIndex(date, start, baseUnit) {\n return absoluteDateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n function dateIndex(value, start, baseUnit, baseUnitStep) {\n var date = toDate(value);\n var startDate = toDate(start);\n var index;\n if (baseUnit === MONTHS) {\n index = date.getMonth() - startDate.getMonth() + (date.getFullYear() - startDate.getFullYear()) * 12 + timeIndex(date, new Date(date.getFullYear(), date.getMonth()), DAYS) / new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();\n } else if (baseUnit === YEARS) {\n index = date.getFullYear() - startDate.getFullYear() + dateIndex(date, new Date(date.getFullYear(), 0), MONTHS, 1) / 12;\n } else if (baseUnit === DAYS || baseUnit === WEEKS) {\n index = timeIndex(date, startDate, baseUnit);\n } else {\n index = dateDiff(date, start) / TIME_PER_UNIT[baseUnit];\n }\n return index / baseUnitStep;\n }\n function duration(a, b, unit) {\n var diff;\n if (unit === YEARS) {\n diff = b.getFullYear() - a.getFullYear();\n } else if (unit === MONTHS) {\n diff = duration(a, b, YEARS) * 12 + b.getMonth() - a.getMonth();\n } else if (unit === DAYS) {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_DAY);\n } else {\n diff = Math.floor(dateDiff(b, a) / TIME_PER_UNIT[unit]);\n }\n return diff;\n }\n function lteDateIndex(date, sortedDates) {\n var low = 0;\n var high = sortedDates.length - 1;\n var index;\n while (low <= high) {\n index = Math.floor((low + high) / 2);\n var currentDate = sortedDates[index];\n if (currentDate < date) {\n low = index + 1;\n continue;\n }\n if (currentDate > date) {\n high = index - 1;\n continue;\n }\n while (dateEquals(sortedDates[index - 1], date)) {\n index--;\n }\n return index;\n }\n if (sortedDates[index] <= date) {\n return index;\n }\n return index - 1;\n }\n function parseDate(intlService, date) {\n var result;\n if (isString(date)) {\n result = intlService.parseDate(date) || toDate(date);\n } else {\n result = toDate(date);\n }\n return result;\n }\n function parseDates(intlService, dates) {\n if (isArray(dates)) {\n var result = [];\n for (var idx = 0; idx < dates.length; idx++) {\n result.push(parseDate(intlService, dates[idx]));\n }\n return result;\n }\n return parseDate(intlService, dates);\n }\n var MIN_CATEGORY_POINTS_RANGE = 0.01;\n function indexOf(value, arr) {\n if (value instanceof Date) {\n var length = arr.length;\n for (var idx = 0; idx < length; idx++) {\n if (dateEquals(arr[idx], value)) {\n return idx;\n }\n }\n return -1;\n }\n return arr.indexOf(value);\n }\n var CategoryAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n this._ticks = {};\n this._initCategories(this.options);\n },\n _initCategories: function (options) {\n var categories = (options.categories || []).slice(0);\n var definedMin = defined(options.min);\n var definedMax = defined(options.max);\n options.categories = categories;\n if ((definedMin || definedMax) && categories.length) {\n options.srcCategories = options.categories;\n var min = definedMin ? Math.floor(options.min) : 0;\n var max;\n if (definedMax) {\n max = options.justified ? Math.floor(options.max) + 1 : Math.ceil(options.max);\n } else {\n max = categories.length;\n }\n options.categories = options.categories.slice(min, max);\n }\n },\n rangeIndices: function () {\n var options = this.options;\n var length = options.categories.length || 1;\n var min = isNumber(options.min) ? options.min % 1 : 0;\n var max;\n if (isNumber(options.max) && options.max % 1 !== 0 && options.max < this.totalRange().max) {\n max = length - (1 - options.max % 1);\n } else {\n max = length - (options.justified ? 1 : 0);\n }\n return {\n min: min,\n max: max\n };\n },\n totalRangeIndices: function (limit) {\n var options = this.options;\n var min = isNumber(options.min) ? options.min : 0;\n var max;\n if (isNumber(options.max)) {\n max = options.max;\n } else if (isNumber(options.min)) {\n max = min + options.categories.length;\n } else {\n max = (options.srcCategories || options.categories).length - (options.justified ? 1 : 0) || 1;\n }\n if (limit) {\n var totalRange = this.totalRange();\n min = limitValue(min, 0, totalRange.max);\n max = limitValue(max, 0, totalRange.max);\n }\n return {\n min: min,\n max: max\n };\n },\n range: function () {\n var options = this.options;\n return {\n min: isNumber(options.min) ? options.min : 0,\n max: isNumber(options.max) ? options.max : options.categories.length\n };\n },\n totalRange: function () {\n var options = this.options;\n return {\n min: 0,\n max: Math.max(this._seriesMax || 0, (options.srcCategories || options.categories).length) - (options.justified ? 1 : 0)\n };\n },\n getScale: function () {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var lineBox = this.lineBox();\n var size = this.options.vertical ? lineBox.height() : lineBox.width();\n var scale = size / (max - min || 1);\n return scale * (this.options.reverse ? -1 : 1);\n },\n getTickPositions: function (stepSize) {\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var ref$1 = this.rangeIndices();\n var min = ref$1.min;\n var max = ref$1.max;\n var lineBox = this.lineBox();\n var scale = this.getScale();\n var pos = lineBox[(vertical ? Y : X) + (reverse ? 2 : 1)];\n var positions = [];\n var current = min % 1 !== 0 ? Math.floor(min / 1) + stepSize : min;\n while (current <= max) {\n positions.push(pos + round(scale * (current - min), COORD_PRECISION));\n current += stepSize;\n }\n return positions;\n },\n getLabelsTickPositions: function () {\n var tickPositions = this.getMajorTickPositions().slice(0);\n var range = this.rangeIndices();\n var scale = this.getScale();\n var box = this.lineBox();\n var options = this.options;\n var axis = options.vertical ? Y : X;\n var start = options.reverse ? 2 : 1;\n var end = options.reverse ? 1 : 2;\n if (range.min % 1 !== 0) {\n tickPositions.unshift(box[axis + start] - scale * (range.min % 1));\n }\n if (range.max % 1 !== 0) {\n tickPositions.push(box[axis + end] + scale * (1 - range.max % 1));\n }\n return tickPositions;\n },\n labelTickIndex: function (label) {\n var range = this.rangeIndices();\n var index = label.index;\n if (range.min > 0) {\n index = index - Math.floor(range.min);\n }\n return index;\n },\n arrangeLabels: function () {\n Axis.fn.arrangeLabels.call(this);\n this.hideOutOfRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n var ref = this;\n var box = ref.box;\n var labels = ref.labels;\n if (labels.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n var firstLabel = labels[0];\n var lastLabel = last(labels);\n if (firstLabel.box[valueAxis + 1] > end || firstLabel.box[valueAxis + 2] < start) {\n firstLabel.options.visible = false;\n }\n if (lastLabel.box[valueAxis + 1] > end || lastLabel.box[valueAxis + 2] < start) {\n lastLabel.options.visible = false;\n }\n }\n },\n getMajorTickPositions: function () {\n return this.getTicks().majorTicks;\n },\n getMinorTickPositions: function () {\n return this.getTicks().minorTicks;\n },\n getTicks: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var cache = this._ticks;\n var range = this.rangeIndices();\n var lineBox = this.lineBox();\n var hash = lineBox.getHash() + range.min + ',' + range.max + reverse + justified;\n if (cache._hash !== hash) {\n cache._hash = hash;\n cache.majorTicks = this.getTickPositions(1);\n cache.minorTicks = this.getTickPositions(0.5);\n }\n return cache;\n },\n getSlot: function (from, to, limit) {\n var options = this.options;\n var reverse = options.reverse;\n var justified = options.justified;\n var vertical = options.vertical;\n var ref = this.rangeIndices();\n var min = ref.min;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var slotBox = lineBox.clone();\n var singleSlot = !defined(to);\n var start = valueOrDefault(from, 0);\n var end = valueOrDefault(to, start);\n end = Math.max(end - 1, start);\n end = Math.max(start, end);\n var p1 = lineStart + (start - min) * scale;\n var p2 = lineStart + (end + 1 - min) * scale;\n if (singleSlot && justified) {\n p2 = p1;\n }\n if (limit) {\n p1 = limitValue(p1, lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n p2 = limitValue(p2, lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n }\n slotBox[valueAxis + 1] = reverse ? p2 : p1;\n slotBox[valueAxis + 2] = reverse ? p1 : p2;\n return slotBox;\n },\n limitSlot: function (slot) {\n var vertical = this.options.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var limittedSlot = slot.clone();\n limittedSlot[valueAxis + 1] = limitValue(slot[valueAxis + 1], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n limittedSlot[valueAxis + 2] = limitValue(slot[valueAxis + 2], lineBox[valueAxis + 1], lineBox[valueAxis + 2]);\n return limittedSlot;\n },\n slot: function (from, to, limit) {\n var start = from;\n var end = to;\n if (typeof start === 'string') {\n start = this.categoryIndex(start);\n }\n if (typeof end === 'string') {\n end = this.categoryIndex(end);\n }\n return Axis.fn.slot.call(this, start, end, limit);\n },\n pointCategoryIndex: function (point) {\n var ref = this.options;\n var reverse = ref.reverse;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var range = this.rangeIndices();\n var startValue = reverse ? range.max : range.min;\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + 1];\n var lineEnd = lineBox[valueAxis + 2];\n var pos = point[valueAxis];\n if (pos < lineStart || pos > lineEnd) {\n return null;\n }\n var value = startValue + (pos - lineStart) / scale;\n var diff = value % 1;\n if (justified) {\n value = Math.round(value);\n } else if (diff === 0 && value > 0) {\n value--;\n }\n return Math.floor(value);\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.options.categories[index];\n },\n categoryIndex: function (value) {\n var options = this.options;\n var index = indexOf(value, options.srcCategories || options.categories);\n return index - Math.floor(options.min || 0);\n },\n translateRange: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = options.categories.length;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n return {\n min: offset,\n max: range + offset\n };\n },\n zoomRange: function (rate) {\n var rangeIndices = this.totalRangeIndices();\n var ref = this.totalRange();\n var totalMin = ref.min;\n var totalMax = ref.max;\n var min = limitValue(rangeIndices.min + rate, totalMin, totalMax);\n var max = limitValue(rangeIndices.max - rate, totalMin, totalMax);\n if (max - min > 0) {\n return {\n min: min,\n max: max\n };\n }\n },\n scaleRange: function (scale) {\n var range = this.options.categories.length;\n var delta = scale * range;\n return {\n min: -delta,\n max: range + delta\n };\n },\n labelsCount: function () {\n var labelsRange = this.labelsRange();\n return labelsRange.max - labelsRange.min;\n },\n labelsRange: function () {\n var options = this.options;\n var justified = options.justified;\n var labelOptions = options.labels;\n var ref = this.totalRangeIndices(true);\n var min = ref.min;\n var max = ref.max;\n var start = Math.floor(min);\n if (!justified) {\n min = Math.floor(min);\n max = Math.ceil(max);\n } else {\n min = Math.ceil(min);\n max = Math.floor(max);\n }\n var skip;\n if (min > labelOptions.skip) {\n skip = labelOptions.skip + labelOptions.step * Math.ceil((min - labelOptions.skip) / labelOptions.step);\n } else {\n skip = labelOptions.skip;\n }\n return {\n min: skip - start,\n max: (options.categories.length ? max + (justified ? 1 : 0) : 0) - start\n };\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n var text = this.axisLabelText(category, dataItem, labelOptions);\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.totalRangeIndices();\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\n noteSlot: function (value) {\n var options = this.options;\n var index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n },\n arrangeNotes: function () {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\n hideOutOfRangeNotes: function () {\n var ref = this;\n var notes = ref.notes;\n var box = ref.box;\n if (notes && notes.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n for (var idx = 0; idx < notes.length; idx++) {\n var note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n },\n pan: function (delta) {\n var range = this.totalRangeIndices(true);\n var scale = this.getScale();\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var totalRange = this.totalRange();\n var min = range.min + offset;\n var max = range.max + offset;\n return this.limitRange(min, max, 0, totalRange.max, offset);\n },\n pointsRange: function (start, end) {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var range = this.totalRangeIndices(true);\n var scale = this.getScale();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var diffStart = start[valueAxis] - lineStart;\n var diffEnd = end[valueAxis] - lineStart;\n var min = range.min + diffStart / scale;\n var max = range.min + diffEnd / scale;\n var rangeMin = Math.min(min, max);\n var rangeMax = Math.max(min, max);\n if (rangeMax - rangeMin >= MIN_CATEGORY_POINTS_RANGE) {\n return {\n min: rangeMin,\n max: rangeMax\n };\n }\n },\n valueRange: function () {\n return this.range();\n }\n });\n setDefaultOptions(CategoryAxis, {\n type: 'category',\n categories: [],\n vertical: false,\n majorGridLines: {\n visible: false,\n width: 1,\n color: BLACK\n },\n labels: { zIndex: 1 },\n justified: false,\n _deferLabels: true\n });\n var COORDINATE_LIMIT = 300000;\n var DateLabelFormats = {\n milliseconds: 'HH:mm:ss.fff',\n seconds: 'HH:mm:ss',\n minutes: 'HH:mm',\n hours: 'HH:mm',\n days: 'M/d',\n weeks: 'M/d',\n months: 'MMM \\'yy',\n years: 'yyyy'\n };\n var ZERO_THRESHOLD = 0.2;\n var AUTO = 'auto';\n var BASE_UNITS = [\n MILLISECONDS,\n SECONDS,\n MINUTES,\n HOURS,\n DAYS,\n WEEKS,\n MONTHS,\n YEARS\n ];\n var FIT = 'fit';\n var DateCategoryAxis = CategoryAxis.extend({\n init: function (axisOptions, chartService) {\n CategoryAxis.fn.init.call(this, axisOptions, chartService);\n var intlService = chartService.intl;\n var options = this.options;\n options = deepExtend({ roundToBaseUnit: true }, options, {\n categories: parseDates(intlService, options.categories),\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max)\n });\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n if (options.categories && options.categories.length > 0) {\n var baseUnit = (options.baseUnit || '').toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n if (useDefault) {\n options.baseUnit = this.defaultBaseUnit(options);\n }\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n this.autoBaseUnit(options);\n }\n this._groupsStart = addDuration(options.categories[0], 0, options.baseUnit, options.weekStartDay);\n this.groupCategories(options);\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n }\n this.options = options;\n },\n _initCategories: function () {\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n var categories = this.options.categories || [];\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0 && categories.length;\n },\n parseNoteValue: function (value) {\n return parseDate(this.chartService.intl, value);\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n translateRange: function (delta) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / (range.max - range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if (range.min && range.max) {\n var from = addTicks(options.min || range.min, offset);\n var to = addTicks(options.max || range.max, offset);\n range = {\n min: addDuration(from, 0, baseUnit, weekStartDay),\n max: addDuration(to, 0, baseUnit, weekStartDay)\n };\n }\n return range;\n },\n scaleRange: function (delta) {\n var rounds = Math.abs(delta);\n var result = this.range();\n var from = result.min;\n var to = result.max;\n if (from && to) {\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n result = {\n min: from,\n max: to\n };\n }\n return result;\n },\n defaultBaseUnit: function (options) {\n var categories = options.categories;\n var count = defined(categories) ? categories.length : 0;\n var minDiff = MAX_VALUE;\n var lastCategory, unit;\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n var category = categories[categoryIx];\n if (category && lastCategory) {\n var diff = absoluteDateDiff(category, lastCategory);\n if (diff > 0) {\n minDiff = Math.min(minDiff, diff);\n if (minDiff >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (minDiff >= TIME_PER_MONTH - TIME_PER_DAY * 3) {\n unit = MONTHS;\n } else if (minDiff >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (minDiff >= TIME_PER_DAY) {\n unit = DAYS;\n } else if (minDiff >= TIME_PER_HOUR) {\n unit = HOURS;\n } else if (minDiff >= TIME_PER_MINUTE) {\n unit = MINUTES;\n } else {\n unit = SECONDS;\n }\n }\n }\n lastCategory = category;\n }\n return unit || DAYS;\n },\n _categoryRange: function (categories) {\n var range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n }\n return range;\n },\n totalRange: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n rangeIndices: function () {\n var options = this.options;\n var categories = options.categories;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var categoryLimits = this.categoriesRange();\n var min = toDate(options.min || categoryLimits.min);\n var max = toDate(options.max || categoryLimits.max);\n var minIdx = 0, maxIdx = 0;\n if (categories.length) {\n minIdx = dateIndex(min, categories[0], baseUnit, baseUnitStep);\n maxIdx = dateIndex(max, categories[0], baseUnit, baseUnitStep);\n if (options.roundToBaseUnit) {\n minIdx = Math.floor(minIdx);\n maxIdx = options.justified ? Math.floor(maxIdx) : Math.ceil(maxIdx);\n }\n }\n return {\n min: minIdx,\n max: maxIdx\n };\n },\n labelsRange: function () {\n var options = this.options;\n var labelOptions = options.labels;\n var range = this.rangeIndices();\n var min = Math.floor(range.min);\n var max = Math.ceil(range.max);\n return {\n min: min + labelOptions.skip,\n max: options.categories.length ? max + (options.justified ? 1 : 0) : 0\n };\n },\n categoriesRange: function () {\n var options = this.options;\n var range = this._categoryRange(options.srcCategories || options.categories);\n var max = toDate(range.max);\n if (!options.justified && dateEquals(max, this._roundToTotalStep(max, options, false))) {\n max = this._roundToTotalStep(max, options, true, true);\n }\n return {\n min: toDate(range.min),\n max: max\n };\n },\n currentRange: function () {\n var options = this.options;\n var round$$1 = options.roundToBaseUnit !== false;\n var totalRange = this.categoriesRange();\n var min = options.min;\n var max = options.max;\n if (!min) {\n min = round$$1 ? this._roundToTotalStep(totalRange.min, options, false) : totalRange.min;\n }\n if (!max) {\n max = round$$1 ? this._roundToTotalStep(totalRange.max, options, !options.justified) : totalRange.max;\n }\n return {\n min: min,\n max: max\n };\n },\n datesRange: function () {\n var range = this._categoryRange(this.options.srcCategories || this.options.categories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n pan: function (delta) {\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var ref = this.currentRange();\n var min = ref.min;\n var max = ref.max;\n var totalLimits = this.totalLimits();\n var scale = size / (max - min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var from = addTicks(min, offset);\n var to = addTicks(max, offset);\n var panRange = this.limitRange(toTime(from), toTime(to), toTime(totalLimits.min), toTime(totalLimits.max), offset);\n if (panRange) {\n panRange.min = toDate(panRange.min);\n panRange.max = toDate(panRange.max);\n panRange.baseUnit = options.baseUnit;\n panRange.baseUnitStep = options.baseUnitStep || 1;\n panRange.userSetBaseUnit = options.userSetBaseUnit;\n panRange.userSetBaseUnitStep = options.userSetBaseUnitStep;\n return panRange;\n }\n },\n pointsRange: function (start, end) {\n var pointsRange = CategoryAxis.fn.pointsRange.call(this, start, end);\n var datesRange = this.currentRange();\n var indicesRange = this.rangeIndices();\n var scale = dateDiff(datesRange.max, datesRange.min) / (indicesRange.max - indicesRange.min);\n var options = this.options;\n var min = addTicks(datesRange.min, pointsRange.min * scale);\n var max = addTicks(datesRange.min, pointsRange.max * scale);\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit,\n baseUnitStep: options.userSetBaseUnitStep\n };\n },\n zoomRange: function (delta) {\n var options = this.options;\n var totalLimits = this.totalLimits();\n var weekStartDay = options.weekStartDay;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var ref = this.currentRange();\n var rangeMin = ref.min;\n var rangeMax = ref.max;\n var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);\n var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);\n if (options.userSetBaseUnit === FIT) {\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var maxDiff = last(autoBaseUnitSteps[baseUnit]) * maxDateGroups * TIME_PER_UNIT[baseUnit];\n var rangeDiff = dateDiff(rangeMax, rangeMin);\n var diff = dateDiff(max, min);\n var baseUnitIndex = BASE_UNITS.indexOf(baseUnit);\n var autoBaseUnitStep, ticks;\n if (diff < TIME_PER_UNIT[baseUnit] && baseUnit !== MILLISECONDS) {\n baseUnit = BASE_UNITS[baseUnitIndex - 1];\n autoBaseUnitStep = last(autoBaseUnitSteps[baseUnit]);\n ticks = (rangeDiff - (maxDateGroups - 1) * autoBaseUnitStep * TIME_PER_UNIT[baseUnit]) / 2;\n min = addTicks(rangeMin, ticks);\n max = addTicks(rangeMax, -ticks);\n } else if (diff > maxDiff && baseUnit !== YEARS) {\n var stepIndex = 0;\n do {\n baseUnitIndex++;\n baseUnit = BASE_UNITS[baseUnitIndex];\n stepIndex = 0;\n ticks = 2 * TIME_PER_UNIT[baseUnit];\n do {\n autoBaseUnitStep = autoBaseUnitSteps[baseUnit][stepIndex];\n stepIndex++;\n } while (stepIndex < autoBaseUnitSteps[baseUnit].length && ticks * autoBaseUnitStep < rangeDiff);\n } while (baseUnit !== YEARS && ticks * autoBaseUnitStep < rangeDiff);\n ticks = (ticks * autoBaseUnitStep - rangeDiff) / 2;\n if (ticks > 0) {\n min = addTicks(rangeMin, -ticks);\n max = addTicks(rangeMax, ticks);\n min = addTicks(min, limitValue(max, totalLimits.min, totalLimits.max) - max);\n max = addTicks(max, limitValue(min, totalLimits.min, totalLimits.max) - min);\n }\n }\n }\n min = toDate(limitValue(min, totalLimits.min, totalLimits.max));\n max = toDate(limitValue(max, totalLimits.min, totalLimits.max));\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit,\n baseUnitStep: options.userSetBaseUnitStep\n };\n }\n },\n totalLimits: function () {\n var options = this.options;\n var datesRange = this.datesRange();\n var min = this._roundToTotalStep(toDate(datesRange.min), options, false);\n var max = datesRange.max;\n if (!options.justified) {\n max = this._roundToTotalStep(max, options, true, dateEquals(max, this._roundToTotalStep(max, options, false)));\n }\n return {\n min: min,\n max: max\n };\n },\n range: function (rangeOptions) {\n var options = rangeOptions || this.options;\n var categories = options.categories;\n var autoUnit = options.baseUnit === FIT;\n var baseUnit = autoUnit ? BASE_UNITS[0] : options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var stepOptions = {\n baseUnit: baseUnit,\n baseUnitStep: baseUnitStep,\n weekStartDay: options.weekStartDay\n };\n var categoryLimits = this._categoryRange(categories);\n var min = toDate(options.min || categoryLimits.min);\n var max = toDate(options.max || categoryLimits.max);\n return {\n min: this._roundToTotalStep(min, stepOptions, false),\n max: this._roundToTotalStep(max, stepOptions, true, true)\n };\n },\n autoBaseUnit: function (options) {\n var categoryLimits = this._categoryRange(options.categories);\n var span = toDate(options.max || categoryLimits.max) - toDate(options.min || categoryLimits.min);\n var maxDateGroups = options.maxDateGroups || this.options.maxDateGroups;\n var autoUnit = options.baseUnit === FIT;\n var autoUnitIx = 0;\n var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n var units = span / TIME_PER_UNIT[baseUnit];\n var totalUnits = units;\n var autoBaseUnitSteps = deepExtend({}, this.options.autoBaseUnitSteps, options.autoBaseUnitSteps);\n var unitSteps, step, nextStep;\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n nextStep = unitSteps.shift();\n if (nextStep) {\n step = nextStep;\n units = totalUnits / step;\n } else if (baseUnit === last(BASE_UNITS)) {\n step = Math.ceil(totalUnits / maxDateGroups);\n break;\n } else if (autoUnit) {\n baseUnit = BASE_UNITS[autoUnitIx++] || last(BASE_UNITS);\n totalUnits = span / TIME_PER_UNIT[baseUnit];\n unitSteps = null;\n } else {\n if (units > maxDateGroups) {\n step = Math.ceil(totalUnits / maxDateGroups);\n }\n break;\n }\n }\n options.baseUnitStep = step;\n options.baseUnit = baseUnit;\n },\n groupCategories: function (options) {\n var categories = options.categories;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var maxCategory = toDate(sparseArrayLimits(categories).max);\n var ref = this.range(options);\n var min = ref.min;\n var max = ref.max;\n var groups = [];\n var nextDate;\n for (var date = min; date < max; date = nextDate) {\n groups.push(date);\n nextDate = addDuration(date, baseUnitStep, baseUnit, options.weekStartDay);\n if (nextDate > maxCategory && !options.max) {\n break;\n }\n }\n options.srcCategories = categories;\n options.categories = groups;\n },\n _roundToTotalStep: function (value, axisOptions, upper, roundToNext) {\n var options = axisOptions || this.options;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep || 1;\n var start = this._groupsStart;\n if (start) {\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n if (roundToNext) {\n roundedStep++;\n }\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, options.weekStartDay);\n }\n return addDuration(value, upper ? baseUnitStep : 0, baseUnit, options.weekStartDay);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var date = options.categories[index];\n var baseUnit = options.baseUnit;\n var unitFormat = labelOptions.dateFormats[baseUnit];\n var visible = true;\n if (options.justified) {\n var roundedDate = floorDate(date, baseUnit, options.weekStartDay);\n visible = dateEquals(roundedDate, date);\n } else if (!options.roundToBaseUnit) {\n visible = !dateEquals(this.range().max, date);\n }\n if (visible) {\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, dataItem, labelOptions);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n }\n },\n categoryIndex: function (value) {\n var options = this.options;\n var categories = options.categories;\n var index = -1;\n if (categories.length) {\n index = Math.floor(dateIndex(toDate(value), categories[0], options.baseUnit, options.baseUnitStep || 1));\n }\n return index;\n },\n getSlot: function (a, b, limit) {\n var start = a;\n var end = b;\n if (typeof start === OBJECT) {\n start = this.categoryIndex(start);\n }\n if (typeof end === OBJECT) {\n end = this.categoryIndex(end);\n }\n return CategoryAxis.fn.getSlot.call(this, start, end, limit);\n },\n valueRange: function () {\n var options = this.options;\n var range = this._categoryRange(options.srcCategories || options.categories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n }\n });\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: { dateFormats: DateLabelFormats },\n autoBaseUnitSteps: {\n milliseconds: [\n 1,\n 10,\n 100\n ],\n seconds: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n minutes: [\n 1,\n 2,\n 5,\n 15,\n 30\n ],\n hours: [\n 1,\n 2,\n 3\n ],\n days: [\n 1,\n 2,\n 3\n ],\n weeks: [\n 1,\n 2\n ],\n months: [\n 1,\n 2,\n 3,\n 6\n ],\n years: [\n 1,\n 2,\n 3,\n 5,\n 10,\n 25,\n 50\n ]\n },\n maxDateGroups: 10\n });\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n diff = Math.abs(max);\n }\n var scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n var relativeValue = round(diff / scale, DEFAULT_PRECISION);\n var scaleMultiplier = 1;\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n function autoAxisMin(min, max, narrow) {\n if (!min && !max) {\n return 0;\n }\n var axisMin;\n if (min >= 0 && max >= 0) {\n var minValue = min === max ? 0 : min;\n var diff = (max - minValue) / max;\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMin = Math.max(0, minValue - (max - minValue) / 2);\n } else {\n axisMin = min;\n }\n return axisMin;\n }\n function autoAxisMax(min, max, narrow) {\n if (!min && !max) {\n return 1;\n }\n var axisMax;\n if (min <= 0 && max <= 0) {\n var maxValue = min === max ? 0 : max;\n var diff = Math.abs((maxValue - min) / maxValue);\n if (narrow === false || !narrow && diff > ZERO_THRESHOLD) {\n return 0;\n }\n axisMax = Math.min(0, maxValue - (min - maxValue) / 2);\n } else {\n axisMax = max;\n }\n return axisMax;\n }\n function floor(value, step) {\n return round(Math.floor(value / step) * step, DEFAULT_PRECISION);\n }\n function ceil(value, step) {\n return round(Math.ceil(value / step) * step, DEFAULT_PRECISION);\n }\n function limitCoordinate(value) {\n return Math.max(Math.min(value, COORDINATE_LIMIT), -COORDINATE_LIMIT);\n }\n var MIN_VALUE_RANGE = Math.pow(10, -DEFAULT_PRECISION + 1);\n var NumericAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var autoOptions = autoAxisOptions(seriesMin, seriesMax, options);\n var totalOptions = totalAxisOptions(autoOptions, options);\n Axis.fn.init.call(this, axisOptions(autoOptions, options), chartService);\n this.totalMin = totalOptions.min;\n this.totalMax = totalOptions.max;\n this.totalMajorUnit = totalOptions.majorUnit;\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n },\n startValue: function () {\n return 0;\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n if (stepValue === 0) {\n return 1;\n }\n var options = this.options;\n var range = options.max - options.min;\n return Math.floor(round(range / stepValue, COORD_PRECISION)) + 1;\n },\n getTickPositions: function (unit, skipUnit) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var lineBox = this.lineBox();\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var range = options.max - options.min;\n var scale = lineSize / range;\n var step = unit * scale;\n var divisions = this.getDivisions(unit);\n var dir = (vertical ? -1 : 1) * (reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var positions = [];\n var pos = lineBox[(vertical ? Y : X) + startEdge];\n var skipStep = 0;\n if (skipUnit) {\n skipStep = skipUnit / unit;\n }\n for (var idx = 0; idx < divisions; idx++) {\n if (idx % skipStep !== 0) {\n positions.push(round(pos, COORD_PRECISION));\n }\n pos = pos + step * dir;\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n if (limit === void 0) {\n limit = false;\n }\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (options.max - options.min));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 0;\n }\n if (!defined(end)) {\n end = start || 0;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n var p1, p2;\n if (vertical) {\n p1 = options.max - Math.max(start, end);\n p2 = options.max - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - options.min;\n p2 = Math.max(start, end) - options.min;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = Number(options.max);\n var min = Number(options.min);\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var offset = dir * (point[valueAxis] - lineStart);\n var step = (max - min) / lineSize;\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = vertical ? max - valueOffset : min + valueOffset;\n return round(value, DEFAULT_PRECISION);\n },\n translateRange: function (delta) {\n var options = this.options;\n var vertical = options.vertical;\n var reverse = options.reverse;\n var max = options.max;\n var min = options.min;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var range = max - min;\n var scale = size / range;\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: min + offset,\n max: max + offset\n };\n },\n scaleRange: function (delta) {\n var options = this.options;\n var offset = -delta * options.majorUnit;\n return {\n min: options.min - offset,\n max: options.max + offset\n };\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n zoomRange: function (delta) {\n var ref = this;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n if (this.isValidRange(min, max)) {\n return {\n min: min,\n max: max\n };\n }\n },\n isValidRange: function (min, max) {\n return max - min > MIN_VALUE_RANGE;\n }\n });\n function autoAxisOptions(seriesMin, seriesMax, options) {\n var narrowRange = options.narrowRange;\n var autoMin = autoAxisMin(seriesMin, seriesMax, narrowRange);\n var autoMax = autoAxisMax(seriesMin, seriesMax, narrowRange);\n var majorUnit = autoMajorUnit(autoMin, autoMax);\n var autoOptions = { majorUnit: majorUnit };\n if (options.roundToMajorUnit !== false) {\n if (autoMin < 0 && remainderClose(autoMin, majorUnit, 1 / 3)) {\n autoMin -= majorUnit;\n }\n if (autoMax > 0 && remainderClose(autoMax, majorUnit, 1 / 3)) {\n autoMax += majorUnit;\n }\n }\n autoOptions.min = floor(autoMin, majorUnit);\n autoOptions.max = ceil(autoMax, majorUnit);\n return autoOptions;\n }\n function totalAxisOptions(autoOptions, options) {\n return {\n min: defined(options.min) ? Math.min(autoOptions.min, options.min) : autoOptions.min,\n max: defined(options.max) ? Math.max(autoOptions.max, options.max) : autoOptions.max,\n majorUnit: autoOptions.majorUnit\n };\n }\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n var userSetMin, userSetMax;\n if (userOptions) {\n userSetMin = defined(userOptions.min);\n userSetMax = defined(userOptions.max);\n var userSetLimits = userSetMin || userSetMax;\n if (userSetLimits) {\n if (userOptions.min === userOptions.max) {\n if (userOptions.min > 0) {\n userOptions.min = 0;\n } else {\n userOptions.max = 1;\n }\n }\n }\n if (userOptions.majorUnit) {\n autoOptions.min = floor(autoOptions.min, userOptions.majorUnit);\n autoOptions.max = ceil(autoOptions.max, userOptions.majorUnit);\n } else if (userSetLimits) {\n options = deepExtend(autoOptions, userOptions);\n autoOptions.majorUnit = autoMajorUnit(options.min, options.max);\n }\n }\n autoOptions.minorUnit = (options.majorUnit || autoOptions.majorUnit) / 5;\n var result = deepExtend(autoOptions, options);\n if (result.min >= result.max) {\n if (userSetMin && !userSetMax) {\n result.max = result.min + result.majorUnit;\n } else if (!userSetMin && userSetMax) {\n result.min = result.max - result.majorUnit;\n }\n }\n return result;\n }\n function remainderClose(value, divisor, ratio) {\n var remainder = round(Math.abs(value % divisor), DEFAULT_PRECISION);\n var threshold = divisor * (1 - ratio);\n return remainder === 0 || remainder > threshold;\n }\n setDefaultOptions(NumericAxis, {\n type: 'numeric',\n min: 0,\n max: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { format: '#.####################' },\n zIndex: 1\n });\n var DateValueAxis = Axis.extend({\n init: function (seriesMin, seriesMax, axisOptions, chartService) {\n var min = toDate(seriesMin);\n var max = toDate(seriesMax);\n var intlService = chartService.intl;\n var options = axisOptions || {};\n options = deepExtend(options || {}, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n axisCrossingValue: parseDates(intlService, options.axisCrossingValues || options.axisCrossingValue)\n });\n options = applyDefaults(min, max, options);\n Axis.fn.init.call(this, options, chartService);\n this.seriesMin = min;\n this.seriesMax = max;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit));\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n getDivisions: function (stepValue) {\n var options = this.options;\n return Math.floor(duration(options.min, options.max, options.baseUnit) / stepValue + 1);\n },\n getTickPositions: function (step) {\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var dir = (vertical ? -1 : 1) * (options.reverse ? -1 : 1);\n var startEdge = dir === 1 ? 1 : 2;\n var start = lineBox[(vertical ? Y : X) + startEdge];\n var divisions = this.getDivisions(step);\n var timeRange = dateDiff(options.max, options.min);\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var scale = lineSize / timeRange;\n var positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit);\n var pos = start + dateDiff(date, options.min) * scale * dir;\n positions.push(round(pos, COORD_PRECISION));\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n return NumericAxis.prototype.getSlot.call(this, toDate(a), toDate(b), limit);\n },\n getValue: function (point) {\n var value = NumericAxis.prototype.getValue.call(this, point);\n return value !== null ? toDate(value) : null;\n },\n labelsCount: function () {\n return this.getDivisions(this.options.majorUnit);\n },\n createAxisLabel: function (index, labelOptions) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, null, labelOptions);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / dateDiff(range.max, range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n var from = addTicks(options.min, offset);\n var to = addTicks(options.max, offset);\n if (!exact) {\n from = addDuration(from, 0, baseUnit, weekStartDay);\n to = addDuration(to, 0, baseUnit, weekStartDay);\n }\n return {\n min: from,\n max: to\n };\n },\n scaleRange: function (delta) {\n var ref = this.options;\n var from = ref.min;\n var to = ref.max;\n var rounds = Math.abs(delta);\n while (rounds--) {\n var range = dateDiff(from, to);\n var step = Math.round(range * 0.1);\n if (delta < 0) {\n from = addTicks(from, step);\n to = addTicks(to, -step);\n } else {\n from = addTicks(from, -step);\n to = addTicks(to, step);\n }\n }\n return {\n min: from,\n max: to\n };\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return dateComparer(value, range.min) >= 0 && dateComparer(value, range.max) <= 0;\n },\n pan: function (delta) {\n var range = this.translateRange(delta, true);\n var limittedRange = this.limitRange(toTime(range.min), toTime(range.max), this.totalMin, this.totalMax);\n if (limittedRange) {\n return {\n min: toDate(limittedRange.min),\n max: toDate(limittedRange.max)\n };\n }\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: toDate(min),\n max: toDate(max)\n };\n },\n zoomRange: function (delta) {\n var range = this.scaleRange(delta);\n var min = toDate(limitValue(toTime(range.min), this.totalMin, this.totalMax));\n var max = toDate(limitValue(toTime(range.max), this.totalMin, this.totalMax));\n return {\n min: min,\n max: max\n };\n }\n });\n function timeUnits(delta) {\n var unit = HOURS;\n if (delta >= TIME_PER_YEAR) {\n unit = YEARS;\n } else if (delta >= TIME_PER_MONTH) {\n unit = MONTHS;\n } else if (delta >= TIME_PER_WEEK) {\n unit = WEEKS;\n } else if (delta >= TIME_PER_DAY) {\n unit = DAYS;\n }\n return unit;\n }\n function applyDefaults(seriesMin, seriesMax, options) {\n var min = options.min || seriesMin;\n var max = options.max || seriesMax;\n var baseUnit = options.baseUnit || (max && min ? timeUnits(absoluteDateDiff(max, min)) : HOURS);\n var baseUnitTime = TIME_PER_UNIT[baseUnit];\n var autoMin = floorDate(toTime(min) - 1, baseUnit) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit);\n var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n var majorUnit = userMajorUnit || ceil(autoMajorUnit(autoMin.getTime(), autoMax.getTime()), baseUnitTime) / baseUnitTime;\n var actualUnits = duration(autoMin, autoMax, baseUnit);\n var totalUnits = ceil(actualUnits, majorUnit);\n var unitsToAdd = totalUnits - actualUnits;\n var head = Math.floor(unitsToAdd / 2);\n var tail = unitsToAdd - head;\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit);\n options.max = options.max || addDuration(autoMax, tail, baseUnit);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n return options;\n }\n setDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { dateFormats: DateLabelFormats }\n });\n var DEFAULT_MAJOR_UNIT = 10;\n var LogarithmicAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var axisOptions = deepExtend({\n majorUnit: DEFAULT_MAJOR_UNIT,\n min: seriesMin,\n max: seriesMax\n }, options);\n var base = axisOptions.majorUnit;\n var autoMax = autoAxisMax$1(seriesMax, base);\n var autoMin = autoAxisMin$1(seriesMin, seriesMax, axisOptions);\n var range = initRange(autoMin, autoMax, axisOptions, options);\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n Axis.fn.init.call(this, axisOptions, chartService);\n this.totalMin = defined(options.min) ? Math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? Math.max(autoMax, options.max) : autoMax;\n this.logMin = round(log(range.min, base), DEFAULT_PRECISION);\n this.logMax = round(log(range.max, base), DEFAULT_PRECISION);\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n this.createLabels();\n },\n startValue: function () {\n return this.options.min;\n },\n getSlot: function (a, b, limit) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var lineStart = lineBox[valueAxis + (reverse ? 2 : 1)];\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var dir = reverse ? -1 : 1;\n var step = dir * (lineSize / (logMax - logMin));\n var slotBox = new Box(lineBox.x1, lineBox.y1, lineBox.x1, lineBox.y1);\n var start = a;\n var end = b;\n if (!defined(start)) {\n start = end || 1;\n }\n if (!defined(end)) {\n end = start || 1;\n }\n if (start <= 0 || end <= 0) {\n return null;\n }\n if (limit) {\n start = Math.max(Math.min(start, options.max), options.min);\n end = Math.max(Math.min(end, options.max), options.min);\n }\n start = log(start, base);\n end = log(end, base);\n var p1, p2;\n if (vertical) {\n p1 = logMax - Math.max(start, end);\n p2 = logMax - Math.min(start, end);\n } else {\n p1 = Math.min(start, end) - logMin;\n p2 = Math.max(start, end) - logMin;\n }\n slotBox[valueAxis + 1] = limitCoordinate(lineStart + step * (reverse ? p2 : p1));\n slotBox[valueAxis + 2] = limitCoordinate(lineStart + step * (reverse ? p1 : p2));\n return slotBox;\n },\n getValue: function (point) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = (logMax - logMin) / lineSize;\n var valueAxis = vertical ? Y : X;\n var lineStart = lineBox[valueAxis + startEdge];\n var offset = dir * (point[valueAxis] - lineStart);\n var valueOffset = offset * step;\n if (offset < 0 || offset > lineSize) {\n return null;\n }\n var value = logMin + valueOffset;\n return round(Math.pow(base, value), DEFAULT_PRECISION);\n },\n range: function () {\n var options = this.options;\n return {\n min: options.min,\n max: options.max\n };\n },\n scaleRange: function (delta) {\n var base = this.options.majorUnit;\n var offset = -delta;\n return {\n min: Math.pow(base, this.logMin - offset),\n max: Math.pow(base, this.logMax + offset)\n };\n },\n translateRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var logMin = ref.logMin;\n var logMax = ref.logMax;\n var reverse = options.reverse;\n var vertical = options.vertical;\n var base = options.majorUnit;\n var lineBox = this.lineBox();\n var size = vertical ? lineBox.height() : lineBox.width();\n var scale = size / (logMax - logMin);\n var offset = round(delta / scale, DEFAULT_PRECISION);\n if ((vertical || reverse) && !(vertical && reverse)) {\n offset = -offset;\n }\n return {\n min: Math.pow(base, logMin + offset),\n max: Math.pow(base, logMax + offset)\n };\n },\n labelsCount: function () {\n var floorMax = Math.floor(this.logMax);\n var count = Math.floor(floorMax - this.logMin) + 1;\n return count;\n },\n getMajorTickPositions: function () {\n var ticks = [];\n this.traverseMajorTicksPositions(function (position) {\n ticks.push(position);\n }, {\n step: 1,\n skip: 0\n });\n return ticks;\n },\n createTicks: function (lineGroup) {\n var options = this.options;\n var majorTicks = options.majorTicks;\n var minorTicks = options.minorTicks;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var lineBox = this.lineBox();\n var ticks = [];\n var tickLineOptions = { vertical: vertical };\n function render(tickPosition, tickOptions) {\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPosition;\n lineGroup.append(createAxisTick(tickLineOptions, tickOptions));\n }\n if (majorTicks.visible) {\n this.traverseMajorTicksPositions(render, majorTicks);\n }\n if (minorTicks.visible) {\n this.traverseMinorTicksPositions(render, minorTicks);\n }\n return ticks;\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var vertical = options.vertical;\n var lineBox = altAxis.lineBox();\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPosition, gridLine) {\n if (!inArray(tickPosition, majorTicks)) {\n lineOptions.position = tickPosition;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(tickPosition);\n }\n }\n if (majorGridLines.visible) {\n this.traverseMajorTicksPositions(render, majorGridLines);\n }\n if (minorGridLines.visible) {\n this.traverseMinorTicksPositions(render, minorGridLines);\n }\n return container.children;\n },\n traverseMajorTicksPositions: function (callback, tickOptions) {\n var ref = this._lineOptions();\n var lineStart = ref.lineStart;\n var step = ref.step;\n var ref$1 = this;\n var logMin = ref$1.logMin;\n var logMax = ref$1.logMax;\n for (var power = Math.ceil(logMin) + tickOptions.skip; power <= logMax; power += tickOptions.step) {\n var position = round(lineStart + step * (power - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n },\n traverseMinorTicksPositions: function (callback, tickOptions) {\n var this$1 = this;\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var ref$1 = this._lineOptions();\n var lineStart = ref$1.lineStart;\n var step = ref$1.step;\n var ref$2 = this;\n var logMin = ref$2.logMin;\n var logMax = ref$2.logMax;\n var start = Math.floor(logMin);\n for (var power = start; power < logMax; power++) {\n var minorOptions = this$1._minorIntervalOptions(power);\n for (var idx = tickOptions.skip; idx < minorUnit; idx += tickOptions.step) {\n var value = minorOptions.value + idx * minorOptions.minorStep;\n if (value > max) {\n break;\n }\n if (value >= min) {\n var position = round(lineStart + step * (log(value, base) - logMin), DEFAULT_PRECISION);\n callback(position, tickOptions);\n }\n }\n }\n },\n createAxisLabel: function (index, labelOptions) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, -delta);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n var base = options.majorUnit;\n var acceptOptionsRange = max > min && options.min && options.max && round(log(options.max, base) - log(options.min, base), DEFAULT_PRECISION) < 1;\n var acceptNewRange = !(options.min === totalMin && options.max === totalMax) && round(log(max, base) - log(min, base), DEFAULT_PRECISION) >= 1;\n if (acceptOptionsRange || acceptNewRange) {\n return {\n min: min,\n max: max\n };\n }\n },\n _minorIntervalOptions: function (power) {\n var ref = this.options;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var value = Math.pow(base, power);\n var nextValue = Math.pow(base, power + 1);\n var difference = nextValue - value;\n var minorStep = difference / minorUnit;\n return {\n value: value,\n minorStep: minorStep\n };\n },\n _lineOptions: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = dir * (lineSize / (this.logMax - this.logMin));\n var lineStart = lineBox[valueAxis + startEdge];\n return {\n step: step,\n lineStart: lineStart,\n lineBox: lineBox\n };\n }\n });\n function initRange(autoMin, autoMax, axisOptions, options) {\n var min = axisOptions.min;\n var max = axisOptions.max;\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n return {\n min: min,\n max: max\n };\n }\n function autoAxisMin$1(min, max, options) {\n var base = options.majorUnit;\n var autoMin = min;\n if (min <= 0) {\n autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = Math.pow(base, Math.floor(log(min, base)));\n }\n return autoMin;\n }\n function autoAxisMax$1(max, base) {\n var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n var autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = Math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = Math.pow(base, Math.ceil(log(max, base)));\n }\n return autoMax;\n }\n function throwNegativeValuesError() {\n throw new Error('Non positive values cannot be used for a logarithmic axis');\n }\n function log(y, x) {\n return Math.log(y) / Math.log(x);\n }\n setDefaultOptions(LogarithmicAxis, {\n type: 'log',\n majorUnit: DEFAULT_MAJOR_UNIT,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1,\n _deferLabels: true\n });\n var GridLinesMixin = {\n createGridLines: function (altAxis) {\n var options = this.options;\n var radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n var gridLines = [];\n var skipMajor = false;\n var majorAngles, minorAngles;\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n gridLines = this.renderMajorGridLines(majorAngles, radius, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n append(gridLines, this.renderMinorGridLines(minorAngles, radius, options.minorGridLines, altAxis, skipMajor));\n }\n return gridLines;\n },\n renderMajorGridLines: function (angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n renderMinorGridLines: function (angles, radius, options, altAxis, skipMajor) {\n var radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n renderGridLines: function (angles, radius, options, radiusCallback) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var center = this.box.center();\n var circle = new Circle([\n center.x,\n center.y\n ], radius);\n var container = this.gridLinesVisual();\n for (var i = 0; i < angles.length; i++) {\n var line = new Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n line.moveTo(circle.center).lineTo(circle.pointAt(angles[i] + 180));\n container.append(line);\n }\n return container.children;\n },\n gridLineAngles: function (altAxis, size, skip, step, skipAngles) {\n var this$1 = this;\n var divs = this.intervals(size, skip, step, skipAngles);\n var options = altAxis.options;\n var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n return map(divs, function (d) {\n var alpha = this$1.intervalAngle(d);\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n };\n var RadarCategoryAxis = CategoryAxis.extend({\n range: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n lineBox: function () {\n return this.box;\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(skip + i * step).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var options = this.options;\n var categories = options.categories.length;\n var divCount = categories / size || 1;\n var divAngle = 360 / divCount;\n var skip = skipOption || 0;\n var step = stepOption || 1;\n var divs = [];\n var angle = 0;\n for (var i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n angle = round(angle, COORD_PRECISION) % 360;\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(1);\n },\n minorIntervals: function () {\n return this.intervals(0.5);\n },\n intervalAngle: function (interval) {\n return (360 + interval + this.options.startAngle) % 360;\n },\n majorAngles: function () {\n var this$1 = this;\n return map(this.majorIntervals(), function (interval) {\n return this$1.intervalAngle(interval);\n });\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var ref = this.options;\n var minorGridLines = ref.minorGridLines;\n var majorGridLines = ref.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n radiusCallback: function (radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n var minorAngle = rad(360 / (this.options.categories.length * 2));\n var minorRadius = Math.cos(minorAngle) * radius;\n var majorAngles = this.majorAngles();\n var radiusCallback = function (angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n return minorRadius;\n };\n return radiusCallback;\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var plotBands = this.options.plotBands || [];\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var slot = this$1.plotBandSlot(band);\n var singleSlot = this$1.getSlot(band.from);\n var head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n var tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n var ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n });\n group.append(ring);\n }\n this.appendVisual(group);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to - 1);\n },\n getSlot: function (from, to) {\n var options = this.options;\n var justified = options.justified;\n var box = this.box;\n var divs = this.majorAngles();\n var totalDivs = divs.length;\n var slotAngle = 360 / totalDivs;\n var fromValue = from;\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n var slotStart = divs[fromValue];\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n var toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n var slots = toValue - fromValue + 1;\n var angle = slotAngle * slots;\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n },\n slot: function (from, to) {\n var slot = this.getSlot(from, to);\n var startAngle = slot.startAngle + 180;\n var endAngle = startAngle + slot.angle;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n pointCategoryIndex: function (point) {\n var this$1 = this;\n var length = this.options.categories.length;\n var index = null;\n for (var i = 0; i < length; i++) {\n var slot = this$1.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n return index;\n }\n });\n setDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: { margin: getSpacing(10) },\n majorGridLines: { visible: true },\n justified: true\n });\n deepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n var PolarAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n var instanceOptions = this.options;\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n },\n getDivisions: function (stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n var divs = this.intervals(options.majorUnit, skip, step);\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n lineBox: function () {\n return this.box;\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var min = this.options.min;\n var divisions = this.getDivisions(size);\n var divs = [];\n var skip = skipOption || 0;\n var step = stepOption || 1;\n for (var i = skip; i < divisions; i += step) {\n var current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(this.options.majorUnit);\n },\n minorIntervals: function () {\n return this.intervals(this.options.minorUnit);\n },\n intervalAngle: function (i) {\n return (540 - i - this.options.startAngle) % 360;\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to);\n },\n getSlot: function (a, b) {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var startAngle = options.startAngle;\n var start = limitValue(a, options.min, options.max);\n var end = limitValue(b || start, start, options.max);\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n if (end < start) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n },\n slot: function (from, to) {\n if (to === void 0) {\n to = from;\n }\n var options = this.options;\n var start = 360 - options.startAngle;\n var slot = this.getSlot(from, to);\n var min = Math.min(from, to);\n var max = Math.max(from, to);\n var startAngle, endAngle;\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n getValue: function (point) {\n var options = this.options;\n var center = this.box.center();\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = Math.round(deg(Math.atan2(dy, dx)));\n var start = options.startAngle;\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n return (theta + start + 360) % 360;\n },\n valueRange: function () {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n });\n setDefaultOptions(PolarAxis, {\n type: 'polar',\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: { margin: getSpacing(10) },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: { color: '#aaa' }\n });\n deepExtend(PolarAxis.prototype, GridLinesMixin, {\n createPlotBands: RadarCategoryAxis.prototype.createPlotBands,\n majorAngles: RadarCategoryAxis.prototype.majorAngles,\n range: NumericAxis.prototype.range,\n labelsCount: NumericAxis.prototype.labelsCount,\n createAxisLabel: NumericAxis.prototype.createAxisLabel\n });\n var RadarNumericAxisMixin = {\n options: { majorGridLines: { visible: true } },\n createPlotBands: function () {\n var this$1 = this;\n var ref = this.options;\n var type = ref.majorGridLines.type;\n var plotBands = ref.plotBands;\n if (plotBands === void 0) {\n plotBands = [];\n }\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n };\n var slot = this$1.getSlot(band.from, band.to, true);\n var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n var shape = void 0;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = Path.fromPoints(this$1.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n group.append(shape);\n }\n this.appendVisual(group);\n },\n plotBandPoints: function (ring, angles) {\n var innerPoints = [];\n var outerPoints = [];\n var center = [\n ring.center.x,\n ring.center.y\n ];\n var innerCircle = new Circle(center, ring.innerRadius);\n var outerCircle = new Circle(center, ring.radius);\n for (var i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n return outerPoints.concat(innerPoints);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var majorTicks = this.radarMajorGridLinePositions();\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var gridLines = [];\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(center, majorTicks, majorAngles, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n var minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(center, minorTicks, majorAngles, options.minorGridLines));\n }\n return gridLines;\n },\n renderGridLines: function (center, ticks, angles, options) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var skip = options.skip;\n if (skip === void 0) {\n skip = 0;\n }\n var step = options.step;\n if (step === void 0) {\n step = 0;\n }\n var container = this.gridLinesVisual();\n for (var tickIx = skip; tickIx < ticks.length; tickIx += step) {\n var tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n var circle = new Circle([\n center.x,\n center.y\n ], tickRadius);\n if (options.type === ARC) {\n container.append(new drawing.Circle(circle, style));\n } else {\n var line = new Path(style);\n for (var angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n line.close();\n container.append(line);\n }\n }\n }\n return container.children;\n },\n getValue: function (point) {\n var lineBox = this.lineBox();\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var radius = point.distanceTo(center);\n var distance = radius;\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n majorAngles.sort(function (a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n var alpha = angularDistance(theta, majorAngles[0]);\n var gamma = 90 - midAngle;\n var beta = 180 - alpha - gamma;\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n return this.axisType().prototype.getValue.call(this, new Point(lineBox.x1, lineBox.y2 - distance));\n }\n };\n function angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n }\n var RadarNumericAxis = NumericAxis.extend({\n radarMajorGridLinePositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n radarMinorGridLinePositions: function () {\n var options = this.options;\n var minorSkipStep = 0;\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n },\n axisType: function () {\n return NumericAxis;\n }\n });\n deepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n var RadarLogarithmicAxis = LogarithmicAxis.extend({\n radarMajorGridLinePositions: function () {\n var positions = [];\n this.traverseMajorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.majorGridLines);\n return positions;\n },\n radarMinorGridLinePositions: function () {\n var positions = [];\n this.traverseMinorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.minorGridLines);\n return positions;\n },\n axisType: function () {\n return LogarithmicAxis;\n }\n });\n deepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var CurveProcessor = Class.extend({\n init: function (closed) {\n this.closed = closed;\n },\n process: function (dataPoints) {\n var this$1 = this;\n var points = dataPoints.slice(0);\n var segments = [];\n var closed = this.closed;\n var length = points.length;\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n if (length < 2 || length === 2 && points[0].equals(points[1])) {\n return segments;\n }\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n segments.push(new Segment(p0));\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n if (length === 2) {\n var tangent = this.tangent(p0, p1, X, Y);\n last(segments).controlOut(this.firstControlPoint(tangent, p0, p1, X, Y));\n segments.push(new Segment(p1, this.secondControlPoint(tangent, p0, p1, X, Y)));\n return segments;\n }\n var initialControlPoint, lastControlPoint;\n if (closed) {\n p0 = points[length - 1];\n p1 = points[0];\n p2 = points[1];\n var controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = this.tangent(p0, p1, X, Y);\n initialControlPoint = this.firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n this$1.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx];\n p1 = points[idx + 1];\n p2 = points[idx + 2];\n var controlPoints$1 = this$1.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n if (closed) {\n p0 = points[length - 2];\n p1 = points[length - 1];\n p2 = points[0];\n var controlPoints$2 = this.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p1, controlPoints$2[0]));\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(p2, lastControlPoint));\n } else {\n var tangent$2 = this.tangent(p1, p2, X, Y);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p2, this.secondControlPoint(tangent$2, p1, p2, X, Y)));\n }\n return segments;\n },\n removeDuplicates: function (idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n },\n invertAxis: function (p0, p1, p2) {\n var invertAxis = false;\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if (p1.y < p2.y && p0.y <= p1.y || p2.y < p1.y && p1.y <= p0.y) {\n invertAxis = true;\n }\n } else {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) && !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n return invertAxis;\n },\n isLine: function (p0, p1, p2) {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n return p0.x === p1.x && p1.x === p2.x || round(y2, 1) === round(p2.y, 1);\n },\n lineFunction: function (p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n return [\n b,\n a\n ];\n },\n controlPoints: function (p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\n if (monotonic.x && monotonic.y) {\n tangent = this.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (this.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if (p2[yField] < p0[yField] && p0[yField] <= p1[yField] || p0[yField] < p2[yField] && p1[yField] <= p0[yField]) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n var firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n return [\n secondControlPoint,\n firstControlPoint\n ];\n },\n restrictControlPoint: function (p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n },\n tangent: function (p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n return tangent;\n },\n isMonotonicByField: function (p0, p1, p2, field) {\n return p2[field] > p1[field] && p1[field] > p0[field] || p2[field] < p1[field] && p1[field] < p0[field];\n },\n firstControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\n secondControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n point: function (xValue, yValue, xField, yField) {\n var controlPoint = new geometry.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n return controlPoint;\n },\n calculateFunction: function (fn, x) {\n var length = fn.length;\n var result = 0;\n for (var i = 0; i < length; i++) {\n result += Math.pow(x, i) * fn[i];\n }\n return result;\n }\n });\n function numberSign(value) {\n return value <= 0 ? -1 : 1;\n }\n dataviz.Gradients = GRADIENTS;\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n services: services,\n autoMajorUnit: autoMajorUnit,\n Point: Point,\n Box: Box,\n Ring: Ring,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n ChartElement: ChartElement,\n BoxElement: BoxElement,\n RootElement: RootElement,\n FloatElement: FloatElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n AxisLabel: AxisLabel,\n Axis: Axis,\n Note: Note,\n CategoryAxis: CategoryAxis,\n DateCategoryAxis: DateCategoryAxis,\n DateValueAxis: DateValueAxis,\n NumericAxis: NumericAxis,\n LogarithmicAxis: LogarithmicAxis,\n PolarAxis: PolarAxis,\n RadarCategoryAxis: RadarCategoryAxis,\n RadarNumericAxis: RadarNumericAxis,\n RadarLogarithmicAxis: RadarLogarithmicAxis,\n CurveProcessor: CurveProcessor,\n rectToBox: rectToBox,\n addClass: addClass,\n removeClass: removeClass,\n alignPathToPixel: alignPathToPixel,\n clockwise: clockwise,\n convertableToNumber: convertableToNumber,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n inArray: inArray,\n interpolateValue: interpolateValue,\n InstanceObserver: InstanceObserver,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n map: map,\n mousewheelDelta: mousewheelDelta,\n FontLoader: FontLoader,\n setDefaultOptions: setDefaultOptions,\n sparseArrayLimits: sparseArrayLimits,\n styleValue: styleValue,\n append: append,\n bindEvents: bindEvents,\n Class: Class,\n defined: defined,\n deg: deg,\n elementOffset: elementOffset,\n elementSize: elementSize,\n eventElement: eventElement,\n eventCoordinates: eventCoordinates,\n last: last,\n limitValue: limitValue,\n logToConsole: kendo.logToConsole,\n objectKey: objectKey,\n rad: rad,\n round: round,\n unbindEvents: unbindEvents,\n valueOrDefault: valueOrDefault,\n absoluteDateDiff: absoluteDateDiff,\n addDuration: addDuration,\n addTicks: addTicks,\n ceilDate: ceilDate,\n dateComparer: dateComparer,\n dateDiff: dateDiff,\n dateEquals: dateEquals,\n dateIndex: dateIndex,\n duration: duration,\n floorDate: floorDate,\n lteDateIndex: lteDateIndex,\n startOfWeek: startOfWeek,\n toDate: toDate,\n parseDate: parseDate,\n parseDates: parseDates,\n toTime: toTime\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/core', ['dataviz/core/kendo-core'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var services = dataviz.services;\n var draw = kendo.drawing;\n dataviz.ExportMixin = {\n extend: function (proto, skipLegacy) {\n if (!proto.exportVisual) {\n throw new Error('Mixin target has no exportVisual method defined.');\n }\n proto.exportSVG = this.exportSVG;\n proto.exportImage = this.exportImage;\n proto.exportPDF = this.exportPDF;\n if (!skipLegacy) {\n proto.svg = this.svg;\n proto.imageDataURL = this.imageDataURL;\n }\n },\n exportSVG: function (options) {\n return draw.exportSVG(this.exportVisual(), options);\n },\n exportImage: function (options) {\n return draw.exportImage(this.exportVisual(options), options);\n },\n exportPDF: function (options) {\n return draw.exportPDF(this.exportVisual(), options);\n },\n svg: function () {\n if (draw.svg.Surface) {\n return draw.svg.exportGroup(this.exportVisual());\n } else {\n throw new Error('SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface');\n }\n },\n imageDataURL: function () {\n if (!kendo.support.canvas) {\n return null;\n }\n if (draw.canvas.Surface) {\n var container = $('
    ').css({\n display: 'none',\n width: this.element.width(),\n height: this.element.height()\n }).appendTo(document.body);\n var surface = new draw.canvas.Surface(container[0]);\n surface.draw(this.exportVisual());\n var image = surface._rootElement.toDataURL();\n surface.destroy();\n container.remove();\n return image;\n } else {\n throw new Error('Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface');\n }\n }\n };\n services.IntlService.register({\n format: function (format) {\n return kendo.format.apply(null, [format].concat(Array.prototype.slice.call(arguments, 1)));\n },\n toString: kendo.toString,\n parseDate: kendo.parseDate\n });\n services.TemplateService.register({ compile: kendo.template });\n dataviz.Point2D = dataviz.Point;\n dataviz.Box2D = dataviz.Box;\n dataviz.mwDelta = function (e) {\n return dataviz.mousewheelDelta(e.originalEvent);\n };\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.core', [\n 'dataviz/core/kendo-core',\n 'dataviz/core/core'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.core',\n name: 'Core',\n description: 'The DataViz core functions',\n category: 'dataviz',\n depends: [\n 'core',\n 'drawing'\n ],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/chart-base-theme', ['kendo.dataviz.core'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var BAR_GAP = 1.5;\n var BAR_SPACING = 0.4;\n var BLACK = '#000';\n var SANS = 'Arial, Helvetica, sans-serif';\n var SANS11 = '11px ' + SANS;\n var SANS12 = '12px ' + SANS;\n var SANS16 = '16px ' + SANS;\n var TRANSPARENT = 'transparent';\n var WHITE = '#fff';\n var notes = function () {\n return {\n icon: { border: { width: 1 } },\n label: {\n font: SANS12,\n padding: 3\n },\n line: {\n length: 10,\n width: 2\n },\n visible: true\n };\n };\n var axisDefaults = function () {\n return {\n labels: { font: SANS12 },\n notes: notes(),\n title: {\n font: SANS16,\n margin: 5\n }\n };\n };\n var areaSeries = function () {\n return {\n highlight: { markers: { border: {} } },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n };\n };\n var rangeAreaSeries = function () {\n return {\n highlight: { markers: { border: {} } },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n };\n };\n var barSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var boxPlotSeries = function () {\n return {\n outliersField: '',\n meanField: '',\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n whiskers: { width: 3 },\n mean: { width: 2 },\n median: { width: 2 }\n },\n mean: { width: 2 },\n median: { width: 2 },\n spacing: 0.3,\n whiskers: { width: 2 }\n };\n };\n var bubbleSeries = function () {\n return {\n border: { width: 0 },\n labels: { background: TRANSPARENT },\n opacity: 0.6\n };\n };\n var bulletSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING,\n target: { color: '#ff0000' }\n };\n };\n var candlestickSeries = function () {\n return {\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n line: { width: 2 }\n },\n line: {\n color: BLACK,\n width: 1\n },\n spacing: 0.3\n };\n };\n var columnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var donutSeries = function () {\n return { margin: 1 };\n };\n var lineSeries = function () {\n return { width: 2 };\n };\n var ohlcSeries = function () {\n return {\n gap: 1,\n highlight: {\n line: {\n opacity: 1,\n width: 3\n }\n },\n line: { width: 1 },\n spacing: 0.3\n };\n };\n var radarAreaSeries = function () {\n return {\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.5\n };\n };\n var radarLineSeries = function () {\n return {\n markers: { visible: false },\n width: 2\n };\n };\n var rangeBarSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var rangeColumnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var scatterLineSeries = function () {\n return { width: 1 };\n };\n var waterfallSeries = function () {\n return {\n gap: 0.5,\n line: {\n color: BLACK,\n width: 1\n },\n spacing: BAR_SPACING\n };\n };\n var pieSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var funnelSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var seriesDefaults = function (options) {\n return {\n visible: true,\n labels: { font: SANS11 },\n overlay: options.gradients ? {} : { gradient: 'none' },\n area: areaSeries(),\n rangeArea: rangeAreaSeries(),\n verticalRangeArea: rangeAreaSeries(),\n bar: barSeries(),\n boxPlot: boxPlotSeries(),\n bubble: bubbleSeries(),\n bullet: bulletSeries(),\n candlestick: candlestickSeries(),\n column: columnSeries(),\n pie: pieSeries(),\n donut: donutSeries(),\n funnel: funnelSeries(),\n horizontalWaterfall: waterfallSeries(),\n line: lineSeries(),\n notes: notes(),\n ohlc: ohlcSeries(),\n radarArea: radarAreaSeries(),\n radarLine: radarLineSeries(),\n polarArea: radarAreaSeries(),\n polarLine: radarLineSeries(),\n rangeBar: rangeBarSeries(),\n rangeColumn: rangeColumnSeries(),\n scatterLine: scatterLineSeries(),\n verticalArea: areaSeries(),\n verticalBoxPlot: boxPlotSeries(),\n verticalBullet: bulletSeries(),\n verticalLine: lineSeries(),\n waterfall: waterfallSeries()\n };\n };\n var title = function () {\n return { font: SANS16 };\n };\n var legend = function () {\n return { labels: { font: SANS12 } };\n };\n var baseTheme = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n axisDefaults: axisDefaults(),\n categoryAxis: { majorGridLines: { visible: true } },\n navigator: {\n pane: {\n height: 90,\n margin: { top: 10 }\n }\n },\n seriesDefaults: seriesDefaults(options),\n title: title(),\n legend: legend()\n };\n };\n kendo.deepExtend(kendo.dataviz, { chartBaseTheme: baseTheme });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/auto-theme', ['kendo.dataviz.core'], f);\n}(function () {\n var cache;\n function autoTheme(force) {\n if (!force && cache) {\n return cache;\n }\n var theme = { chart: kendo.dataviz.chartBaseTheme() };\n var hook = $('
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ').appendTo(document.body);\n function mapColor(key, varName) {\n set(key, queryStyle(varName, 'backgroundColor'));\n }\n function queryStyle(varName, prop) {\n return hook.find('.k-var--' + varName).css(prop);\n }\n function set(path, value) {\n var store = theme;\n var parts = path.split('.');\n var key = parts.shift();\n while (parts.length > 0) {\n store = store[key] = store[key] || {};\n key = parts.shift();\n }\n store[key] = value;\n }\n (function setColors() {\n mapColor('chart.axisDefaults.crosshair.color', 'chart-crosshair-background');\n mapColor('chart.axisDefaults.labels.color', 'normal-text-color');\n mapColor('chart.axisDefaults.line.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.majorGridLines.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.minorGridLines.color', 'chart-minor-lines');\n mapColor('chart.axisDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.axisDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.axisDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.axisDefaults.title.color', 'normal-text-color');\n mapColor('chart.chartArea.background', 'background');\n mapColor('chart.legend.inactiveItems.labels.color', 'chart-inactive');\n mapColor('chart.legend.inactiveItems.markers.color', 'chart-inactive');\n mapColor('chart.legend.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.boxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.boxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.bullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.candlestick.downColor', 'normal-text-color');\n mapColor('chart.seriesDefaults.candlestick.line.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.errorBars.color', 'chart-error-bars-background');\n mapColor('chart.seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.icon.border.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.labels.background', 'background');\n mapColor('chart.seriesDefaults.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.seriesDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.seriesDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.verticalBullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.waterfall.line.color', 'chart-major-lines');\n mapColor('chart.title.color', 'normal-text-color');\n set('chart.seriesDefaults.labels.opacity', queryStyle('chart-area-opacity', 'opacity'));\n mapColor('diagram.shapeDefaults.fill.color', 'accent');\n mapColor('diagram.shapeDefaults.content.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.fill.color', 'normal-text-color');\n mapColor('diagram.shapeDefaults.connectorDefaults.stroke.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.fill.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.fill.color', 'normal-background');\n mapColor('diagram.editable.resize.handles.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.hover.fill.color', 'normal-text-color');\n mapColor('diagram.selectable.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.content.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.handles.fill.color', 'accent-contrast');\n mapColor('diagram.connectionDefaults.selection.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.stroke.color', 'normal-text-color');\n }());\n (function setFonts() {\n function font(varName) {\n return queryStyle(varName, 'fontSize') + ' ' + queryStyle(varName, 'fontFamily');\n }\n var defaultFont = font('chart-font');\n var titleFont = font('chart-title-font');\n var labelFont = font('chart-label-font');\n set('chart.axisDefaults.labels.font', labelFont);\n set('chart.axisDefaults.notes.label.font', defaultFont);\n set('chart.axisDefaults.title.font', defaultFont);\n set('chart.legend.labels.font', defaultFont);\n set('chart.seriesDefaults.labels.font', labelFont);\n set('chart.seriesDefaults.notes.label.font', defaultFont);\n set('chart.title.font', titleFont);\n }());\n (function setSeriesColors() {\n function letterPos(letter) {\n return letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);\n }\n function seriesPos(name) {\n return letterPos(name.match(/series-([a-z])$/)[1]);\n }\n var series = $('.k-var--series div').toArray();\n var seriesColors = series.reduce(function (arr, el) {\n var pos = seriesPos(el.className);\n arr[pos] = $(el).css('backgroundColor');\n return arr;\n }, []);\n set('chart.seriesColors', seriesColors);\n }());\n hook.remove();\n cache = theme;\n return theme;\n }\n kendo.dataviz.autoTheme = autoTheme;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/themes', ['dataviz/themes/chart-base-theme'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, ui = kendo.dataviz.ui, deepExtend = kendo.deepExtend;\n var BLACK = '#000', SANS = 'Arial,Helvetica,sans-serif', SANS12 = '12px ' + SANS, WHITE = '#fff';\n var chartBaseTheme = kendo.dataviz.chartBaseTheme({ gradients: true });\n var gaugeBaseTheme = { scale: { labels: { font: SANS12 } } };\n var diagramBaseTheme = {\n shapeDefaults: {\n hover: { opacity: 0.2 },\n stroke: { width: 0 }\n },\n editable: {\n resize: {\n handles: {\n width: 7,\n height: 7\n }\n }\n },\n selectable: {\n stroke: {\n width: 1,\n dashType: 'dot'\n }\n },\n connectionDefaults: {\n stroke: { width: 2 },\n selection: {\n handles: {\n width: 8,\n height: 8\n }\n },\n editable: {\n tools: [\n 'edit',\n 'delete'\n ]\n }\n }\n };\n var themes = ui.themes, registerTheme = ui.registerTheme = function (themeName, options) {\n var result = {};\n result.chart = deepExtend({}, chartBaseTheme, options.chart);\n result.gauge = deepExtend({}, gaugeBaseTheme, options.gauge);\n result.diagram = deepExtend({}, diagramBaseTheme, options.diagram);\n result.treeMap = deepExtend({}, options.treeMap);\n var defaults = result.chart.seriesDefaults;\n defaults.verticalLine = deepExtend({}, defaults.line);\n defaults.verticalArea = deepExtend({}, defaults.area);\n defaults.rangeArea = deepExtend({}, defaults.area);\n defaults.verticalRangeArea = deepExtend({}, defaults.rangeArea);\n defaults.verticalBoxPlot = deepExtend({}, defaults.boxPlot);\n defaults.polarArea = deepExtend({}, defaults.radarArea);\n defaults.polarLine = deepExtend({}, defaults.radarLine);\n themes[themeName] = result;\n };\n registerTheme('black', {\n chart: {\n title: { color: WHITE },\n legend: {\n labels: { color: WHITE },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: { color: WHITE },\n errorBars: { color: WHITE },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#3d3d3d' } },\n scatter: { markers: { background: '#3d3d3d' } },\n scatterLine: { markers: { background: '#3d3d3d' } },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n candlestick: {\n downColor: '#555',\n line: { color: WHITE },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n ohlc: { line: { color: WHITE } }\n },\n chartArea: { background: '#3d3d3d' },\n seriesColors: [\n '#0081da',\n '#3aafff',\n '#99c900',\n '#ffeb3d',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: WHITE },\n majorGridLines: { color: '#545454' },\n minorGridLines: { color: '#454545' },\n title: { color: WHITE },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0070e4' },\n scale: {\n rangePlaceholderColor: '#1d1d1d',\n labels: { color: WHITE },\n minorTicks: { color: WHITE },\n majorTicks: { color: WHITE },\n line: { color: WHITE }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#0066cc' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#384049' },\n hover: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0081da',\n '#314b5c'\n ],\n [\n '#3aafff',\n '#3c5464'\n ],\n [\n '#99c900',\n '#4f5931'\n ],\n [\n '#ffeb3d',\n '#64603d'\n ],\n [\n '#b20753',\n '#543241'\n ],\n [\n '#ff4195',\n '#643e4f'\n ]\n ]\n }\n });\n registerTheme('blueopal', {\n chart: {\n title: { color: '#293135' },\n legend: {\n labels: { color: '#293135' },\n inactiveItems: {\n labels: { color: '#27A5BA' },\n markers: { color: '#27A5BA' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#293135' },\n candlestick: {\n downColor: '#c4d0d5',\n line: { color: '#9aabb2' }\n },\n waterfall: { line: { color: '#9aabb2' } },\n horizontalWaterfall: { line: { color: '#9aabb2' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n },\n seriesColors: [\n '#0069a5',\n '#0098ee',\n '#7bd2f6',\n '#ffb800',\n '#ff8517',\n '#e34a00'\n ],\n axisDefaults: {\n line: { color: '#9aabb2' },\n labels: { color: '#293135' },\n majorGridLines: { color: '#c4d0d5' },\n minorGridLines: { color: '#edf1f2' },\n title: { color: '#293135' },\n crosshair: { color: '#9aabb2' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n }\n },\n gauge: {\n pointer: { color: '#005c83' },\n scale: {\n rangePlaceholderColor: '#daecf4',\n labels: { color: '#293135' },\n minorTicks: { color: '#293135' },\n majorTicks: { color: '#293135' },\n line: { color: '#293135' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#7ec6e3' },\n connectorDefaults: {\n fill: { color: '#003f59' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' }\n }\n },\n content: { color: '#293135' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' },\n hover: {\n fill: { color: '#003f59' },\n stroke: { color: '#003f59' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#003f59' },\n fill: { color: '#003f59' }\n }\n }\n },\n selectable: { stroke: { color: '#003f59' } },\n connectionDefaults: {\n stroke: { color: '#003f59' },\n content: { color: '#293135' },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0069a5',\n '#bad7e7'\n ],\n [\n '#0098ee',\n '#b9e0f5'\n ],\n [\n '#7bd2f6',\n '#ceeaf6'\n ],\n [\n '#ffb800',\n '#e6e3c4'\n ],\n [\n '#ff8517',\n '#e4d8c8'\n ],\n [\n '#e34a00',\n '#ddccc2'\n ]\n ]\n }\n });\n registerTheme('highcontrast', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#66465B' },\n markers: { color: '#66465B' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n },\n pie: { overlay: { gradient: 'sharpGlass' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#2c232b' } },\n scatter: { markers: { background: '#2c232b' } },\n scatterLine: { markers: { background: '#2c232b' } },\n area: { opacity: 0.5 },\n waterfall: { line: { color: '#ffffff' } },\n horizontalWaterfall: { line: { color: '#ffffff' } },\n candlestick: {\n downColor: '#664e62',\n line: { color: '#ffffff' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#ffffff',\n opacity: 1\n }\n }\n },\n ohlc: { line: { color: '#ffffff' } }\n },\n chartArea: { background: '#2c232b' },\n seriesColors: [\n '#a7008f',\n '#ffb800',\n '#3aafff',\n '#99c900',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#ffffff' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#664e62' },\n minorGridLines: { color: '#4f394b' },\n title: { color: '#ffffff' },\n crosshair: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n }\n }\n },\n gauge: {\n pointer: { color: '#a7008f' },\n scale: {\n rangePlaceholderColor: '#2c232b',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#2c232b' },\n majorTicks: { color: '#664e62' },\n line: { color: '#ffffff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#a7018f' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#2c232b' },\n hover: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#a7008f',\n '#451c3f'\n ],\n [\n '#ffb800',\n '#564122'\n ],\n [\n '#3aafff',\n '#2f3f55'\n ],\n [\n '#99c900',\n '#424422'\n ],\n [\n '#b20753',\n '#471d33'\n ],\n [\n '#ff4195',\n '#562940'\n ]\n ]\n }\n });\n registerTheme('default', {\n chart: {\n title: { color: '#8e8e8e' },\n legend: {\n labels: { color: '#232323' },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#232323' },\n candlestick: {\n downColor: '#dedede',\n line: { color: '#8d8d8d' }\n },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n },\n seriesColors: [\n '#ff6800',\n '#a0a700',\n '#ff8d00',\n '#678900',\n '#ffb53c',\n '#396000'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: '#232323' },\n minorGridLines: { color: '#f0f0f0' },\n majorGridLines: { color: '#dfdfdf' },\n title: { color: '#232323' },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#ea7001' },\n scale: {\n rangePlaceholderColor: '#dedede',\n labels: { color: '#2e2e2e' },\n minorTicks: { color: '#2e2e2e' },\n majorTicks: { color: '#2e2e2e' },\n line: { color: '#2e2e2e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#e15613' },\n connectorDefaults: {\n fill: { color: '#282828' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#2e2e2e' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' },\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#282828' },\n fill: { color: '#282828' }\n }\n }\n },\n selectable: { stroke: { color: '#a7018f' } },\n connectionDefaults: {\n stroke: { color: '#282828' },\n content: { color: '#2e2e2e' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ff6800',\n '#edcfba'\n ],\n [\n '#a0a700',\n '#dadcba'\n ],\n [\n '#ff8d00',\n '#edd7ba'\n ],\n [\n '#678900',\n '#cfd6ba'\n ],\n [\n '#ffb53c',\n '#eddfc6'\n ],\n [\n '#396000',\n '#c6ceba'\n ]\n ]\n }\n });\n registerTheme('silver', {\n chart: {\n title: { color: '#4e5968' },\n legend: {\n labels: { color: '#4e5968' },\n inactiveItems: {\n labels: { color: '#B1BCC8' },\n markers: { color: '#B1BCC8' }\n }\n },\n seriesDefaults: {\n labels: {\n color: '#293135',\n background: '#eaeaec',\n opacity: 0.5\n },\n errorBars: { color: '#4e5968' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n },\n line: { markers: { background: '#eaeaec' } },\n scatter: { markers: { background: '#eaeaec' } },\n scatterLine: { markers: { background: '#eaeaec' } },\n pie: { connectors: { color: '#A6B1C0' } },\n donut: { connectors: { color: '#A6B1C0' } },\n waterfall: { line: { color: '#a6b1c0' } },\n horizontalWaterfall: { line: { color: '#a6b1c0' } },\n candlestick: { downColor: '#a6afbe' }\n },\n chartArea: { background: '#eaeaec' },\n seriesColors: [\n '#007bc3',\n '#76b800',\n '#ffae00',\n '#ef4c00',\n '#a419b7',\n '#430B62'\n ],\n axisDefaults: {\n line: { color: '#a6b1c0' },\n labels: { color: '#4e5968' },\n majorGridLines: { color: '#dcdcdf' },\n minorGridLines: { color: '#eeeeef' },\n title: { color: '#4e5968' },\n crosshair: { color: '#a6b1c0' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0879c0' },\n scale: {\n rangePlaceholderColor: '#f3f3f4',\n labels: { color: '#515967' },\n minorTicks: { color: '#515967' },\n majorTicks: { color: '#515967' },\n line: { color: '#515967' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#1c82c2' },\n connectorDefaults: {\n fill: { color: '#515967' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#515967' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' },\n hover: {\n fill: { color: '#515967' },\n stroke: { color: '#515967' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#515967' },\n fill: { color: '#515967' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#515967' },\n content: { color: '#515967' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#007bc3',\n '#c2dbea'\n ],\n [\n '#76b800',\n '#dae7c3'\n ],\n [\n '#ffae00',\n '#f5e5c3'\n ],\n [\n '#ef4c00',\n '#f2d2c3'\n ],\n [\n '#a419b7',\n '#e3c7e8'\n ],\n [\n '#430b62',\n '#d0c5d7'\n ]\n ]\n }\n });\n registerTheme('metro', {\n chart: {\n title: { color: '#777777' },\n legend: {\n labels: { color: '#777777' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: BLACK },\n errorBars: { color: '#777777' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n waterfall: { line: { color: '#c7c7c7' } },\n horizontalWaterfall: { line: { color: '#c7c7c7' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#8ebc00',\n '#309b46',\n '#25a0da',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#16aba9',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#c7c7c7' },\n labels: { color: '#777777' },\n minorGridLines: { color: '#c7c7c7' },\n majorGridLines: { color: '#c7c7c7' },\n title: { color: '#777777' },\n crosshair: { color: '#c7c7c7' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n }\n }\n },\n gauge: {\n pointer: { color: '#8ebc00' },\n scale: {\n rangePlaceholderColor: '#e6e6e6',\n labels: { color: '#777' },\n minorTicks: { color: '#777' },\n majorTicks: { color: '#777' },\n line: { color: '#777' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#8ebc00' },\n connectorDefaults: {\n fill: { color: BLACK },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: BLACK }\n }\n },\n content: { color: '#777' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#787878' },\n fill: { color: '#787878' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#787878' },\n content: { color: '#777' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#8ebc00',\n '#e8f2cc'\n ],\n [\n '#309b46',\n '#d6ebda'\n ],\n [\n '#25a0da',\n '#d3ecf8'\n ],\n [\n '#ff6900',\n '#ffe1cc'\n ],\n [\n '#e61e26',\n '#fad2d4'\n ],\n [\n '#d8e404',\n '#f7facd'\n ],\n [\n '#16aba9',\n '#d0eeee'\n ],\n [\n '#7e51a1',\n '#e5dcec'\n ],\n [\n '#313131',\n '#d6d6d6'\n ],\n [\n '#ed1691',\n '#fbd0e9'\n ]\n ]\n }\n });\n registerTheme('metroblack', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#797979' },\n markers: { color: '#797979' }\n }\n },\n seriesDefaults: {\n border: { _brightness: 1 },\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n },\n line: { markers: { background: '#0e0e0e' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#0e0e0e' } },\n scatterLine: { markers: { background: '#0e0e0e' } },\n candlestick: {\n downColor: '#828282',\n line: { color: '#ffffff' }\n },\n waterfall: { line: { color: '#cecece' } },\n horizontalWaterfall: { line: { color: '#cecece' } },\n overlay: { gradient: 'none' }\n },\n chartArea: { background: '#0e0e0e' },\n seriesColors: [\n '#00aba9',\n '#309b46',\n '#8ebc00',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#25a0da',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#cecece' },\n labels: { color: '#ffffff' },\n minorGridLines: { color: '#2d2d2d' },\n majorGridLines: { color: '#333333' },\n title: { color: '#ffffff' },\n crosshair: { color: '#cecece' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n }\n }\n },\n gauge: {\n pointer: { color: '#00aba9' },\n scale: {\n rangePlaceholderColor: '#2d2d2d',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#333333' },\n majorTicks: { color: '#cecece' },\n line: { color: '#cecece' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#00aba9' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#0e0e0e' },\n hover: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: '#787878' } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#00aba9',\n '#0b2d2d'\n ],\n [\n '#309b46',\n '#152a19'\n ],\n [\n '#8ebc00',\n '#28310b'\n ],\n [\n '#ff6900',\n '#3e200b'\n ],\n [\n '#e61e26',\n '#391113'\n ],\n [\n '#d8e404',\n '#36390c'\n ],\n [\n '#25a0da',\n '#132b37'\n ],\n [\n '#7e51a1',\n '#241b2b'\n ],\n [\n '#313131',\n '#151515'\n ],\n [\n '#ed1691',\n '#3b1028'\n ]\n ]\n }\n });\n registerTheme('moonlight', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#A1A7AB' },\n markers: { color: '#A1A7AB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#212a33' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#212a33' } },\n scatterLine: { markers: { background: '#212a33' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#757d87',\n line: { color: '#ea9d06' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#8c909e' } },\n horizontalWaterfall: { line: { color: '#8c909e' } },\n ohlc: { line: { color: '#ea9d06' } }\n },\n chartArea: { background: '#212a33' },\n seriesColors: [\n '#ffca08',\n '#ff710f',\n '#ed2e24',\n '#ff9f03',\n '#e13c02',\n '#a00201'\n ],\n axisDefaults: {\n line: { color: '#8c909e' },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#3e424d' },\n minorGridLines: { color: '#2f3640' },\n title: { color: '#ffffff' },\n crosshair: { color: '#8c909e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#f4af03' },\n scale: {\n rangePlaceholderColor: '#2f3640',\n labels: { color: WHITE },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n line: { color: '#8c909e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#f3ae03' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#414550' },\n hover: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ffca08',\n '#4e4b2b'\n ],\n [\n '#ff710f',\n '#4e392d'\n ],\n [\n '#ed2e24',\n '#4b2c31'\n ],\n [\n '#ff9f03',\n '#4e422a'\n ],\n [\n '#e13c02',\n '#482e2a'\n ],\n [\n '#a00201',\n '#3b232a'\n ]\n ]\n }\n });\n registerTheme('uniform', {\n chart: {\n title: { color: '#686868' },\n legend: {\n labels: { color: '#686868' },\n inactiveItems: {\n labels: { color: '#B6B6B6' },\n markers: { color: '#B6B6B6' }\n }\n },\n seriesDefaults: {\n labels: { color: '#686868' },\n errorBars: { color: '#686868' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#cccccc',\n line: { color: '#cccccc' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#cccccc',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#9e9e9e' } },\n horizontalWaterfall: { line: { color: '#9e9e9e' } },\n ohlc: { line: { color: '#cccccc' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#527aa3',\n '#6f91b3',\n '#8ca7c2',\n '#a8bdd1',\n '#c5d3e0',\n '#e2e9f0'\n ],\n axisDefaults: {\n line: { color: '#9e9e9e' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n labels: { color: '#686868' },\n majorGridLines: { color: '#dadada' },\n minorGridLines: { color: '#e7e7e7' },\n title: { color: '#686868' },\n crosshair: { color: '#9e9e9e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#527aa3' },\n scale: {\n rangePlaceholderColor: '#e7e7e7',\n labels: { color: '#686868' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n line: { color: '#9e9e9e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#d1d1d1' },\n connectorDefaults: {\n fill: { color: '#686868' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n },\n content: { color: '#686868' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' },\n hover: {\n fill: { color: '#686868' },\n stroke: { color: '#686868' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#686868' },\n fill: { color: '#686868' }\n }\n }\n },\n selectable: { stroke: { color: '#686868' } },\n connectionDefaults: {\n stroke: { color: '#686868' },\n content: { color: '#686868' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#527aa3',\n '#d0d8e1'\n ],\n [\n '#6f91b3',\n '#d6dde4'\n ],\n [\n '#8ca7c2',\n '#dce1e7'\n ],\n [\n '#a8bdd1',\n '#e2e6ea'\n ],\n [\n '#c5d3e0',\n '#e7eaed'\n ],\n [\n '#e2e9f0',\n '#edeff0'\n ]\n ]\n }\n });\n registerTheme('bootstrap', {\n chart: {\n title: { color: '#333333' },\n legend: {\n labels: { color: '#333333' },\n inactiveItems: {\n labels: { color: '#999999' },\n markers: { color: '#9A9A9A' }\n }\n },\n seriesDefaults: {\n labels: { color: '#333333' },\n overlay: { gradient: 'none' },\n errorBars: { color: '#343434' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#333333' },\n line: { color: '#000000' }\n },\n pie: { overlay: { gradient: 'none' } },\n donut: { overlay: { gradient: 'none' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.8 },\n candlestick: {\n downColor: '#d0d0d0',\n line: { color: '#333333' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#b8b8b8',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#cccccc' } },\n horizontalWaterfall: { line: { color: '#cccccc' } },\n ohlc: { line: { color: '#333333' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#428bca',\n '#5bc0de',\n '#5cb85c',\n '#f2b661',\n '#e67d4a',\n '#da3b36'\n ],\n axisDefaults: {\n line: { color: '#cccccc' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n labels: { color: '#333333' },\n majorGridLines: { color: '#cccccc' },\n minorGridLines: { color: '#ebebeb' },\n title: { color: '#333333' },\n crosshair: { color: '#000000' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#ffffff' },\n line: { color: '#000000' }\n }\n }\n },\n gauge: {\n pointer: { color: '#428bca' },\n scale: {\n rangePlaceholderColor: '#cccccc',\n labels: { color: '#333333' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n line: { color: '#cccccc' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#428bca' },\n connectorDefaults: {\n fill: { color: '#333333' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n }\n },\n content: { color: '#333333' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' },\n hover: {\n fill: { color: '#333333' },\n stroke: { color: '#333333' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#333333' },\n fill: { color: '#333333' }\n }\n }\n },\n selectable: { stroke: { color: '#333333' } },\n connectionDefaults: {\n stroke: { color: '#c4c4c4' },\n content: { color: '#333333' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n },\n stroke: { color: '#333333' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#428bca',\n '#d1e0ec'\n ],\n [\n '#5bc0de',\n '#d6eaf0'\n ],\n [\n '#5cb85c',\n '#d6e9d6'\n ],\n [\n '#5cb85c',\n '#f4e8d7'\n ],\n [\n '#e67d4a',\n '#f2ddd3'\n ],\n [\n '#da3b36',\n '#f0d0cf'\n ]\n ]\n }\n });\n registerTheme('flat', {\n chart: {\n title: { color: '#4c5356' },\n legend: {\n labels: { color: '#4c5356' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#4c5356' },\n errorBars: { color: '#4c5356' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#cdcdcd' } },\n horizontalWaterfall: { line: { color: '#cdcdcd' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#10c4b2',\n '#ff7663',\n '#ffb74f',\n '#a2df53',\n '#1c9ec4',\n '#ff63a5',\n '#1cc47b'\n ],\n axisDefaults: {\n line: { color: '#cdcdcd' },\n labels: { color: '#4c5356' },\n minorGridLines: { color: '#cdcdcd' },\n majorGridLines: { color: '#cdcdcd' },\n title: { color: '#4c5356' },\n crosshair: { color: '#cdcdcd' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n }\n }\n },\n gauge: {\n pointer: { color: '#10c4b2' },\n scale: {\n rangePlaceholderColor: '#cdcdcd',\n labels: { color: '#4c5356' },\n minorTicks: { color: '#4c5356' },\n majorTicks: { color: '#4c5356' },\n line: { color: '#4c5356' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#10c4b2' },\n connectorDefaults: {\n fill: { color: '#363940' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n }\n },\n content: { color: '#4c5356' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' },\n hover: {\n fill: { color: '#363940' },\n stroke: { color: '#363940' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#363940' },\n fill: { color: '#363940' }\n }\n }\n },\n selectable: { stroke: { color: '#363940' } },\n connectionDefaults: {\n stroke: { color: '#cdcdcd' },\n content: { color: '#4c5356' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n },\n stroke: { color: '#363940' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#10c4b2',\n '#cff3f0'\n ],\n [\n '#ff7663',\n '#ffe4e0'\n ],\n [\n '#ffb74f',\n '#fff1dc'\n ],\n [\n '#a2df53',\n '#ecf9dd'\n ],\n [\n '#1c9ec4',\n '#d2ecf3'\n ],\n [\n '#ff63a5',\n '#ffe0ed'\n ],\n [\n '#1cc47b',\n '#d2f3e5'\n ]\n ]\n }\n });\n registerTheme('material', {\n chart: {\n title: { color: '#444444' },\n legend: {\n labels: { color: '#444444' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#444444' },\n errorBars: { color: '#444444' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#e5e5e5' } },\n horizontalWaterfall: { line: { color: '#e5e5e5' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#e5e5e5' },\n labels: { color: '#444444' },\n minorGridLines: { color: '#e5e5e5' },\n majorGridLines: { color: '#e5e5e5' },\n title: { color: '#444444' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#e5e5e5',\n labels: { color: '#444444' },\n minorTicks: { color: '#444444' },\n majorTicks: { color: '#444444' },\n line: { color: '#444444' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#444444' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' },\n hover: {\n fill: { color: '#444444' },\n stroke: { color: '#444444' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#444444' },\n fill: { color: '#444444' }\n }\n }\n },\n selectable: { stroke: { color: '#444444' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#444444' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' }\n },\n stroke: { color: '#444444' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n registerTheme('materialblack', {\n chart: {\n title: { color: '#fff' },\n legend: {\n labels: { color: '#fff' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#fff' },\n errorBars: { color: '#fff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#fff' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#4d4d4d' } },\n horizontalWaterfall: { line: { color: '#4d4d4d' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n chartArea: { background: '#1c1c1c' },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#4d4d4d' },\n labels: { color: '#fff' },\n minorGridLines: { color: '#4d4d4d' },\n majorGridLines: { color: '#4d4d4d' },\n title: { color: '#fff' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4d4d4d' }\n },\n label: { color: '#fff' },\n line: { color: '#4d4d4d' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#4d4d4d',\n labels: { color: '#fff' },\n minorTicks: { color: '#fff' },\n majorTicks: { color: '#fff' },\n line: { color: '#fff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#fff' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' },\n hover: {\n fill: { color: '#fff' },\n stroke: { color: '#fff' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#fff' },\n fill: { color: '#fff' }\n }\n }\n },\n selectable: { stroke: { color: '#fff' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#fff' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' }\n },\n stroke: { color: '#fff' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n (function () {\n var TEXT = '#333333';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#dddddd';\n var SERIES = [\n '#008fd3',\n '#99d101',\n '#f39b02',\n '#f05662',\n '#c03c53',\n '#acacac'\n ];\n var SERIES_LIGHT = [\n '#cbe8f5',\n '#eaf5cb',\n '#fceacc',\n '#fbdcdf',\n '#f2d7dc',\n '#eeeeee'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('fiori', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#4e4e4e';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#e5e5e5';\n var SERIES = [\n '#0072c6',\n '#5db2ff',\n '#008a17',\n '#82ba00',\n '#ff8f32',\n '#ac193d'\n ];\n var SERIES_LIGHT = [\n '#cbe2f3',\n '#deeffe',\n '#cbe7d0',\n '#e5f0cb',\n '#fee8d5',\n '#eed0d7'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#00b0ff',\n border: { color: '#00b0ff' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('office365', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#32364c';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#dfe0e1';\n var AXIS_MINOR = '#dfe0e1';\n var SERIES = [\n '#ff4350',\n '#ff9ea5',\n '#00acc1',\n '#80deea',\n '#ffbf46',\n '#ffd78c'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('nova', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: TEXT },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#656565';\n var AXIS = 'rgba(0, 0, 0, .04)';\n var SERIES = [\n '#ff6358',\n '#ffd246',\n '#78d237',\n '#28b4c8',\n '#2d73f5',\n '#aa46be'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n registerTheme('default-v2', {\n chart: {},\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n themes.sass = themes['default-v2'];\n }());\n (function () {\n var TEXT = '#292b2c';\n var AXIS = 'rgba(0, 0, 0, .04)';\n var SERIES = [\n '#0275d8',\n '#5bc0de',\n '#5cb85c',\n '#f0ad4e',\n '#e67d4a',\n '#d9534f'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n registerTheme('bootstrap-v4', {\n chart: {},\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n function fuse(arr1, arr2) {\n return $.map(arr1, function (item, index) {\n return [[\n item,\n arr2[index]\n ]];\n });\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.themes', [\n 'kendo.dataviz.core',\n 'dataviz/themes/chart-base-theme',\n 'dataviz/themes/auto-theme',\n 'dataviz/themes/themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.themes',\n name: 'Themes',\n description: 'Built-in themes for the DataViz widgets',\n category: 'dataviz',\n depends: ['dataviz.core'],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/kendo-chart', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var Class = dataviz.Class;\n var isNumber = dataviz.isNumber;\n var datavizConstants = dataviz.constants;\n var MAX_VALUE = datavizConstants.MAX_VALUE;\n var MIN_VALUE = datavizConstants.MIN_VALUE;\n var VALUE = datavizConstants.VALUE;\n var CENTER = datavizConstants.CENTER;\n var TOP = datavizConstants.TOP;\n var BOTTOM = datavizConstants.BOTTOM;\n var LEFT = datavizConstants.LEFT;\n var WHITE = datavizConstants.WHITE;\n var CIRCLE = datavizConstants.CIRCLE;\n var X = datavizConstants.X;\n var Y = datavizConstants.Y;\n var RIGHT = datavizConstants.RIGHT;\n var BLACK = datavizConstants.BLACK;\n var DATE = datavizConstants.DATE;\n var DEFAULT_PRECISION = datavizConstants.DEFAULT_PRECISION;\n var ARC = datavizConstants.ARC;\n var defined = dataviz.defined;\n var getter = dataviz.getter;\n var isArray = dataviz.isArray;\n var ChartElement = dataviz.ChartElement;\n var Point = dataviz.Point;\n var Box = dataviz.Box;\n var alignPathToPixel = dataviz.alignPathToPixel;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var inArray = dataviz.inArray;\n var isFunction = dataviz.isFunction;\n var valueOrDefault = dataviz.valueOrDefault;\n var isObject = dataviz.isObject;\n var deepExtend = dataviz.deepExtend;\n var last = dataviz.last;\n var eventElement = dataviz.eventElement;\n var getTemplate = dataviz.getTemplate;\n var TextBox = dataviz.TextBox;\n var ShapeElement = dataviz.ShapeElement;\n var getSpacing = dataviz.getSpacing;\n var CurveProcessor = dataviz.CurveProcessor;\n var append = dataviz.append;\n var isString = dataviz.isString;\n var parseDate = dataviz.parseDate;\n var styleValue = dataviz.styleValue;\n var CategoryAxis = dataviz.CategoryAxis;\n var BoxElement = dataviz.BoxElement;\n var round = dataviz.round;\n var grep = dataviz.grep;\n var DateCategoryAxis = dataviz.DateCategoryAxis;\n var elementStyles = dataviz.elementStyles;\n var hasClasses = dataviz.hasClasses;\n var bindEvents = dataviz.bindEvents;\n var services = dataviz.services;\n var unbindEvents = dataviz.unbindEvents;\n var limitValue = dataviz.limitValue;\n var support = kendo.support;\n var drawing = kendo.drawing;\n var Path = drawing.Path;\n var Animation = drawing.Animation;\n var AnimationFactory = drawing.AnimationFactory;\n var Group = drawing.Group;\n var Color = kendo.Color;\n var geometry = kendo.geometry;\n var GeometryPoint = geometry.Point;\n var transform = geometry.transform;\n var ChartAxis = Class.extend({\n init: function (axis) {\n this._axis = axis;\n this.options = axis.options;\n },\n value: function (point) {\n var axis = this._axis;\n var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n return value;\n },\n slot: function (from, to, limit) {\n if (limit === void 0) {\n limit = true;\n }\n return this._axis.slot(from, to, limit);\n },\n range: function () {\n return this._axis.range();\n },\n valueRange: function () {\n return this._axis.valueRange();\n }\n });\n var ChartPane = kendo.Class.extend({\n init: function (pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n }\n });\n var ChartPlotArea = Class.extend({\n init: function (plotArea) {\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n });\n function countNumbers(values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n return count;\n }\n var Aggregates = {\n min: function (values) {\n var length = values.length;\n var min = MAX_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n min = Math.min(min, value);\n }\n }\n return min === MAX_VALUE ? values[0] : min;\n },\n max: function (values) {\n var length = values.length;\n var max = MIN_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n max = Math.max(max, value);\n }\n }\n return max === MIN_VALUE ? values[0] : max;\n },\n sum: function (values) {\n var length = values.length;\n var sum = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n return sum;\n },\n sumOrNull: function (values) {\n var result = null;\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n return result;\n },\n count: function (values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n return count;\n },\n avg: function (values) {\n var count = countNumbers(values);\n var result = values[0];\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n return result;\n },\n first: function (values) {\n var length = values.length;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n return value;\n }\n }\n return values[0];\n }\n };\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n var SeriesBinder = Class.extend({\n init: function () {\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n },\n register: function (seriesTypes, valueFields, otherFields) {\n var this$1 = this;\n if (valueFields === void 0) {\n valueFields = [VALUE];\n }\n if (otherFields === void 0) {\n otherFields = {};\n }\n for (var i = 0; i < seriesTypes.length; i++) {\n var type = seriesTypes[i];\n this$1._valueFields[type] = valueFields;\n this$1._otherFields[type] = otherFields;\n this$1._nullValue[type] = this$1._makeValue(valueFields, null);\n this$1._undefinedValue[type] = this$1._makeValue(valueFields, undefined);\n }\n },\n canonicalFields: function (series) {\n return this.valueFields(series).concat(this.otherFields(series));\n },\n valueFields: function (series) {\n return this._valueFields[series.type] || [VALUE];\n },\n otherFields: function (series) {\n return this._otherFields[series.type] || [VALUE];\n },\n bindPoint: function (series, pointIx, item) {\n var data = series.data;\n var pointData = defined(item) ? item : data[pointIx];\n var result = { valueFields: { value: pointData } };\n var valueFields = this.valueFields(series);\n var otherFields = this._otherFields[series.type];\n var fields, value;\n if (pointData === null) {\n value = this._nullValue[series.type];\n } else if (!defined(pointData)) {\n value = this._undefinedValue[series.type];\n } else if (Array.isArray(pointData)) {\n var fieldData = pointData.slice(valueFields.length);\n value = this._bindFromArray(pointData, valueFields);\n fields = this._bindFromArray(fieldData, otherFields);\n } else if (typeof pointData === 'object') {\n var srcValueFields = this.sourceFields(series, valueFields);\n var srcPointFields = this.sourceFields(series, otherFields);\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\n if (defined(value)) {\n if (valueFields.length === 1) {\n result.valueFields.value = value[valueFields[0]];\n } else {\n result.valueFields = value;\n }\n }\n result.fields = fields || {};\n return result;\n },\n _makeValue: function (fields, initialValue) {\n var value = {};\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n return value;\n },\n _bindFromArray: function (array, fields) {\n var value = {};\n if (fields) {\n var length = Math.min(fields.length, array.length);\n for (var i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n return value;\n },\n _bindFromObject: function (object, fields, srcFields) {\n if (srcFields === void 0) {\n srcFields = fields;\n }\n var value = {};\n if (fields) {\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n var srcFieldName = srcFields[i];\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n return value;\n },\n sourceFields: function (series, canonicalFields) {\n var sourceFields = [];\n if (canonicalFields) {\n var length = canonicalFields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = canonicalFields[i];\n var sourceFieldName = fieldName === VALUE ? 'field' : fieldName + 'Field';\n sourceFields.push(series[sourceFieldName] || fieldName);\n }\n }\n return sourceFields;\n }\n });\n SeriesBinder.current = new SeriesBinder();\n var STD_ERR = 'stderr';\n var STD_DEV = 'stddev';\n var percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\n var standardDeviationRegex = new RegExp('^' + STD_DEV + '(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$');\n var ErrorRangeCalculator = Class.extend({\n init: function (errorValue, series, field) {\n this.initGlobalRanges(errorValue, series, field);\n },\n initGlobalRanges: function (errorValue, series, field) {\n var data = series.data;\n var deviationMatch = standardDeviationRegex.exec(errorValue);\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n var average = this.getAverage(data);\n var deviation = this.getStandardDeviation(data, average, false);\n var multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n var errorRange = {\n low: average.value - deviation * multiple,\n high: average.value + deviation * multiple\n };\n this.globalRange = function () {\n return errorRange;\n };\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n this.valueGetter = this.createValueGetter(series, field);\n var standardError = this.getStandardError(data, this.getAverage(data));\n this.globalRange = function (value) {\n return {\n low: value - standardError,\n high: value + standardError\n };\n };\n }\n },\n createValueGetter: function (series, field) {\n var data = series.data;\n var binder = SeriesBinder.current;\n var valueFields = binder.valueFields(series);\n var item = defined(data[0]) ? data[0] : {};\n var valueGetter;\n if (isArray(item)) {\n var index = field ? valueFields.indexOf(field) : 0;\n valueGetter = getter('[' + index + ']');\n } else if (isNumber(item)) {\n valueGetter = getter();\n } else if (typeof item === datavizConstants.OBJECT) {\n var srcValueFields = binder.sourceFields(series, valueFields);\n valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n }\n return valueGetter;\n },\n getErrorRange: function (pointValue, errorValue) {\n var low, high, value;\n if (!defined(errorValue)) {\n return null;\n }\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\n if (isArray(errorValue)) {\n low = pointValue - errorValue[0];\n high = pointValue + errorValue[1];\n } else if (isNumber(value = parseFloat(errorValue))) {\n low = pointValue - value;\n high = pointValue + value;\n } else if (value = percentRegex.exec(errorValue)) {\n var percentValue = pointValue * (parseFloat(value[1]) / 100);\n low = pointValue - Math.abs(percentValue);\n high = pointValue + Math.abs(percentValue);\n } else {\n throw new Error('Invalid ErrorBar value: ' + errorValue);\n }\n return {\n low: low,\n high: high\n };\n },\n getStandardError: function (data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n },\n getStandardDeviation: function (data, average, isSample) {\n var this$1 = this;\n var length = data.length;\n var total = isSample ? average.count - 1 : average.count;\n var squareDifferenceSum = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n return Math.sqrt(squareDifferenceSum / total);\n },\n getAverage: function (data) {\n var this$1 = this;\n var length = data.length;\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n return {\n value: sum / count,\n count: count\n };\n }\n });\n var browser = support.browser || {};\n var INITIAL_ANIMATION_DURATION = 600;\n var FADEIN = 'fadeIn';\n var GLASS = 'glass';\n var BORDER_BRIGHTNESS = 0.8;\n var TOOLTIP_OFFSET = 5;\n var START_SCALE = browser.msie ? 0.001 : 0;\n var ERROR_LOW_FIELD = 'errorLow';\n var ERROR_HIGH_FIELD = 'errorHigh';\n var X_ERROR_LOW_FIELD = 'xErrorLow';\n var X_ERROR_HIGH_FIELD = 'xErrorHigh';\n var Y_ERROR_LOW_FIELD = 'yErrorLow';\n var Y_ERROR_HIGH_FIELD = 'yErrorHigh';\n var LINE_MARKER_SIZE = 8;\n var ZERO = 'zero';\n var INTERPOLATE = 'interpolate';\n var GAP = 'gap';\n var ABOVE = 'above';\n var BELOW = 'below';\n var SMOOTH = 'smooth';\n var STEP = 'step';\n var AREA = 'area';\n var BAR = 'bar';\n var BOX_PLOT = 'boxPlot';\n var BUBBLE = 'bubble';\n var BULLET = 'bullet';\n var CANDLESTICK = 'candlestick';\n var COLUMN = 'column';\n var DONUT = 'donut';\n var FUNNEL = 'funnel';\n var HORIZONTAL_WATERFALL = 'horizontalWaterfall';\n var LINE = 'line';\n var OHLC = 'ohlc';\n var PIE = 'pie';\n var POLAR_AREA = 'polarArea';\n var POLAR_LINE = 'polarLine';\n var POLAR_SCATTER = 'polarScatter';\n var RADAR_AREA = 'radarArea';\n var RADAR_COLUMN = 'radarColumn';\n var RADAR_LINE = 'radarLine';\n var RANGE_AREA = 'rangeArea';\n var RANGE_BAR = 'rangeBar';\n var RANGE_COLUMN = 'rangeColumn';\n var SCATTER = 'scatter';\n var SCATTER_LINE = 'scatterLine';\n var VERTICAL_AREA = 'verticalArea';\n var VERTICAL_BOX_PLOT = 'verticalBoxPlot';\n var VERTICAL_BULLET = 'verticalBullet';\n var VERTICAL_LINE = 'verticalLine';\n var VERTICAL_RANGE_AREA = 'verticalRangeArea';\n var WATERFALL = 'waterfall';\n var EQUALLY_SPACED_SERIES = [\n BAR,\n COLUMN,\n OHLC,\n CANDLESTICK,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n BULLET,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ];\n var LEGEND_ITEM_CLICK = 'legendItemClick';\n var LEGEND_ITEM_HOVER = 'legendItemHover';\n var SERIES_CLICK = 'seriesClick';\n var SERIES_HOVER = 'seriesHover';\n var PLOT_AREA_CLICK = 'plotAreaClick';\n var PLOT_AREA_HOVER = 'plotAreaHover';\n var DRAG = 'drag';\n var DRAG_END = 'dragEnd';\n var DRAG_START = 'dragStart';\n var ZOOM_START = 'zoomStart';\n var ZOOM = 'zoom';\n var ZOOM_END = 'zoomEnd';\n var SELECT_START = 'selectStart';\n var SELECT = 'select';\n var SELECT_END = 'selectEnd';\n var RENDER = 'render';\n var SHOW_TOOLTIP = 'showTooltip';\n var HIDE_TOOLTIP = 'hideTooltip';\n var LOGARITHMIC = 'log';\n var CATEGORY = 'category';\n var INSIDE_END = 'insideEnd';\n var INSIDE_BASE = 'insideBase';\n var OUTSIDE_END = 'outsideEnd';\n var MOUSEWHEEL = 'DOMMouseScroll mousewheel';\n var MOUSEWHEEL_DELAY = 150;\n var constants = {\n INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n FADEIN: FADEIN,\n LEGEND_ITEM_CLICK: LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER: LEGEND_ITEM_HOVER,\n SERIES_CLICK: SERIES_CLICK,\n SERIES_HOVER: SERIES_HOVER,\n GLASS: GLASS,\n BORDER_BRIGHTNESS: BORDER_BRIGHTNESS,\n TOOLTIP_OFFSET: TOOLTIP_OFFSET,\n START_SCALE: START_SCALE,\n ERROR_LOW_FIELD: ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD: ERROR_HIGH_FIELD,\n X_ERROR_LOW_FIELD: X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD: X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD: Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD: Y_ERROR_HIGH_FIELD,\n LINE_MARKER_SIZE: LINE_MARKER_SIZE,\n INTERPOLATE: INTERPOLATE,\n ZERO: ZERO,\n SMOOTH: SMOOTH,\n STEP: STEP,\n CATEGORY: CATEGORY,\n FUNNEL: FUNNEL,\n BAR: BAR,\n CANDLESTICK: CANDLESTICK,\n PIE: PIE,\n COLUMN: COLUMN,\n AREA: AREA,\n VERTICAL_BULLET: VERTICAL_BULLET,\n BOX_PLOT: BOX_PLOT,\n OHLC: OHLC,\n WATERFALL: WATERFALL,\n LINE: LINE,\n BULLET: BULLET,\n VERTICAL_LINE: VERTICAL_LINE,\n VERTICAL_AREA: VERTICAL_AREA,\n RANGE_AREA: RANGE_AREA,\n VERTICAL_RANGE_AREA: VERTICAL_RANGE_AREA,\n RANGE_COLUMN: RANGE_COLUMN,\n VERTICAL_BOX_PLOT: VERTICAL_BOX_PLOT,\n RANGE_BAR: RANGE_BAR,\n HORIZONTAL_WATERFALL: HORIZONTAL_WATERFALL,\n SCATTER: SCATTER,\n SCATTER_LINE: SCATTER_LINE,\n BUBBLE: BUBBLE,\n RADAR_AREA: RADAR_AREA,\n RADAR_LINE: RADAR_LINE,\n RADAR_COLUMN: RADAR_COLUMN,\n POLAR_LINE: POLAR_LINE,\n POLAR_AREA: POLAR_AREA,\n POLAR_SCATTER: POLAR_SCATTER,\n RENDER: RENDER,\n PLOT_AREA_CLICK: PLOT_AREA_CLICK,\n PLOT_AREA_HOVER: PLOT_AREA_HOVER,\n LOGARITHMIC: LOGARITHMIC,\n DRAG: DRAG,\n DRAG_START: DRAG_START,\n DRAG_END: DRAG_END,\n ZOOM_START: ZOOM_START,\n ZOOM: ZOOM,\n ZOOM_END: ZOOM_END,\n SELECT_START: SELECT_START,\n SELECT: SELECT,\n SELECT_END: SELECT_END,\n GAP: GAP,\n DONUT: DONUT,\n INSIDE_END: INSIDE_END,\n INSIDE_BASE: INSIDE_BASE,\n OUTSIDE_END: OUTSIDE_END,\n MOUSEWHEEL: MOUSEWHEEL,\n MOUSEWHEEL_DELAY: MOUSEWHEEL_DELAY,\n SHOW_TOOLTIP: SHOW_TOOLTIP,\n HIDE_TOOLTIP: HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n ABOVE: ABOVE,\n BELOW: BELOW\n };\n var DEFAULT_ERROR_BAR_WIDTH = 4;\n var ErrorBarBase = ChartElement.extend({\n init: function (low, high, isVertical, chart, series, options) {\n ChartElement.fn.init.call(this, options);\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n },\n reflow: function (targetBox) {\n var endCaps = this.options.endCaps;\n var isVertical = this.isVertical;\n var axis = this.getAxis();\n var valueBox = axis.getSlot(this.low, this.high);\n var centerBox = targetBox.center();\n var capsWidth = this.getCapsWidth(targetBox, isVertical);\n var capValue = isVertical ? centerBox.x : centerBox.y;\n var capStart = capValue - capsWidth;\n var capEnd = capValue + capsWidth;\n var linePoints;\n if (isVertical) {\n linePoints = [\n new Point(centerBox.x, valueBox.y1),\n new Point(centerBox.x, valueBox.y2)\n ];\n if (endCaps) {\n linePoints.push(new Point(capStart, valueBox.y1), new Point(capEnd, valueBox.y1), new Point(capStart, valueBox.y2), new Point(capEnd, valueBox.y2));\n }\n this.box = new Box(capStart, valueBox.y1, capEnd, valueBox.y2);\n } else {\n linePoints = [\n new Point(valueBox.x1, centerBox.y),\n new Point(valueBox.x2, centerBox.y)\n ];\n if (endCaps) {\n linePoints.push(new Point(valueBox.x1, capStart), new Point(valueBox.x1, capEnd), new Point(valueBox.x2, capStart), new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n this.linePoints = linePoints;\n },\n getCapsWidth: function (box, isVertical) {\n var boxSize = isVertical ? box.width() : box.height();\n var capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n return capsWidth;\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual = options.visual;\n if (visual) {\n this.visual = visual({\n low: this.low,\n high: this.high,\n rect: this.box.toRect(),\n sender: this.getSender(),\n options: {\n endCaps: options.endCaps,\n color: options.color,\n line: options.line\n },\n createVisual: function () {\n this$1.createDefaultVisual();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n },\n createDefaultVisual: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var linePoints = ref.linePoints;\n var lineOptions = {\n stroke: {\n color: options.color,\n width: options.line.width,\n dashType: options.line.dashType\n }\n };\n ChartElement.fn.createVisual.call(this);\n for (var idx = 0; idx < linePoints.length; idx += 2) {\n var line = new Path(lineOptions).moveTo(linePoints[idx].x, linePoints[idx].y).lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n alignPathToPixel(line);\n this$1.visual.append(line);\n }\n }\n });\n setDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: { width: 2 },\n zIndex: 1\n });\n var CategoricalErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axis = this.chart.seriesValueAxis(this.series);\n return axis;\n }\n });\n var MAX_EXPAND_DEPTH = 5;\n function evalOptions(options, context, state, dryRun) {\n if (state === void 0) {\n state = {};\n }\n if (dryRun === void 0) {\n dryRun = false;\n }\n var defaults = state.defaults = state.defaults || {};\n var depth = state.depth = state.depth || 0;\n var needsEval = false;\n state.excluded = state.excluded || [];\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n for (var property in options) {\n if (!inArray(property, state.excluded) && options.hasOwnProperty(property)) {\n var propValue = options[property];\n if (isFunction(propValue)) {\n needsEval = true;\n if (!dryRun) {\n options[property] = valueOrDefault(propValue(context), defaults[property]);\n }\n } else if (isObject(propValue)) {\n if (!dryRun) {\n state.defaults = defaults[property];\n }\n state.depth++;\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n state.depth--;\n }\n }\n }\n return needsEval;\n }\n function categoriesCount(series) {\n var seriesCount = series.length;\n var categories = 0;\n for (var i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n return categories;\n }\n var CategoricalChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n this.valueAxisRanges = {};\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, { vertical: !this.options.invertAxes }, series);\n }\n return options;\n },\n plotValue: function (point) {\n if (!point) {\n return 0;\n }\n if (this.options.isStacked100 && isNumber(point.value)) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n var otherValues = [];\n var categorySum = 0;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (other) {\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack && stack.group !== otherStack.group) {\n continue;\n }\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n return point.value;\n },\n plotRange: function (point, startValue) {\n var this$1 = this;\n if (startValue === void 0) {\n startValue = 0;\n }\n var categoryPoints = this.categoryPoints[point.categoryIx];\n if (this.options.isStacked) {\n var plotValue = this.plotValue(point);\n var positive = plotValue >= 0;\n var prevValue = startValue;\n var isStackedBar = false;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack) {\n if (typeof stack === datavizConstants.STRING && stack !== otherStack) {\n continue;\n }\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n var otherValue = this$1.plotValue(other);\n if (otherValue >= 0 && positive || otherValue < 0 && !positive) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n if (isStackedBar) {\n prevValue -= startValue;\n }\n return [\n prevValue,\n plotValue\n ];\n }\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n dataviz.convertableToNumber(point.value) ? point.value : axisCrossingValue\n ];\n },\n stackLimits: function (axisName, stackName) {\n var this$1 = this;\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var i = 0; i < this.categoryPoints.length; i++) {\n var categoryPoints = this$1.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\n for (var pIx = 0; pIx < categoryPoints.length; pIx++) {\n var point = categoryPoints[pIx];\n if (point) {\n if (point.series.stack === stackName || point.series.axis === axisName) {\n var to = this$1.plotRange(point, 0)[1];\n if (defined(to) && isFinite(to)) {\n max = Math.max(max, to);\n min = Math.min(min, to);\n }\n }\n }\n }\n }\n return {\n min: min,\n max: max\n };\n },\n updateStackRange: function () {\n var this$1 = this;\n var ref = this.options;\n var isStacked = ref.isStacked;\n var chartSeries = ref.series;\n var limitsCache = {};\n if (isStacked) {\n for (var i = 0; i < chartSeries.length; i++) {\n var series = chartSeries[i];\n var axisName = series.axis;\n var key = axisName + series.stack;\n var limits = limitsCache[key];\n if (!limits) {\n limits = this$1.stackLimits(axisName, series.stack);\n var errorTotals = this$1.errorTotals;\n if (errorTotals) {\n if (errorTotals.negative.length) {\n limits.min = Math.min(limits.min, dataviz.sparseArrayLimits(errorTotals.negative).min);\n }\n if (errorTotals.positive.length) {\n limits.max = Math.max(limits.max, dataviz.sparseArrayLimits(errorTotals.positive).max);\n }\n }\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n if (limits) {\n this$1.valueAxisRanges[axisName] = limits;\n }\n }\n }\n },\n addErrorBar: function (point, data, categoryIx) {\n var value = point.value;\n var series = point.series;\n var seriesIx = point.seriesIx;\n var errorBars = point.options.errorBars;\n var lowValue = data.fields[ERROR_LOW_FIELD];\n var highValue = data.fields[ERROR_HIGH_FIELD];\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] || new ErrorRangeCalculator(errorBars.value, series, VALUE);\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\n },\n addPointErrorBar: function (point, categoryIx) {\n var isVertical = !this.options.invertAxes;\n var options = point.options.errorBars;\n var series = point.series;\n var low = point.low;\n var high = point.high;\n if (this.options.isStacked) {\n var stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n var fields = {\n categoryIx: categoryIx,\n series: series\n };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [errorBar];\n point.append(errorBar);\n },\n stackedErrorRange: function (point, categoryIx) {\n var plotValue = this.plotRange(point, 0)[1] - point.value;\n var low = point.low + plotValue;\n var high = point.high + plotValue;\n this.errorTotals = this.errorTotals || {\n positive: [],\n negative: []\n };\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n return {\n low: low,\n high: high\n };\n },\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n var seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n var point = this.createPoint(data, fields);\n if (point) {\n $.extend(point, fields);\n point.owner = this;\n point.noteText = data.fields.noteText;\n if (!defined(point.dataItem)) {\n point.dataItem = series.data[categoryIx];\n }\n this.addErrorBar(point, data, categoryIx);\n }\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n this.updateRange(data.valueFields, fields);\n },\n evalPointOptions: function (options, value, category, categoryIx, series, seriesIx) {\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'aggregate',\n '_events',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, pointOptions);\n evalOptions(pointOptions, {\n value: value,\n category: category,\n index: categoryIx,\n series: series,\n dataItem: series.data[categoryIx]\n }, state);\n }\n return pointOptions;\n },\n updateRange: function (data, fields) {\n var axisName = fields.series.axis;\n var value = data.value;\n var axisRange = this.valueAxisRanges[axisName];\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\n },\n seriesValueAxis: function (series) {\n var plotArea = this.plotArea;\n var axisName = series.axis;\n var axis = axisName ? plotArea.namedValueAxes[axisName] : plotArea.valueAxis;\n if (!axis) {\n throw new Error('Unable to locate value axis with name ' + axisName);\n }\n return axis;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var categorySlots = this.categorySlots = [];\n var chartPoints = this.points;\n var categoryAxis = this.categoryAxis;\n var pointIx = 0;\n this.traverseDataPoints(function (data, fields) {\n var categoryIx = fields.categoryIx;\n var currentSeries = fields.series;\n var valueAxis = this$1.seriesValueAxis(currentSeries);\n var point = chartPoints[pointIx++];\n var categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot = this$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n if (point) {\n var plotRange = this$1.plotRange(point, valueAxis.startValue());\n var valueSlot = this$1.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n var pointSlot = this$1.pointSlot(categorySlot, valueSlot);\n point.aboveAxis = this$1.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n if (this$1.options.isStacked100) {\n point.percentage = this$1.plotValue(point);\n }\n this$1.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n this.box = targetBox;\n },\n valueSlot: function (valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n },\n limitPoints: function () {\n var this$1 = this;\n var categoryPoints = this.categoryPoints;\n var points = categoryPoints[0].concat(last(categoryPoints));\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx]) {\n this$1.limitPoint(points[idx]);\n }\n }\n },\n limitPoint: function (point) {\n var limittedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limittedSlot.equals(point.box)) {\n point.reflow(limittedSlot);\n }\n },\n aboveAxis: function (point, valueAxis) {\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n var value = point.value;\n return valueAxis.options.reverse ? value < axisCrossingValue : value >= axisCrossingValue;\n },\n categoryAxisCrossingValue: function (valueAxis) {\n var categoryAxis = this.categoryAxis;\n var options = valueAxis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n },\n reflowPoint: function (point, pointSlot) {\n point.reflow(pointSlot);\n },\n reflowCategories: function () {\n },\n pointSlot: function (categorySlot, valueSlot) {\n var options = this.options;\n var invertAxes = options.invertAxes;\n var slotX = invertAxes ? valueSlot : categorySlot;\n var slotY = invertAxes ? categorySlot : valueSlot;\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var series = this.options.series;\n var categories = this.categoryAxis.options.categories || [];\n var count = categoriesCount(series);\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this$1._outOfRangeCallback(series[seriesIx], '_outOfRangeMinPoint', seriesIx, callback);\n }\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n for (var seriesIx$1 = 0; seriesIx$1 < seriesCount; seriesIx$1++) {\n var currentSeries = series[seriesIx$1];\n var currentCategory = categories[categoryIx];\n var pointData = this$1._bindPoint(currentSeries, seriesIx$1, categoryIx);\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx$1\n });\n }\n }\n for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n this$1._outOfRangeCallback(series[seriesIx$2], '_outOfRangeMaxPoint', seriesIx$2, callback);\n }\n },\n _outOfRangeCallback: function (series, field, seriesIx, callback) {\n var outOfRangePoint = series[field];\n if (outOfRangePoint) {\n var categoryIx = outOfRangePoint.categoryIx;\n var pointData = this._bindPoint(series, seriesIx, categoryIx, outOfRangePoint.item);\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n },\n _bindPoint: function (series, seriesIx, categoryIx, item) {\n if (!this._bindCache) {\n this._bindCache = [];\n }\n var bindCache = this._bindCache[seriesIx];\n if (!bindCache) {\n bindCache = this._bindCache[seriesIx] = [];\n }\n var data = bindCache[categoryIx];\n if (!data) {\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx, item);\n }\n return data;\n },\n formatPointValue: function (point, format) {\n if (point.value === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value);\n },\n pointValue: function (data) {\n return data.valueFields.value;\n }\n });\n setDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n });\n var PointEventsMixin = {\n click: function (chart, e) {\n return chart.trigger(SERIES_CLICK, this.eventArgs(e));\n },\n hover: function (chart, e) {\n return chart.trigger(SERIES_HOVER, this.eventArgs(e));\n },\n eventArgs: function (e) {\n return {\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n category: this.category,\n series: this.series,\n dataItem: this.dataItem,\n runningTotal: this.runningTotal,\n total: this.total,\n element: eventElement(e),\n originalEvent: e,\n point: this\n };\n }\n };\n var NoteMixin = {\n createNote: function () {\n var options = this.options.notes;\n var text = this.noteText || options.label.text;\n if (options.visible !== false && defined(text) && text !== null) {\n this.note = new dataviz.Note({\n value: this.value,\n text: text,\n dataItem: this.dataItem,\n category: this.category,\n series: this.series\n }, this.options.notes, this.owner.chartService);\n this.append(this.note);\n }\n }\n };\n var LinePoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n },\n render: function () {\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n series: this.series\n });\n } else if (labels.format) {\n labelText = this.formatValue(labels.format);\n }\n this.label = new TextBox(labelText, deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels));\n this.append(this.label);\n }\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n markerBorder: function () {\n var options = this.options.markers;\n var background = options.background;\n var border = deepExtend({ color: this.color }, options.border);\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n return border;\n },\n createVisual: function () {\n },\n createMarker: function () {\n var options = this.options.markers;\n var marker = new ShapeElement({\n type: options.type,\n width: options.size,\n height: options.size,\n rotation: options.rotation,\n background: options.background,\n border: this.markerBorder(),\n opacity: options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n return marker;\n },\n markerBox: function () {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n return this.marker.box;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var aboveAxis = ref.aboveAxis;\n var vertical = options.vertical;\n this.render();\n this.box = targetBox;\n var childBox = targetBox.clone();\n if (vertical) {\n if (aboveAxis) {\n childBox.y1 -= childBox.height();\n } else {\n childBox.y2 += childBox.height();\n }\n } else {\n if (aboveAxis) {\n childBox.x1 += childBox.width();\n } else {\n childBox.x2 -= childBox.width();\n }\n }\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n this.reflowLabel(childBox);\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(childBox);\n }\n }\n if (this.note) {\n var noteTargetBox = this.markerBox();\n if (!(options.markers.visible && options.markers.size)) {\n var center = noteTargetBox.center();\n noteTargetBox = new Box(center.x, center.y, center.x, center.y);\n }\n this.note.reflow(noteTargetBox);\n }\n },\n reflowLabel: function (box) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var anchor = options.labels.position;\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\n },\n createHighlight: function () {\n var markers = this.options.highlight.markers;\n var defaultColor = this.markerBorder().color;\n var options = this.options.markers;\n var size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n var shadow = new ShapeElement({\n type: options.type,\n width: size,\n height: size,\n rotation: options.rotation,\n background: markers.color || defaultColor,\n border: {\n color: markers.border.color,\n width: markers.border.width,\n opacity: valueOrDefault(markers.border.opacity, 1)\n },\n opacity: valueOrDefault(markers.opacity, 1)\n });\n shadow.reflow(this._childBox);\n return shadow.getElement();\n },\n highlightVisual: function () {\n return (this.marker || {}).visual;\n },\n highlightVisualArgs: function () {\n var marker = this.marker;\n var visual, rect;\n if (marker) {\n rect = marker.paddingBox.toRect();\n visual = marker.visual;\n } else {\n var size = this.options.markers.size;\n var halfSize = size / 2;\n var center = this.box.center();\n rect = new geometry.Rect([\n center.x - halfSize,\n center.y - halfSize\n ], [\n size,\n size\n ]);\n }\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\n },\n tooltipAnchor: function () {\n var markerBox = this.markerBox();\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(markerBox);\n if (showTooltip) {\n var x = markerBox.x2 + TOOLTIP_OFFSET;\n var horizontalAlign = LEFT;\n var y, verticalAlign;\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n var markerBox = this.markerBox();\n return markerBox.overlaps(box);\n },\n unclipElements: function () {\n if (this.label) {\n this.label.options.noclip = true;\n }\n if (this.note) {\n this.note.options.noclip = true;\n }\n }\n });\n LinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\n opacity: 1\n },\n labels: {\n visible: false,\n position: ABOVE,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n },\n notes: { label: {} },\n highlight: {\n markers: {\n border: {\n color: '#fff',\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n errorBars: { line: { width: 1 } }\n };\n deepExtend(LinePoint.prototype, PointEventsMixin);\n deepExtend(LinePoint.prototype, NoteMixin);\n var LineSegment = ChartElement.extend({\n init: function (linePoints, series, seriesIx) {\n ChartElement.fn.init.call(this);\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n },\n points: function () {\n return this.toGeometryPoints(this.linePoints);\n },\n toGeometryPoints: function (points) {\n var result = [];\n for (var i = 0, length = points.length; i < length; i++) {\n if (points[i] && points[i].visible !== false) {\n result.push(points[i]._childBox.toRect().center());\n }\n }\n return result;\n },\n createVisual: function () {\n var ref = this;\n var options = ref.options;\n var series = ref.series;\n var color = series.color;\n var defaults = series._defaults;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var line = Path.fromPoints(this.points(), {\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n if (options.closed) {\n line.close();\n }\n this.visual = line;\n },\n aliasFor: function (e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n });\n setDefaultOptions(LineSegment, { closed: false });\n var StepLineMixin = {\n calculateStepPoints: function (points) {\n var categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n var ref = categoryAxis.options;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var stepAxis = vertical ? X : Y;\n var axis = vertical ? Y : X;\n var stepDir = reverse ? 2 : 1;\n var dir = stepDir;\n var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n var result = [previousPoint];\n for (var idx = 1; idx < points.length; idx++) {\n var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n var stepPoint = new GeometryPoint();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n result.push(stepPoint, point);\n }\n previousPoint = point;\n }\n if (!justified) {\n result.push(toGeometryPoint(last(points), stepAxis, stepDir, axis, reverse ? 1 : 2));\n } else if (previousPoint !== last(result)) {\n result.push(previousPoint);\n }\n return result;\n }\n };\n function toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n var box = lintPoint.box;\n var result = new GeometryPoint();\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n return result;\n }\n var StepLineSegment = LineSegment.extend({\n points: function () {\n return this.calculateStepPoints(this.linePoints);\n }\n });\n deepExtend(StepLineSegment.prototype, StepLineMixin);\n var SplineSegment = LineSegment.extend({\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var curveProcessor = new CurveProcessor(this.options.closed);\n var segments = curveProcessor.process(this.points());\n var curve = new Path({\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n curve.segments.push.apply(curve.segments, segments);\n this.visual = curve;\n }\n });\n var LineChartMixin = {\n renderSegments: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesPoints = ref.seriesPoints;\n var series = options.series;\n var seriesCount = seriesPoints.length;\n var lastSegment;\n this._segments = [];\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var sortedPoints = this$1.sortPoints(seriesPoints[seriesIx]);\n var pointCount = sortedPoints.length;\n var linePoints = [];\n for (var pointIx = 0; pointIx < pointCount; pointIx++) {\n var point = sortedPoints[pointIx];\n if (point) {\n linePoints.push(point);\n } else if (this$1.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n }\n this.children.unshift.apply(this.children, this._segments);\n },\n _addSegment: function (segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n sortPoints: function (points) {\n return points;\n },\n seriesMissingValues: function (series) {\n var missingValues = series.missingValues;\n var assumeZero = !missingValues && this.options.isStacked;\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\n getNearestPoint: function (x, y, seriesIx) {\n var target = new Point(x, y);\n var allPoints = this.seriesPoints[seriesIx];\n var nearestPointDistance = MAX_VALUE;\n var nearestPoint;\n for (var i = 0; i < allPoints.length; i++) {\n var point = allPoints[i];\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n var pointBox = point.box;\n var pointDistance = pointBox.center().distanceTo(target);\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n return nearestPoint;\n }\n };\n var ClipAnimation = Animation.extend({\n setup: function () {\n this._setEnd(this.options.box.x1);\n },\n step: function (pos) {\n var box = this.options.box;\n this._setEnd(dataviz.interpolateValue(box.x1, box.x2, pos));\n },\n _setEnd: function (x) {\n var element = this.element;\n var segments = element.segments;\n var topRight = segments[1].anchor();\n var bottomRight = segments[2].anchor();\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n });\n setDefaultOptions(ClipAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register('clip', ClipAnimation);\n function anyHasZIndex(elements) {\n for (var idx = 0; idx < elements.length; idx++) {\n if (defined(elements[idx].zIndex)) {\n return true;\n }\n }\n }\n var ClipAnimationMixin = {\n createAnimation: function () {\n var root = this.getRoot();\n if (root && (root.options || {}).transitions !== false) {\n var box = root.box;\n var clipPath = Path.fromRect(box.toRect());\n this.visual.clip(clipPath);\n this.animation = new ClipAnimation(clipPath, { box: box });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n _setChildrenAnimation: function (clipPath) {\n var points = this.animationPoints();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point && point.visual && defined(point.visual.options.zIndex)) {\n point.visual.clip(clipPath);\n }\n }\n }\n };\n var LineChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n this.renderSegments();\n },\n pointType: function () {\n return LinePoint;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var missingValues = this.seriesMissingValues(series);\n var value = data.valueFields.value;\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n plotRange: function (point) {\n var this$1 = this;\n var plotValue = this.plotValue(point);\n if (this.options.isStacked) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n plotValue += this$1.plotValue(other);\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n return [\n plotValue,\n plotValue\n ];\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result.concat(this._segments);\n }\n });\n deepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n var AreaSegment = LineSegment.extend({\n init: function (linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n },\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var lineOptions = series.line || {};\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n this.visual = new Group({ zIndex: series.zIndex });\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n if (lineOptions.width > 0 && lineOptions.visible !== false) {\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: 'butt'\n }, lineOptions)\n });\n }\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n return segments;\n },\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.points());\n },\n stackSegments: function () {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n return this.createStackSegments(this.stackPoints);\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n },\n segmentsFromPoints: function (points) {\n return points.map(function (point) {\n return new geometry.Segment(point);\n });\n },\n createStroke: function (style) {\n var stroke = new Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n this.visual.append(stroke);\n },\n hasStackSegment: function () {\n return this.prevSegment || this.stackPoints && this.stackPoints.length;\n },\n createFill: function (style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var hasStackSegments = this.hasStackSegment();\n if (hasStackSegments) {\n var stackSegments = this.stackSegments();\n append(fillSegments, stackSegments);\n }\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n this.visual.append(fill);\n },\n fillToAxes: function (fillPath) {\n var chart = this.parent;\n var invertAxes = chart.options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.series);\n var crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n var endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n var segments = this.strokeSegments();\n var firstPoint = segments[0].anchor();\n var lastPoint = last(segments).anchor();\n var end = invertAxes ? endSlot.x1 : endSlot.y1;\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y).lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end).lineTo(firstPoint.x, end);\n }\n }\n });\n var StepAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n });\n deepExtend(StepAreaSegment.prototype, StepLineMixin);\n var SplineAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n var curveProcessor = new CurveProcessor(this.options.closed);\n var linePoints = this.points();\n return curveProcessor.process(linePoints);\n },\n createStackSegments: function () {\n var strokeSegments = this.strokeSegments();\n var stackSegments = [];\n for (var idx = strokeSegments.length - 1; idx >= 0; idx--) {\n var segment = strokeSegments[idx];\n stackSegments.push(new geometry.Segment(segment.anchor(), segment.controlOut(), segment.controlIn()));\n }\n return stackSegments;\n }\n });\n var AreaChart = LineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n var missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== 'gap') {\n stackPoints = prevSegment.linePoints;\n previousSegment = prevSegment;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n }\n var pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n LineChart.fn.reflow.call(this, targetBox);\n var stackPoints = this._stackPoints;\n if (stackPoints) {\n for (var idx = 0; idx < stackPoints.length; idx++) {\n var stackPoint = stackPoints[idx];\n var pointSlot = this$1.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n },\n _gapStackPoints: function (linePoints, seriesIx, style) {\n var this$1 = this;\n var seriesPoints = this.seriesPoints;\n var startIdx = linePoints[0].categoryIx;\n var length = linePoints.length;\n if (startIdx < 0) {\n startIdx = 0;\n length--;\n }\n var endIdx = startIdx + length;\n var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n var stackPoints = [];\n this._stackPoints = this._stackPoints || [];\n for (var categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n var pointIx = categoryIx + pointOffset;\n var currentSeriesIx = seriesIx;\n var point = void 0;\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n stackPoints.push(point);\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n var gapStackPoint = this$1._createGapStackPoint(categoryIx);\n this$1._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n return stackPoints;\n },\n _previousSegmentPoint: function (categoryIx, pointIx, segmentIx, seriesIdx) {\n var seriesPoints = this.seriesPoints;\n var index = seriesIdx;\n var point;\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n return point;\n },\n _createGapStackPoint: function (categoryIx) {\n var options = this.pointOptions({}, 0);\n var point = new LinePoint(0, options);\n point.categoryIx = categoryIx;\n point.series = {};\n return point;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var AxisGroupRangeTracker = Class.extend({\n init: function () {\n this.axisRanges = {};\n },\n update: function (chartAxisRanges) {\n var axisRanges = this.axisRanges;\n for (var axisName in chartAxisRanges) {\n var chartRange = chartAxisRanges[axisName];\n var range = axisRanges[axisName];\n axisRanges[axisName] = range = range || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n range.min = Math.min(range.min, chartRange.min);\n range.max = Math.max(range.max, chartRange.max);\n }\n },\n reset: function (axisName) {\n this.axisRanges[axisName] = undefined;\n },\n query: function (axisName) {\n return this.axisRanges[axisName];\n }\n });\n var BarLabel = ChartElement.extend({\n init: function (content, options) {\n ChartElement.fn.init.call(this, options);\n this.textBox = new TextBox(content, this.options);\n this.append(this.textBox);\n },\n createVisual: function () {\n this.textBox.options.noclip = this.options.noclip;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var vertical = options.vertical;\n var aboveAxis = options.aboveAxis;\n var text = this.children[0];\n var textOptions = text.options;\n var box = text.box;\n var padding = text.options.padding;\n var labelBox = targetBox;\n textOptions.align = vertical ? CENTER : LEFT;\n textOptions.vAlign = vertical ? TOP : CENTER;\n if (options.position === INSIDE_END) {\n if (vertical) {\n textOptions.vAlign = TOP;\n if (!aboveAxis && box.height() < targetBox.height()) {\n textOptions.vAlign = BOTTOM;\n }\n } else {\n textOptions.align = aboveAxis ? RIGHT : LEFT;\n }\n } else if (options.position === CENTER) {\n textOptions.vAlign = CENTER;\n textOptions.align = CENTER;\n } else if (options.position === INSIDE_BASE) {\n if (vertical) {\n textOptions.vAlign = aboveAxis ? BOTTOM : TOP;\n } else {\n textOptions.align = aboveAxis ? LEFT : RIGHT;\n }\n } else if (options.position === OUTSIDE_END) {\n if (vertical) {\n if (aboveAxis) {\n labelBox = new Box(targetBox.x1, targetBox.y1 - box.height(), targetBox.x2, targetBox.y1);\n } else {\n labelBox = new Box(targetBox.x1, targetBox.y2, targetBox.x2, targetBox.y2 + box.height());\n }\n } else {\n textOptions.align = CENTER;\n if (aboveAxis) {\n labelBox = new Box(targetBox.x2, targetBox.y1, targetBox.x2 + box.width(), targetBox.y2);\n } else {\n labelBox = new Box(targetBox.x1 - box.width(), targetBox.y1, targetBox.x1, targetBox.y2);\n }\n }\n }\n if (!options.rotation) {\n if (vertical) {\n padding.left = padding.right = (labelBox.width() - text.contentBox.width()) / 2;\n } else {\n padding.top = padding.bottom = (labelBox.height() - text.contentBox.height()) / 2;\n }\n }\n text.reflow(labelBox);\n },\n alignToClipBox: function (clipBox) {\n var vertical = this.options.vertical;\n var field = vertical ? Y : X;\n var start = field + '1';\n var end = field + '2';\n var text = this.children[0];\n var parentBox = this.parent.box;\n if (parentBox[start] < clipBox[start] || clipBox[end] < parentBox[end]) {\n var targetBox = text.paddingBox.clone();\n targetBox[start] = Math.max(parentBox[start], clipBox[start]);\n targetBox[end] = Math.min(parentBox[end], clipBox[end]);\n this.reflow(targetBox);\n }\n }\n });\n setDefaultOptions(BarLabel, {\n position: OUTSIDE_END,\n margin: getSpacing(3),\n padding: getSpacing(4),\n color: BLACK,\n background: '',\n border: {\n width: 1,\n color: ''\n },\n aboveAxis: true,\n vertical: false,\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n zIndex: 2\n });\n function hasGradientOverlay(options) {\n var overlay = options.overlay;\n return overlay && overlay.gradient && overlay.gradient !== 'none';\n }\n var BAR_ALIGN_MIN_WIDTH = 6;\n var Bar = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.options = options;\n this.color = options.color || WHITE;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.value = value;\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n this.createLabel();\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n createLabel: function () {\n var options = this.options;\n var labels = options.labels;\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n });\n } else {\n labelText = this.formatValue(labels.format);\n }\n this.label = new BarLabel(labelText, deepExtend({ vertical: options.vertical }, labels));\n this.append(this.label);\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n this.render();\n var label = this.label;\n this.box = targetBox;\n if (label) {\n label.options.aboveAxis = this.aboveAxis;\n label.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(targetBox);\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var box = ref.box;\n var options = ref.options;\n var customVisual = options.visual;\n if (this.visible !== false) {\n ChartElement.fn.createVisual.call(this);\n if (customVisual) {\n var visual = this.rectVisual = customVisual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n sender: this.getSender(),\n series: this.series,\n percentage: this.percentage,\n stackValue: this.stackValue,\n runningTotal: this.runningTotal,\n total: this.total,\n rect: box.toRect(),\n createVisual: function () {\n var group = new Group();\n this$1.createRect(group);\n return group;\n },\n options: options\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else if (box.width() > 0 && box.height() > 0) {\n this.createRect(this.visual);\n }\n }\n },\n createRect: function (visual) {\n var options = this.options;\n var border = options.border;\n var strokeOpacity = defined(border.opacity) ? border.opacity : options.opacity;\n var rect = this.box.toRect();\n rect.size.width = Math.round(rect.size.width);\n var path = this.rectVisual = Path.fromRect(rect, {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: {\n color: this.getBorderColor(),\n width: border.width,\n opacity: strokeOpacity,\n dashType: border.dashType\n }\n });\n var width = this.box.width();\n var height = this.box.height();\n var size = options.vertical ? width : height;\n if (size > BAR_ALIGN_MIN_WIDTH) {\n alignPathToPixel(path);\n if (width < 1 || height < 1) {\n path.options.stroke.lineJoin = 'round';\n }\n }\n visual.append(path);\n if (hasGradientOverlay(options)) {\n var overlay = this.createGradientOverlay(path, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay));\n visual.append(overlay);\n }\n },\n createHighlight: function (style) {\n var highlight = Path.fromRect(this.box.toRect(), style);\n return alignPathToPixel(highlight);\n },\n highlightVisual: function () {\n return this.rectVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this.rectVisual\n };\n },\n getBorderColor: function () {\n var color = this.color;\n var border = this.options.border;\n var brightness = border._brightness || BORDER_BRIGHTNESS;\n var borderColor = border.color;\n if (!defined(borderColor)) {\n borderColor = new Color(color).brightness(brightness).toHex();\n }\n return borderColor;\n },\n tooltipAnchor: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var aboveAxis = ref.aboveAxis;\n var clipBox = this.owner.pane.clipBox() || box;\n var horizontalAlign = LEFT;\n var verticalAlign = TOP;\n var x, y;\n if (options.vertical) {\n x = Math.min(box.x2, clipBox.x2) + TOOLTIP_OFFSET;\n if (aboveAxis) {\n y = Math.max(box.y1, clipBox.y1);\n } else {\n y = Math.min(box.y2, clipBox.y2);\n verticalAlign = BOTTOM;\n }\n } else {\n var x1 = Math.max(box.x1, clipBox.x1);\n var x2 = Math.min(box.x2, clipBox.x2);\n if (options.isStacked) {\n verticalAlign = BOTTOM;\n if (aboveAxis) {\n horizontalAlign = RIGHT;\n x = x2;\n } else {\n x = x1;\n }\n y = Math.max(box.y1, clipBox.y1) - TOOLTIP_OFFSET;\n } else {\n if (aboveAxis) {\n x = x2 + TOOLTIP_OFFSET;\n } else {\n x = x1 - TOOLTIP_OFFSET;\n horizontalAlign = RIGHT;\n }\n y = Math.max(box.y1, clipBox.y1);\n }\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n }\n });\n deepExtend(Bar.prototype, PointEventsMixin);\n deepExtend(Bar.prototype, NoteMixin);\n Bar.prototype.defaults = {\n border: { width: 1 },\n vertical: true,\n overlay: { gradient: 'glass' },\n labels: {\n visible: false,\n format: '{0}'\n },\n opacity: 1,\n notes: { label: {} }\n };\n function forEach(elements, callback) {\n elements.forEach(callback);\n }\n function forEachReverse(elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx - length - 1);\n }\n }\n var ClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n reflow: function (box) {\n var ref = this.options;\n var vertical = ref.vertical;\n var gap = ref.gap;\n var spacing = ref.spacing;\n var children = this.children;\n var count = children.length;\n var axis = vertical ? Y : X;\n var slots = count + gap + spacing * (count - 1);\n var slotSize = (vertical ? box.height() : box.width()) / slots;\n var position = box[axis + 1] + slotSize * (gap / 2);\n this.forEach(children, function (child, idx) {\n var childBox = (child.box || box).clone();\n childBox[axis + 1] = position;\n childBox[axis + 2] = position + slotSize;\n child.reflow(childBox);\n if (idx < count - 1) {\n position += slotSize * spacing;\n }\n position += slotSize;\n });\n }\n });\n setDefaultOptions(ClusterLayout, {\n vertical: false,\n gap: 0,\n spacing: 0\n });\n var StackWrap = ChartElement.extend({\n reflow: function (targetBox) {\n var this$1 = this;\n var positionAxis = this.options.vertical ? X : Y;\n var children = this.children;\n var childrenCount = children.length;\n var box = this.box = new Box();\n for (var i = 0; i < childrenCount; i++) {\n var currentChild = children[i];\n if (currentChild.visible !== false) {\n var childBox = currentChild.box.clone();\n childBox.snapTo(targetBox, positionAxis);\n if (i === 0) {\n box = this$1.box = childBox.clone();\n }\n currentChild.reflow(childBox);\n box.wrap(childBox);\n }\n }\n }\n });\n setDefaultOptions(StackWrap, { vertical: true });\n var BarChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n },\n pointType: function () {\n return Bar;\n },\n clusterType: function () {\n return ClusterLayout;\n },\n stackType: function () {\n return StackWrap;\n },\n stackLimits: function (axisName, stackName) {\n var limits = CategoricalChart.fn.stackLimits.call(this, axisName, stackName);\n return limits;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var isStacked = options.isStacked;\n var value = this.pointValue(data);\n var pointOptions = this.pointOptions(series, seriesIx);\n var labelOptions = pointOptions.labels;\n if (isStacked) {\n if (labelOptions.position === OUTSIDE_END) {\n labelOptions.position = INSIDE_END;\n }\n }\n pointOptions.isStacked = isStacked;\n var color = data.fields.color || series.color;\n if (value < 0 && pointOptions.negativeColor) {\n color = pointOptions.negativeColor;\n }\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var pointType = this.pointType();\n var point = new pointType(value, pointOptions);\n point.color = color;\n var cluster = children[categoryIx];\n if (!cluster) {\n var clusterType = this.clusterType();\n cluster = new clusterType({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n if (isStacked) {\n var stackWrap = this.getStackWrap(series, cluster);\n stackWrap.append(point);\n } else {\n cluster.append(point);\n }\n return point;\n },\n getStackWrap: function (series, cluster) {\n var stack = series.stack;\n var stackGroup = stack ? stack.group || stack : stack;\n var wraps = cluster.children;\n var stackWrap;\n if (typeof stackGroup === datavizConstants.STRING) {\n for (var i = 0; i < wraps.length; i++) {\n if (wraps[i]._stackGroup === stackGroup) {\n stackWrap = wraps[i];\n break;\n }\n }\n } else {\n stackWrap = wraps[0];\n }\n if (!stackWrap) {\n var stackType = this.stackType();\n stackWrap = new stackType({ vertical: !this.options.invertAxes });\n stackWrap._stackGroup = stackGroup;\n cluster.append(stackWrap);\n }\n return stackWrap;\n },\n categorySlot: function (categoryAxis, categoryIx, valueAxis) {\n var options = this.options;\n var categorySlot = categoryAxis.getSlot(categoryIx);\n var startValue = valueAxis.startValue();\n if (options.isStacked) {\n var zeroSlot = valueAxis.getSlot(startValue, startValue, true);\n var stackAxis = options.invertAxes ? X : Y;\n categorySlot[stackAxis + 1] = categorySlot[stackAxis + 2] = zeroSlot[stackAxis + 1];\n }\n return categorySlot;\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n createAnimation: function () {\n this._setAnimationOptions();\n CategoricalChart.fn.createAnimation.call(this);\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation();\n }\n },\n _setChildrenAnimation: function () {\n var this$1 = this;\n var points = this.points;\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n var pointVisual = point.visual;\n if (pointVisual && defined(pointVisual.options.zIndex)) {\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n },\n _setAnimationOptions: function () {\n var options = this.options;\n var animation = options.animation || {};\n var origin;\n if (options.isStacked) {\n var valueAxis = this.seriesValueAxis(options.series[0]);\n origin = valueAxis.getSlot(valueAxis.startValue());\n } else {\n origin = this.categoryAxis.getSlot(0);\n }\n animation.origin = new GeometryPoint(origin.x1, origin.y1);\n animation.vertical = !options.invertAxes;\n }\n });\n setDefaultOptions(BarChart, { animation: { type: BAR } });\n var Candlestick = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var ocSlot = valueAxis.getSlot(value.open, value.close);\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n ocSlot.x1 = lhSlot.x1 = box.x1;\n ocSlot.x2 = lhSlot.x2 = box.x2;\n this.realBody = ocSlot;\n var mid = lhSlot.center().x;\n var points = [];\n points.push([\n [\n mid,\n lhSlot.y1\n ],\n [\n mid,\n ocSlot.y1\n ]\n ]);\n points.push([\n [\n mid,\n ocSlot.y2\n ],\n [\n mid,\n lhSlot.y2\n ]\n ]);\n this.lines = points;\n this.box = lhSlot.clone().wrap(ocSlot);\n if (!this._rendered) {\n this._rendered = true;\n this.createNote();\n }\n this.reflowNote();\n },\n reflowNote: function () {\n if (this.note) {\n this.note.reflow(this.box);\n }\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n this._mainVisual = this.mainVisual(this.options);\n this.visual.append(this._mainVisual);\n this.createOverlay();\n },\n mainVisual: function (options) {\n var group = new Group();\n this.createBody(group, options);\n this.createLines(group, options);\n return group;\n },\n createBody: function (container, options) {\n var body = Path.fromRect(this.realBody.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n if (options.border.width > 0) {\n body.options.set('stroke', {\n color: this.getBorderColor(),\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n alignPathToPixel(body);\n container.append(body);\n if (hasGradientOverlay(options)) {\n container.append(this.createGradientOverlay(body, { baseColor: this.color }, deepExtend({\n end: !options.vertical ? [\n 0,\n 1\n ] : undefined\n }, options.overlay)));\n }\n },\n createLines: function (container, options) {\n this.drawLines(container, options, this.lines, options.line);\n },\n drawLines: function (container, options, lines, lineOptions) {\n if (!lines) {\n return;\n }\n var lineStyle = {\n stroke: {\n color: lineOptions.color || this.color,\n opacity: valueOrDefault(lineOptions.opacity, options.opacity),\n width: lineOptions.width,\n dashType: lineOptions.dashType,\n lineCap: 'butt'\n }\n };\n for (var i = 0; i < lines.length; i++) {\n var line = Path.fromPoints(lines[i], lineStyle);\n alignPathToPixel(line);\n container.append(line);\n }\n },\n getBorderColor: function () {\n var border = this.options.border;\n var borderColor = border.color;\n if (!defined(borderColor)) {\n borderColor = new Color(this.color).brightness(border._brightness).toHex();\n }\n return borderColor;\n },\n createOverlay: function () {\n var overlay = Path.fromRect(this.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null\n });\n this.visual.append(overlay);\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var normalColor = this.color;\n this.color = highlight.color || this.color;\n var overlay = this.mainVisual(deepExtend({}, this.options, { line: { color: this.getBorderColor() } }, highlight));\n this.color = normalColor;\n return overlay;\n },\n highlightVisual: function () {\n return this._mainVisual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n rect: this.box.toRect(),\n visual: this._mainVisual\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n var clipBox = this.owner.pane.clipBox() || box;\n return {\n point: new Point(box.x2 + TOOLTIP_OFFSET, Math.max(box.y1, clipBox.y1) + TOOLTIP_OFFSET),\n align: {\n horizontal: LEFT,\n vertical: TOP\n }\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n }\n });\n setDefaultOptions(Candlestick, {\n vertical: true,\n border: { _brightness: 0.8 },\n line: { width: 2 },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '
    {4:d}
    Open:{0:C}
    High:{1:C}
    Low:{2:C}
    Close:{3:C}
    ' },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n }\n });\n deepExtend(Candlestick.prototype, PointEventsMixin);\n deepExtend(Candlestick.prototype, NoteMixin);\n function areNumbers(values) {\n return countNumbers(values) === values.length;\n }\n var CandlestickChart = CategoricalChart.extend({\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n point.noteText = data.fields.noteText;\n }\n this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n return Candlestick;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var pointType = this.pointType();\n var value = data.valueFields;\n var pointOptions = deepExtend({}, series);\n var color = data.fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n if (series.type === CANDLESTICK) {\n if (value.open > value.close) {\n color = data.fields.downColor || series.downColor || series.color;\n }\n }\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.vertical = !this.options.invertAxes;\n var point = new pointType(value, pointOptions);\n point.color = color;\n return point;\n },\n splitValue: function (value) {\n return [\n value.low,\n value.open,\n value.close,\n value.high\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var parts = this.splitValue(value);\n var axisRange = this.valueAxisRanges[axisName];\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([axisRange.min])),\n max: Math.max.apply(Math, parts.concat([axisRange.max]))\n };\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.open, value.high, value.low, value.close, point.category);\n },\n animationPoints: function () {\n return this.points;\n }\n });\n deepExtend(CandlestickChart.prototype, ClipAnimationMixin);\n var BoxPlot = Candlestick.extend({\n init: function (value, options) {\n Candlestick.fn.init.call(this, value, options);\n this.createNote();\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var whiskerSlot, boxSlot;\n this.boxSlot = boxSlot = valueAxis.getSlot(value.q1, value.q3);\n this.realBody = boxSlot;\n this.reflowBoxSlot(box);\n this.whiskerSlot = whiskerSlot = valueAxis.getSlot(value.lower, value.upper);\n this.reflowWhiskerSlot(box);\n var medianSlot = valueAxis.getSlot(value.median);\n if (value.mean) {\n var meanSlot = valueAxis.getSlot(value.mean);\n this.meanPoints = this.calcMeanPoints(box, meanSlot);\n }\n this.whiskerPoints = this.calcWhiskerPoints(boxSlot, whiskerSlot);\n this.medianPoints = this.calcMedianPoints(box, medianSlot);\n this.box = whiskerSlot.clone().wrap(boxSlot);\n this.reflowNote();\n },\n reflowBoxSlot: function (box) {\n this.boxSlot.x1 = box.x1;\n this.boxSlot.x2 = box.x2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.x1 = box.x1;\n this.whiskerSlot.x2 = box.x2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n box.x1,\n meanSlot.y1\n ],\n [\n box.x2,\n meanSlot.y1\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().x;\n return [\n [\n [\n mid - 5,\n whiskerSlot.y1\n ],\n [\n mid + 5,\n whiskerSlot.y1\n ],\n [\n mid,\n whiskerSlot.y1\n ],\n [\n mid,\n boxSlot.y1\n ]\n ],\n [\n [\n mid - 5,\n whiskerSlot.y2\n ],\n [\n mid + 5,\n whiskerSlot.y2\n ],\n [\n mid,\n whiskerSlot.y2\n ],\n [\n mid,\n boxSlot.y2\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n box.x1,\n medianSlot.y1\n ],\n [\n box.x2,\n medianSlot.y1\n ]\n ]];\n },\n renderOutliers: function (options) {\n var this$1 = this;\n var value = this.value;\n var outliers = value.outliers || [];\n var outerFence = Math.abs(value.q3 - value.q1) * 3;\n var elements = [];\n var markers = options.markers || {};\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i];\n if (outlierValue < value.q3 + outerFence && outlierValue > value.q1 - outerFence) {\n markers = options.outliers;\n } else {\n markers = options.extremes;\n }\n var markersBorder = deepExtend({}, markers.border);\n if (!defined(markersBorder.color)) {\n if (defined(this$1.color)) {\n markersBorder.color = this$1.color;\n } else {\n markersBorder.color = new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n }\n var shape = new ShapeElement({\n type: markers.type,\n width: markers.size,\n height: markers.size,\n rotation: markers.rotation,\n background: markers.background,\n border: markersBorder,\n opacity: markers.opacity\n });\n shape.value = outlierValue;\n elements.push(shape);\n }\n this.reflowOutliers(elements);\n return elements;\n },\n reflowOutliers: function (outliers) {\n var this$1 = this;\n var valueAxis = this.owner.seriesValueAxis(this.options);\n var center = this.box.center();\n for (var i = 0; i < outliers.length; i++) {\n var outlierValue = outliers[i].value;\n var markerBox = valueAxis.getSlot(outlierValue);\n if (this$1.options.vertical) {\n markerBox.move(center.x);\n } else {\n markerBox.move(undefined, center.y);\n }\n this$1.box = this$1.box.wrap(markerBox);\n outliers[i].reflow(markerBox);\n }\n },\n mainVisual: function (options) {\n var group = Candlestick.fn.mainVisual.call(this, options);\n var outliers = this.renderOutliers(options);\n for (var i = 0; i < outliers.length; i++) {\n var element = outliers[i].getElement();\n if (element) {\n group.append(element);\n }\n }\n return group;\n },\n createLines: function (container, options) {\n this.drawLines(container, options, this.whiskerPoints, options.whiskers);\n this.drawLines(container, options, this.medianPoints, options.median);\n this.drawLines(container, options, this.meanPoints, options.mean);\n },\n getBorderColor: function () {\n if (this.color) {\n return this.color;\n }\n return Candlestick.fn.getBorderColor.call(this);\n }\n });\n setDefaultOptions(BoxPlot, {\n border: { _brightness: 0.8 },\n line: { width: 2 },\n median: { color: '#f6f6f6' },\n mean: {\n width: 2,\n dashType: 'dash',\n color: '#f6f6f6'\n },\n overlay: { gradient: 'glass' },\n tooltip: { format: '' + '' + '' + '' + '' + '' + '' + '' + '
    {6:d}
    Lower:{0:C}
    Q1:{1:C}
    Median:{2:C}
    Mean:{5:C}
    Q3:{3:C}
    Upper:{4:C}
    ' },\n highlight: {\n opacity: 1,\n border: {\n width: 1,\n opacity: 1\n },\n line: {\n width: 1,\n opacity: 1\n }\n },\n notes: {\n visible: true,\n label: {}\n },\n outliers: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: datavizConstants.CROSS,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n },\n extremes: {\n visible: true,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n background: WHITE,\n border: {\n width: 2,\n opacity: 1\n },\n opacity: 0\n }\n });\n deepExtend(BoxPlot.prototype, PointEventsMixin);\n var VerticalBoxPlot = BoxPlot.extend({\n reflowBoxSlot: function (box) {\n this.boxSlot.y1 = box.y1;\n this.boxSlot.y2 = box.y2;\n },\n reflowWhiskerSlot: function (box) {\n this.whiskerSlot.y1 = box.y1;\n this.whiskerSlot.y2 = box.y2;\n },\n calcMeanPoints: function (box, meanSlot) {\n return [[\n [\n meanSlot.x1,\n box.y1\n ],\n [\n meanSlot.x1,\n box.y2\n ]\n ]];\n },\n calcWhiskerPoints: function (boxSlot, whiskerSlot) {\n var mid = whiskerSlot.center().y;\n return [\n [\n [\n whiskerSlot.x1,\n mid - 5\n ],\n [\n whiskerSlot.x1,\n mid + 5\n ],\n [\n whiskerSlot.x1,\n mid\n ],\n [\n boxSlot.x1,\n mid\n ]\n ],\n [\n [\n whiskerSlot.x2,\n mid - 5\n ],\n [\n whiskerSlot.x2,\n mid + 5\n ],\n [\n whiskerSlot.x2,\n mid\n ],\n [\n boxSlot.x2,\n mid\n ]\n ]\n ];\n },\n calcMedianPoints: function (box, medianSlot) {\n return [[\n [\n medianSlot.x1,\n box.y1\n ],\n [\n medianSlot.x1,\n box.y2\n ]\n ]];\n }\n });\n var BoxPlotChart = CandlestickChart.extend({\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var value = data.valueFields;\n var valueParts = this.splitValue(value);\n var hasValue = areNumbers(valueParts);\n var dataItem = series.data[categoryIx];\n var categoryPoints = this.categoryPoints[categoryIx];\n var point;\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n if (hasValue) {\n point = this.createPoint(data, fields);\n }\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n if (point) {\n this.updateRange(value, fields);\n cluster.append(point);\n point.categoryIx = categoryIx;\n point.category = category;\n point.series = series;\n point.seriesIx = seriesIx;\n point.owner = this;\n point.dataItem = dataItem;\n }\n this.points.push(point);\n categoryPoints.push(point);\n },\n pointType: function () {\n if (this.options.invertAxes) {\n return VerticalBoxPlot;\n }\n return BoxPlot;\n },\n splitValue: function (value) {\n return [\n value.lower,\n value.q1,\n value.median,\n value.q3,\n value.upper\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n var parts = this.splitValue(value).concat(this.filterOutliers(value.outliers));\n if (defined(value.mean)) {\n parts = parts.concat(value.mean);\n }\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange = this.valueAxisRanges[axisName] = {\n min: Math.min.apply(Math, parts.concat([axisRange.min])),\n max: Math.max.apply(Math, parts.concat([axisRange.max]))\n };\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.lower, value.q1, value.median, value.q3, value.upper, value.mean, point.category);\n },\n filterOutliers: function (items) {\n var length = (items || []).length;\n var result = [];\n for (var i = 0; i < length; i++) {\n var item = items[i];\n if (defined(item) && item !== null) {\n result.push(item);\n }\n }\n return result;\n }\n });\n var ScatterErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axes = this.chart.seriesAxes(this.series);\n var axis = this.isVertical ? axes.y : axes.x;\n return axis;\n }\n });\n function hasValue(value) {\n return defined(value) && value !== null;\n }\n var ScatterChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n this.render();\n },\n _initFields: function () {\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n addErrorBar: function (point, field, fields) {\n var value = point.value[field];\n var valueErrorField = field + 'Value';\n var lowField = field + 'ErrorLow';\n var highField = field + 'ErrorHigh';\n var seriesIx = fields.seriesIx;\n var series = fields.series;\n var errorBars = point.options.errorBars;\n var lowValue = fields[lowField];\n var highValue = fields[highField];\n if (isNumber(value)) {\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n }\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || {\n x: [],\n y: []\n };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] || new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\n }\n },\n addPointErrorBar: function (errorRange, point, field) {\n var low = errorRange.low;\n var high = errorRange.high;\n var series = point.series;\n var options = point.options.errorBars;\n var isVertical = field === Y;\n var item = {};\n point[field + 'Low'] = low;\n point[field + 'High'] = high;\n point.errorBars = point.errorBars || [];\n var errorBar = new ScatterErrorBar(low, high, isVertical, this, series, options);\n point.errorBars.push(errorBar);\n point.append(errorBar);\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n },\n addValue: function (value, fields) {\n var x = value.x;\n var y = value.y;\n var seriesIx = fields.seriesIx;\n var series = this.options.series[seriesIx];\n var missingValues = this.seriesMissingValues(series);\n var seriesPoints = this.seriesPoints[seriesIx];\n var pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\n var point;\n if (pointValue) {\n point = this.createPoint(pointValue, fields);\n if (point) {\n $.extend(point, fields);\n this.addErrorBar(point, X, fields);\n this.addErrorBar(point, Y, fields);\n }\n this.updateRange(pointValue, fields.series);\n }\n this.points.push(point);\n seriesPoints.push(point);\n },\n seriesMissingValues: function (series) {\n return series.missingValues;\n },\n createMissingValue: function () {\n },\n updateRange: function (value, series) {\n var intlService = this.chartService.intl;\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var x = value.x;\n var y = value.y;\n var xAxisRange = this.xAxisRanges[xAxisName];\n var yAxisRange = this.yAxisRanges[yAxisName];\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] = xAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] = yAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n },\n evalPointOptions: function (options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem\n }, state);\n }\n return pointOptions;\n },\n pointType: function () {\n return LinePoint;\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: { opacity: series.opacity },\n tooltip: { format: this.options.tooltip.format },\n labels: { format: this.options.labels.format }\n }, series);\n }\n return options;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointOptions = this.pointOptions(series, fields.seriesIx);\n var color = fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n seriesAxes: function (series) {\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var plotArea = this.plotArea;\n var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n var yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n if (!xAxis) {\n throw new Error('Unable to locate X axis with name ' + xAxisName);\n }\n if (!yAxis) {\n throw new Error('Unable to locate Y axis with name ' + yAxisName);\n }\n return {\n x: xAxis,\n y: yAxis\n };\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var seriesAxes = this$1.seriesAxes(fields.series);\n var slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n var slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.box = targetBox;\n },\n pointSlot: function (slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var seriesPoints = ref.seriesPoints;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var currentSeriesPoints = seriesPoints[seriesIx];\n if (!currentSeriesPoints) {\n seriesPoints[seriesIx] = [];\n }\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$1.valueFields;\n var fields = ref$1.fields;\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1\n }, fields));\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n });\n setDefaultOptions(ScatterChart, {\n series: [],\n tooltip: { format: '{0}, {1}' },\n labels: { format: '{0}, {1}' },\n clip: true\n });\n deepExtend(ScatterChart.prototype, ClipAnimationMixin, { _bindPoint: CategoricalChart.prototype._bindPoint });\n var Bubble = LinePoint.extend({\n init: function (value, options) {\n LinePoint.fn.init.call(this, value, options);\n this.category = value.category;\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var border = highlight.border;\n var markers = this.options.markers;\n var center = this.box.center();\n var radius = (markers.size + markers.border.width + border.width) / 2;\n var highlightGroup = new Group();\n var shadow = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y + radius / 5 + border.width / 2\n ], radius + border.width / 2), {\n stroke: { color: 'none' },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [\n {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n },\n {\n offset: 1,\n color: markers.background,\n opacity: 0\n }\n ]\n })\n });\n var overlay = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y\n ], radius), {\n stroke: {\n color: border.color || new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex(),\n width: border.width,\n opacity: border.opacity\n },\n fill: {\n color: markers.background,\n opacity: highlight.opacity\n }\n });\n highlightGroup.append(shadow, overlay);\n return highlightGroup;\n }\n });\n Bubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: { position: CENTER },\n highlight: {\n opacity: 1,\n border: {\n color: '#fff',\n width: 2,\n opacity: 1\n }\n }\n });\n Bubble.prototype.defaults.highlight.zIndex = undefined;\n var BubbleChart = ScatterChart.extend({\n _initFields: function () {\n this._maxSize = MIN_VALUE;\n ScatterChart.fn._initFields.call(this);\n },\n addValue: function (value, fields) {\n if (value.size !== null && (value.size > 0 || value.size < 0 && fields.series.negativeValues.visible)) {\n this._maxSize = Math.max(this._maxSize, Math.abs(value.size));\n ScatterChart.fn.addValue.call(this, value, fields);\n } else {\n this.points.push(null);\n this.seriesPoints[fields.seriesIx].push(null);\n }\n },\n reflow: function (box) {\n this.updateBubblesSize(box);\n ScatterChart.fn.reflow.call(this, box);\n },\n pointType: function () {\n return Bubble;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointsCount = series.data.length;\n var delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n var animationOptions = {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay,\n type: BUBBLE\n };\n var color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(series.negativeValues.color, color);\n }\n var pointOptions = deepExtend({\n labels: {\n animation: {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay\n }\n }\n }, this.pointOptions(series, fields.seriesIx), {\n markers: {\n type: CIRCLE,\n border: series.border,\n opacity: series.opacity,\n animation: animationOptions\n }\n });\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.markers.background = color;\n var point = new Bubble(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n updateBubblesSize: function (box) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var boxSize = Math.min(box.width(), box.height());\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesPoints = this$1.seriesPoints[seriesIx];\n var minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n var maxSize = currentSeries.maxSize || boxSize * 0.2;\n var minR = minSize / 2;\n var maxR = maxSize / 2;\n var minArea = Math.PI * minR * minR;\n var maxArea = Math.PI * maxR * maxR;\n var areaRange = maxArea - minArea;\n var areaRatio = areaRange / this$1._maxSize;\n for (var pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n var point = seriesPoints[pointIx];\n if (point) {\n var area = Math.abs(point.value.size) * areaRatio;\n var radius = Math.sqrt((minArea + area) / Math.PI);\n var baseZIndex = valueOrDefault(point.options.zIndex, 0);\n var zIndex = baseZIndex + (1 - radius / maxR);\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: { zIndex: zIndex + 1 }\n });\n }\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n },\n createAnimation: function () {\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(BubbleChart, {\n tooltip: { format: '{3}' },\n labels: { format: '{3}' }\n });\n var Target = ShapeElement.extend({});\n deepExtend(Target.prototype, PointEventsMixin);\n var Bullet = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n },\n render: function () {\n var options = this.options;\n if (!this._rendered) {\n this._rendered = true;\n if (defined(this.value.target)) {\n this.target = new Target({\n type: options.target.shape,\n background: options.target.color || this.color,\n opacity: options.opacity,\n zIndex: options.zIndex,\n border: options.target.border,\n vAlign: TOP,\n align: RIGHT\n });\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n this.append(this.target);\n }\n this.createNote();\n }\n },\n reflow: function (box) {\n this.render();\n var ref = this;\n var options = ref.options;\n var target = ref.target;\n var chart = ref.owner;\n var invertAxes = options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.options);\n var categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n var targetValueSlot = valueAxis.getSlot(this.value.target);\n var targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n var targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n if (target) {\n var targetSlot = new Box(targetSlotX.x1, targetSlotY.y1, targetSlotX.x2, targetSlotY.y2);\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n target.reflow(targetSlot);\n }\n if (this.note) {\n this.note.reflow(box);\n }\n this.box = box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n var body = Path.fromRect(this.box.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n if (options.border.width > 0) {\n body.options.set('stroke', {\n color: options.border.color || this.color,\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n this.bodyVisual = body;\n alignPathToPixel(body);\n this.visual.append(body);\n },\n createAnimation: function () {\n if (this.bodyVisual) {\n this.animation = Animation.create(this.bodyVisual, this.options.animation);\n }\n },\n createHighlight: function (style) {\n return Path.fromRect(this.box.toRect(), style);\n },\n highlightVisual: function () {\n return this.bodyVisual;\n },\n highlightVisualArgs: function () {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n }\n });\n Bullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n setDefaultOptions(Bullet, {\n border: { width: 1 },\n vertical: false,\n opacity: 1,\n target: {\n shape: '',\n border: {\n width: 0,\n color: 'green'\n },\n line: { width: 2 }\n },\n tooltip: { format: 'Current: {0}
    Target: {1}' }\n });\n deepExtend(Bullet.prototype, PointEventsMixin);\n deepExtend(Bullet.prototype, NoteMixin);\n var BulletChart = CategoricalChart.extend({\n init: function (plotArea, options) {\n wrapData(options);\n CategoricalChart.fn.init.call(this, plotArea, options);\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n plotRange: function (point) {\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n point.value.current || axisCrossingValue\n ];\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var value = data.valueFields;\n var bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n var color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(bulletOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n var bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n cluster.append(bullet);\n return bullet;\n },\n updateRange: function (value, fields) {\n var current = value.current;\n var target = value.target;\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, current, target);\n axisRange.max = Math.max(axisRange.max, current, target);\n }\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n },\n pointValue: function (data) {\n return data.valueFields.current;\n },\n aboveAxis: function (point) {\n var value = point.value.current;\n return value > 0;\n },\n createAnimation: function () {\n var this$1 = this;\n var points = this.points;\n this._setAnimationOptions();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n });\n BulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n setDefaultOptions(BulletChart, { animation: { type: BAR } });\n function wrapData(options) {\n var series = options.series;\n for (var i = 0; i < series.length; i++) {\n var seriesItem = series[i];\n var data = seriesItem.data;\n if (data && !isArray(data[0]) && !isObject(data[0])) {\n seriesItem.data = [data];\n }\n }\n }\n var BaseTooltip = Class.extend({\n init: function (chartService, options) {\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n },\n getStyle: function (options, point) {\n var background = options.background;\n var border = options.border.color;\n if (point) {\n var pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n var padding = getSpacing(options.padding || {}, 'auto');\n return {\n backgroundColor: background,\n borderColor: border,\n font: options.font,\n color: options.color,\n opacity: options.opacity,\n borderWidth: styleValue(options.border.width),\n paddingTop: styleValue(padding.top),\n paddingBottom: styleValue(padding.bottom),\n paddingLeft: styleValue(padding.left),\n paddingRight: styleValue(padding.right)\n };\n },\n show: function (options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n var style = this.getStyle(tooltipOptions, point);\n options.style = style;\n if (!defined(tooltipOptions.color) && new Color(style.backgroundColor).percBrightness() > 180) {\n options.className = 'k-chart-tooltip-inverse';\n }\n this.chartService.notify(SHOW_TOOLTIP, options);\n },\n hide: function () {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n },\n destroy: function () {\n delete this.chartService;\n }\n });\n setDefaultOptions(BaseTooltip, {\n border: { width: 1 },\n opacity: 1\n });\n var CrosshairTooltip = BaseTooltip.extend({\n init: function (chartService, crosshair, options) {\n BaseTooltip.fn.init.call(this, chartService, options);\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n },\n initAxisName: function () {\n var axis = this.crosshair.axis;\n var plotArea = axis.plotArea;\n var name;\n if (plotArea.categoryAxis) {\n name = axis.getCategory ? 'categoryAxis' : 'valueAxis';\n } else {\n name = axis.options.vertical ? 'yAxis' : 'xAxis';\n }\n this.axisName = name;\n },\n showAt: function (point) {\n var ref = this;\n var axis = ref.crosshair.axis;\n var options = ref.options;\n var value = axis[options.stickyMode ? 'getCategory' : 'getValue'](point);\n var formattedValue = value;\n if (options.format) {\n formattedValue = this.formatService.auto(options.format, value);\n } else if (axis.options.type === DATE) {\n formattedValue = this.formatService.auto(axis.options.labels.dateFormats[axis.options.baseUnit], value);\n }\n this.show({\n point: point,\n anchor: this.getAnchor(),\n crosshair: this.crosshair,\n value: formattedValue,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n }, this.options);\n },\n hide: function () {\n this.chartService.notify(HIDE_TOOLTIP, {\n crosshair: this.crosshair,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n });\n },\n getAnchor: function () {\n var ref = this;\n var crosshair = ref.crosshair;\n var ref_options = ref.options;\n var position = ref_options.position;\n var padding = ref_options.padding;\n var vertical = !crosshair.axis.options.vertical;\n var lineBox = crosshair.line.bbox();\n var horizontalAlign, verticalAlign, point;\n if (vertical) {\n horizontalAlign = CENTER;\n if (position === BOTTOM) {\n verticalAlign = TOP;\n point = lineBox.bottomLeft().translate(0, padding);\n } else {\n verticalAlign = BOTTOM;\n point = lineBox.topLeft().translate(0, -padding);\n }\n } else {\n verticalAlign = CENTER;\n if (position === LEFT) {\n horizontalAlign = RIGHT;\n point = lineBox.topLeft().translate(-padding, 0);\n } else {\n horizontalAlign = LEFT;\n point = lineBox.topRight().translate(padding, 0);\n }\n }\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n });\n setDefaultOptions(CrosshairTooltip, { padding: 10 });\n var Crosshair = ChartElement.extend({\n init: function (chartService, axis, options) {\n ChartElement.fn.init.call(this, options);\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n var tooltipOptions = this.options.tooltip;\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this, deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode }));\n }\n },\n showAt: function (point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n },\n hide: function () {\n this.line.visible(false);\n if (this.tooltip) {\n this.tooltip.hide();\n }\n },\n moveLine: function () {\n var ref = this;\n var axis = ref.axis;\n var point = ref.point;\n var vertical = axis.options.vertical;\n var box = this.getBox();\n var dim = vertical ? Y : X;\n var lineStart = new GeometryPoint(box.x1, box.y1);\n var lineEnd;\n if (vertical) {\n lineEnd = new GeometryPoint(box.x2, box.y1);\n } else {\n lineEnd = new GeometryPoint(box.x1, box.y2);\n }\n if (point) {\n if (this.stickyMode) {\n var slot = axis.getSlot(axis.pointCategoryIndex(point));\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n } else {\n lineStart[dim] = lineEnd[dim] = point[dim];\n }\n }\n this.box = box;\n this.line.moveTo(lineStart).lineTo(lineEnd);\n },\n getBox: function () {\n var axis = this.axis;\n var axes = axis.pane.axes;\n var length = axes.length;\n var vertical = axis.options.vertical;\n var box = axis.lineBox().clone();\n var dim = vertical ? X : Y;\n var axisLineBox;\n for (var i = 0; i < length; i++) {\n var currentAxis = axes[i];\n if (currentAxis.options.vertical !== vertical) {\n if (!axisLineBox) {\n axisLineBox = currentAxis.lineBox().clone();\n } else {\n axisLineBox.wrap(currentAxis.lineBox());\n }\n }\n }\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n return box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n this.line = new Path({\n stroke: {\n color: options.color,\n width: options.width,\n opacity: options.opacity,\n dashType: options.dashType\n },\n visible: false\n });\n this.moveLine();\n this.visual.append(this.line);\n },\n destroy: function () {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n ChartElement.fn.destroy.call(this);\n }\n });\n setDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: { visible: false }\n });\n var ChartContainer = ChartElement.extend({\n init: function (options, pane) {\n ChartElement.fn.init.call(this, options);\n this.pane = pane;\n },\n shouldClip: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n if (children[i].options.clip === true) {\n return true;\n }\n }\n return false;\n },\n _clipBox: function () {\n return this.pane.chartsBox();\n },\n createVisual: function () {\n this.visual = new Group({ zIndex: 0 });\n if (this.shouldClip()) {\n var clipBox = this.clipBox = this._clipBox();\n var clipRect = clipBox.toRect();\n var clipPath = Path.fromRect(clipRect);\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n },\n stackRoot: function () {\n return this;\n },\n unclipLabels: function () {\n var ref = this;\n var charts = ref.children;\n var clipBox = ref.clipBox;\n for (var i = 0; i < charts.length; i++) {\n var points = charts[i].points || {};\n var length = points.length;\n for (var j = 0; j < length; j++) {\n var point = points[j];\n if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n if (point.unclipElements) {\n point.unclipElements();\n } else {\n var label = point.label;\n var note = point.note;\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n },\n destroy: function () {\n ChartElement.fn.destroy.call(this);\n delete this.parent;\n }\n });\n ChartContainer.prototype.isStackRoot = true;\n var Pane = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.id = paneID();\n this.createTitle();\n this.content = new ChartElement();\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n this.axes = [];\n this.charts = [];\n },\n createTitle: function () {\n var titleOptions = this.options.title;\n if (isObject(titleOptions)) {\n titleOptions = deepExtend({}, titleOptions, {\n align: titleOptions.position,\n position: TOP\n });\n }\n this.title = dataviz.Title.buildTitle(titleOptions, this, Pane.prototype.options.title);\n },\n appendAxis: function (axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n },\n appendChart: function (chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n },\n empty: function () {\n var this$1 = this;\n var plotArea = this.parent;\n if (plotArea) {\n for (var i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this$1.axes[i]);\n }\n for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n plotArea.removeChart(this$1.charts[i$1]);\n }\n }\n this.axes = [];\n this.charts = [];\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n },\n reflow: function (targetBox) {\n var content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n BoxElement.fn.reflow.call(this, targetBox);\n if (content) {\n this.children.push(content);\n }\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n },\n visualStyle: function () {\n var style = BoxElement.fn.visualStyle.call(this);\n style.zIndex = -10;\n return style;\n },\n renderComplete: function () {\n if (this.options.visible) {\n this.createGridLines();\n }\n },\n stackRoot: function () {\n return this;\n },\n clipRoot: function () {\n return this;\n },\n createGridLines: function () {\n var axes = this.axes;\n var allAxes = axes.concat(this.parent.axes);\n var vGridLines = [];\n var hGridLines = [];\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var vertical = axis.options.vertical;\n var gridLines = vertical ? vGridLines : hGridLines;\n for (var j = 0; j < allAxes.length; j++) {\n if (gridLines.length === 0) {\n var altAxis = allAxes[j];\n if (vertical !== altAxis.options.vertical) {\n append(gridLines, axis.createGridLines(altAxis));\n }\n }\n }\n }\n },\n refresh: function () {\n this.visual.clear();\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n this.visual.append(this.content.visual);\n this.renderComplete();\n },\n chartsBox: function () {\n var axes = this.axes;\n var length = axes.length;\n var chartsBox = new Box();\n for (var idx = 0; idx < length; idx++) {\n var axis = axes[idx];\n var axisValueField = axis.options.vertical ? Y : X;\n var lineBox = axis.lineBox();\n chartsBox[axisValueField + 1] = lineBox[axisValueField + 1];\n chartsBox[axisValueField + 2] = lineBox[axisValueField + 2];\n }\n if (chartsBox.x2 === 0) {\n var allAxes = this.parent.axes;\n var length$1 = allAxes.length;\n for (var idx$1 = 0; idx$1 < length$1; idx$1++) {\n var axis$1 = allAxes[idx$1];\n if (!axis$1.options.vertical) {\n var lineBox$1 = axis$1.lineBox();\n chartsBox.x1 = lineBox$1.x1;\n chartsBox.x2 = lineBox$1.x2;\n }\n }\n }\n return chartsBox;\n },\n clipBox: function () {\n return this.chartContainer.clipBox;\n }\n });\n var ID = 1;\n function paneID() {\n return 'pane' + ID++;\n }\n Pane.prototype.isStackRoot = true;\n setDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: { align: LEFT },\n visible: true\n });\n function segmentVisible(series, fields, index) {\n var visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n var pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n }\n function bindSegments(series) {\n var data = series.data;\n var points = [];\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < data.length; idx++) {\n var pointData = SeriesBinder.current.bindPoint(series, idx);\n var value = pointData.valueFields.value;\n if (isString(value)) {\n value = parseFloat(value);\n }\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n pointData.value = Math.abs(value);\n points.push(pointData);\n if (pointData.visible) {\n sum += pointData.value;\n }\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n return {\n total: sum,\n points: points,\n count: count\n };\n }\n function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n }\n function filterSeriesByType(series, types) {\n var result = [];\n var seriesTypes = [].concat(types);\n for (var idx = 0; idx < series.length; idx++) {\n var currentSeries = series[idx];\n if (inArray(currentSeries.type, seriesTypes)) {\n result.push(currentSeries);\n }\n }\n return result;\n }\n function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n var key = '_date_' + field;\n var value = row[key];\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n return value;\n }\n function isDateAxis(axisOptions, sampleCategory) {\n var type = axisOptions.type;\n var dateCategory = sampleCategory instanceof Date;\n return !type && dateCategory || equalsIgnoreCase(type, DATE);\n }\n function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n }\n var PlotAreaBase = ChartElement.extend({\n init: function (series, options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n this.createPanes();\n this.render();\n this.createCrosshairs();\n },\n initFields: function () {\n },\n initSeries: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n },\n createPanes: function () {\n var this$1 = this;\n var defaults = { title: { color: (this.options.title || {}).color } };\n var panes = [];\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n function setTitle(options, defaults) {\n if (isString(options.title)) {\n options.title = { text: options.title };\n }\n options.title = deepExtend({}, defaults.title, options.title);\n }\n for (var i = 0; i < panesLength; i++) {\n var options = paneOptions[i] || {};\n setTitle(options, defaults);\n var currentPane = new Pane(options);\n currentPane.paneIndex = i;\n panes.push(currentPane);\n this$1.append(currentPane);\n }\n this.panes = panes;\n },\n createCrosshairs: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\n }\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n for (var j = 0; j < pane.axes.length; j++) {\n var axis = pane.axes[j];\n if (axis.options.crosshair && axis.options.crosshair.visible) {\n var currentCrosshair = new Crosshair(this$1.chartService, axis, axis.options.crosshair);\n this$1.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n },\n removeCrosshairs: function (pane) {\n var crosshairs = this.crosshairs;\n var axes = pane.axes;\n for (var i = crosshairs.length - 1; i >= 0; i--) {\n for (var j = 0; j < axes.length; j++) {\n if (crosshairs[i].axis === axes[j]) {\n crosshairs.splice(i, 1);\n break;\n }\n }\n }\n },\n hideCrosshairs: function () {\n var crosshairs = this.crosshairs;\n for (var idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n },\n findPane: function (name) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].options.name === name) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane || panes[0];\n },\n findPointPane: function (point) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].box.containsPoint(point)) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane;\n },\n appendAxis: function (axis) {\n var pane = this.findPane(axis.options.pane);\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n },\n removeAxis: function (axisToRemove) {\n var this$1 = this;\n var filteredAxes = [];\n for (var i = 0; i < this.axes.length; i++) {\n var axis = this$1.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n this.axes = filteredAxes;\n },\n appendChart: function (chart, pane) {\n this.charts.push(chart);\n if (pane) {\n pane.appendChart(chart);\n } else {\n this.append(chart);\n }\n },\n removeChart: function (chartToRemove) {\n var this$1 = this;\n var filteredCharts = [];\n for (var i = 0; i < this.charts.length; i++) {\n var chart = this$1.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n this.charts = filteredCharts;\n },\n addToLegend: function (series) {\n var count = series.length;\n var legend = this.options.legend;\n var labels = legend.labels || {};\n var inactiveItems = legend.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n var data = [];\n for (var i = 0; i < count; i++) {\n var currentSeries = series[i];\n var seriesVisible = currentSeries.visible !== false;\n if (currentSeries.visibleInLegend === false) {\n continue;\n }\n var text = currentSeries.name;\n var labelTemplate = seriesVisible ? getTemplate(labels) : getTemplate(inactiveItemsLabels) || getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n text: hasValue(text) ? text : '',\n series: currentSeries\n });\n }\n var defaults = currentSeries._defaults;\n var color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var itemLabelOptions = void 0, markerColor = void 0;\n if (seriesVisible) {\n itemLabelOptions = {};\n markerColor = color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = inactiveItems.markers.color;\n }\n if (hasValue(text) && text !== '') {\n data.push({\n text: text,\n labels: itemLabelOptions,\n markerColor: markerColor,\n series: currentSeries,\n active: seriesVisible\n });\n }\n }\n append(legend.items, data);\n },\n groupAxes: function (panes) {\n var xAxes = [];\n var yAxes = [];\n for (var paneIx = 0; paneIx < panes.length; paneIx++) {\n var paneAxes = panes[paneIx].axes;\n for (var axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n var axis = paneAxes[axisIx];\n if (axis.options.vertical) {\n yAxes.push(axis);\n } else {\n xAxes.push(axis);\n }\n }\n }\n return {\n x: xAxes,\n y: yAxes,\n any: xAxes.concat(yAxes)\n };\n },\n groupSeriesByPane: function () {\n var this$1 = this;\n var series = this.series;\n var seriesByPane = {};\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var pane = this$1.seriesPaneName(currentSeries);\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [currentSeries];\n }\n }\n return seriesByPane;\n },\n filterVisibleSeries: function (series) {\n var result = [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (currentSeries.visible !== false) {\n result.push(currentSeries);\n }\n }\n return result;\n },\n reflow: function (targetBox) {\n var options = this.options.plotArea;\n var panes = this.panes;\n var margin = getSpacing(options.margin);\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n this.reflowAxes(panes);\n this.reflowCharts(panes);\n },\n redraw: function (panes) {\n var this$1 = this;\n var panesArray = [].concat(panes);\n this.initSeries();\n for (var i = 0; i < panesArray.length; i++) {\n this$1.removeCrosshairs(panesArray[i]);\n panesArray[i].empty();\n }\n this.render(panesArray);\n this.reflowAxes(this.panes);\n this.reflowCharts(panesArray);\n this.createCrosshairs(panesArray);\n for (var i$1 = 0; i$1 < panesArray.length; i$1++) {\n panesArray[i$1].refresh();\n }\n },\n axisCrossingValues: function (axis, crossingAxes) {\n var options = axis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n var valuesToAdd = crossingAxes.length - crossingValues.length;\n var defaultValue = crossingValues[0] || 0;\n for (var i = 0; i < valuesToAdd; i++) {\n crossingValues.push(defaultValue);\n }\n return crossingValues;\n },\n alignAxisTo: function (axis, targetAxis, crossingValue, targetCrossingValue) {\n var slot = axis.getSlot(crossingValue, crossingValue, true);\n var slotEdge = axis.options.reverse ? 2 : 1;\n var targetSlot = targetAxis.getSlot(targetCrossingValue, targetCrossingValue, true);\n var targetEdge = targetAxis.options.reverse ? 2 : 1;\n var axisBox = axis.box.translate(targetSlot[X + targetEdge] - slot[X + slotEdge], targetSlot[Y + targetEdge] - slot[Y + slotEdge]);\n if (axis.pane !== targetAxis.pane) {\n axisBox.translate(0, axis.pane.box.y1 - targetAxis.pane.box.y1);\n }\n axis.reflow(axisBox);\n },\n alignAxes: function (xAxes, yAxes) {\n var this$1 = this;\n var xAnchor = xAxes[0];\n var yAnchor = yAxes[0];\n var xAnchorCrossings = this.axisCrossingValues(xAnchor, yAxes);\n var yAnchorCrossings = this.axisCrossingValues(yAnchor, xAxes);\n var leftAnchors = {};\n var rightAnchors = {};\n var topAnchors = {};\n var bottomAnchors = {};\n for (var i = 0; i < yAxes.length; i++) {\n var axis = yAxes[i];\n var pane = axis.pane;\n var paneId = pane.id;\n var visible = axis.options.visible !== false;\n var anchor = paneAnchor(xAxes, pane) || xAnchor;\n var anchorCrossings = xAnchorCrossings;\n if (anchor !== xAnchor) {\n anchorCrossings = this$1.axisCrossingValues(anchor, yAxes);\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (axis.options._overlap) {\n continue;\n }\n if (round(axis.lineBox().x1) === round(anchor.lineBox().x1)) {\n if (leftAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(leftAnchors[paneId].box, LEFT).translate(-axis.options.margin, 0));\n }\n if (visible) {\n leftAnchors[paneId] = axis;\n }\n }\n if (round(axis.lineBox().x2) === round(anchor.lineBox().x2)) {\n if (!axis._mirrored) {\n axis.options.labels.mirror = !axis.options.labels.mirror;\n axis._mirrored = true;\n }\n this$1.alignAxisTo(axis, anchor, yAnchorCrossings[i], anchorCrossings[i]);\n if (rightAnchors[paneId]) {\n axis.reflow(axis.box.alignTo(rightAnchors[paneId].box, RIGHT).translate(axis.options.margin, 0));\n }\n if (visible) {\n rightAnchors[paneId] = axis;\n }\n }\n if (i !== 0 && yAnchor.pane === axis.pane) {\n axis.alignTo(yAnchor);\n axis.reflow(axis.box);\n }\n }\n for (var i$1 = 0; i$1 < xAxes.length; i$1++) {\n var axis$1 = xAxes[i$1];\n var pane$1 = axis$1.pane;\n var paneId$1 = pane$1.id;\n var visible$1 = axis$1.options.visible !== false;\n var anchor$1 = paneAnchor(yAxes, pane$1) || yAnchor;\n var anchorCrossings$1 = yAnchorCrossings;\n if (anchor$1 !== yAnchor) {\n anchorCrossings$1 = this$1.axisCrossingValues(anchor$1, xAxes);\n }\n this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (axis$1.options._overlap) {\n continue;\n }\n if (round(axis$1.lineBox().y1) === round(anchor$1.lineBox().y1)) {\n if (!axis$1._mirrored) {\n axis$1.options.labels.mirror = !axis$1.options.labels.mirror;\n axis$1._mirrored = true;\n }\n this$1.alignAxisTo(axis$1, anchor$1, xAnchorCrossings[i$1], anchorCrossings$1[i$1]);\n if (topAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(topAnchors[paneId$1].box, TOP).translate(0, -axis$1.options.margin));\n }\n if (visible$1) {\n topAnchors[paneId$1] = axis$1;\n }\n }\n if (round(axis$1.lineBox().y2, datavizConstants.COORD_PRECISION) === round(anchor$1.lineBox().y2, datavizConstants.COORD_PRECISION)) {\n if (bottomAnchors[paneId$1]) {\n axis$1.reflow(axis$1.box.alignTo(bottomAnchors[paneId$1].box, BOTTOM).translate(0, axis$1.options.margin));\n }\n if (visible$1) {\n bottomAnchors[paneId$1] = axis$1;\n }\n }\n if (i$1 !== 0) {\n axis$1.alignTo(xAnchor);\n axis$1.reflow(axis$1.box);\n }\n }\n },\n shrinkAxisWidth: function (panes) {\n var axes = this.groupAxes(panes).any;\n var axisBox = axisGroupBox(axes);\n var overflowX = 0;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.axes.length > 0) {\n overflowX = Math.max(overflowX, axisBox.width() - currentPane.contentBox.width());\n }\n }\n if (overflowX !== 0) {\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis = axes[i$1];\n if (!currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(overflowX, 0));\n }\n }\n }\n },\n shrinkAxisHeight: function (panes) {\n var shrinked;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var axes = currentPane.axes;\n var overflowY = Math.max(0, axisGroupBox(axes).height() - currentPane.contentBox.height());\n if (overflowY !== 0) {\n for (var j = 0; j < axes.length; j++) {\n var currentAxis = axes[j];\n if (currentAxis.options.vertical) {\n currentAxis.reflow(currentAxis.box.shrink(0, overflowY));\n }\n }\n shrinked = true;\n }\n }\n return shrinked;\n },\n fitAxes: function (panes) {\n var axes = this.groupAxes(panes).any;\n var offsetX = 0;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n var paneAxes = currentPane.axes;\n var paneBox = currentPane.contentBox;\n if (paneAxes.length > 0) {\n var axisBox = axisGroupBox(paneAxes);\n var offsetY = Math.max(paneBox.y1 - axisBox.y1, paneBox.y2 - axisBox.y2);\n offsetX = Math.max(offsetX, paneBox.x1 - axisBox.x1);\n for (var j = 0; j < paneAxes.length; j++) {\n var currentAxis = paneAxes[j];\n currentAxis.reflow(currentAxis.box.translate(0, offsetY));\n }\n }\n }\n for (var i$1 = 0; i$1 < axes.length; i$1++) {\n var currentAxis$1 = axes[i$1];\n currentAxis$1.reflow(currentAxis$1.box.translate(offsetX, 0));\n }\n },\n reflowAxes: function (panes) {\n var this$1 = this;\n var axes = this.groupAxes(panes);\n for (var i = 0; i < panes.length; i++) {\n this$1.reflowPaneAxes(panes[i]);\n }\n if (axes.x.length > 0 && axes.y.length > 0) {\n this.alignAxes(axes.x, axes.y);\n this.shrinkAxisWidth(panes);\n this.autoRotateAxisLabels(axes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisWidth(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.shrinkAxisHeight(panes);\n this.alignAxes(axes.x, axes.y);\n if (this.shrinkAxisHeight(panes)) {\n this.alignAxes(axes.x, axes.y);\n }\n this.fitAxes(panes);\n }\n },\n autoRotateAxisLabels: function (groupedAxes) {\n var this$1 = this;\n var ref = this;\n var axes = ref.axes;\n var panes = ref.panes;\n var rotated;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (axis.autoRotateLabels()) {\n rotated = true;\n }\n }\n if (rotated) {\n for (var idx$1 = 0; idx$1 < panes.length; idx$1++) {\n this$1.reflowPaneAxes(panes[idx$1]);\n }\n if (groupedAxes.x.length > 0 && groupedAxes.y.length > 0) {\n this.alignAxes(groupedAxes.x, groupedAxes.y);\n this.shrinkAxisWidth(panes);\n }\n }\n },\n reflowPaneAxes: function (pane) {\n var axes = pane.axes;\n var length = axes.length;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n axes[i].reflow(pane.contentBox);\n }\n }\n },\n reflowCharts: function (panes) {\n var charts = this.charts;\n var count = charts.length;\n var box = this.box;\n for (var i = 0; i < count; i++) {\n var chartPane = charts[i].pane;\n if (!chartPane || inArray(chartPane, panes)) {\n charts[i].reflow(box);\n }\n }\n },\n reflowPanes: function () {\n var ref = this;\n var box = ref.box;\n var panes = ref.panes;\n var panesLength = panes.length;\n var remainingHeight = box.height();\n var remainingPanes = panesLength;\n var autoHeightPanes = 0;\n var top = box.y1;\n for (var i = 0; i < panesLength; i++) {\n var currentPane = panes[i];\n var height = currentPane.options.height;\n currentPane.options.width = box.width();\n if (!currentPane.options.height) {\n autoHeightPanes++;\n } else {\n if (height.indexOf && height.indexOf('%')) {\n var percents = parseInt(height, 10) / 100;\n currentPane.options.height = percents * box.height();\n }\n currentPane.reflow(box.clone());\n remainingHeight -= currentPane.options.height;\n }\n }\n for (var i$1 = 0; i$1 < panesLength; i$1++) {\n var currentPane$1 = panes[i$1];\n if (!currentPane$1.options.height) {\n currentPane$1.options.height = remainingHeight / autoHeightPanes;\n }\n }\n for (var i$2 = 0; i$2 < panesLength; i$2++) {\n var currentPane$2 = panes[i$2];\n var paneBox = box.clone().move(box.x1, top);\n currentPane$2.reflow(paneBox);\n remainingPanes--;\n top += currentPane$2.options.height;\n }\n },\n backgroundBox: function () {\n var axes = this.axes;\n var axesCount = axes.length;\n var box;\n for (var i = 0; i < axesCount; i++) {\n var axisA = axes[i];\n for (var j = 0; j < axesCount; j++) {\n var axisB = axes[j];\n if (axisA.options.vertical !== axisB.options.vertical) {\n var lineBox = axisA.lineBox().clone().wrap(axisB.lineBox());\n if (!box) {\n box = lineBox;\n } else {\n box = box.wrap(lineBox);\n }\n }\n }\n }\n return box || this.box;\n },\n chartsBoxes: function () {\n var panes = this.panes;\n var boxes = [];\n for (var idx = 0; idx < panes.length; idx++) {\n boxes.push(panes[idx].chartsBox());\n }\n return boxes;\n },\n addBackgroundPaths: function (multipath) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n multipath.paths.push(Path.fromRect(boxes[idx].toRect()));\n }\n },\n backgroundContainsPoint: function (point) {\n var boxes = this.chartsBoxes();\n for (var idx = 0; idx < boxes.length; idx++) {\n if (boxes[idx].containsPoint(point)) {\n return true;\n }\n }\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options.plotArea;\n var opacity = options.opacity;\n var background = options.background;\n var border = options.border;\n if (border === void 0) {\n border = {};\n }\n if (isTransparent(background)) {\n background = WHITE;\n opacity = 0;\n }\n var bg = this._bgVisual = new drawing.MultiPath({\n fill: {\n color: background,\n opacity: opacity\n },\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n zIndex: -1\n });\n this.addBackgroundPaths(bg);\n this.appendVisual(bg);\n },\n pointsByCategoryIndex: function (categoryIndex) {\n var charts = this.charts;\n var result = [];\n if (categoryIndex !== null) {\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n if (chart.pane.options.name === '_navigator') {\n continue;\n }\n var points = charts[i].categoryPoints[categoryIndex];\n if (points && points.length) {\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && defined(point.value) && point.value !== null) {\n result.push(point);\n }\n }\n }\n }\n }\n return result;\n },\n pointsBySeriesIndex: function (seriesIndex) {\n return this.filterPoints(function (point) {\n return point.series.index === seriesIndex;\n });\n },\n pointsBySeriesName: function (name) {\n return this.filterPoints(function (point) {\n return point.series.name === name;\n });\n },\n filterPoints: function (callback) {\n var charts = this.charts;\n var result = [];\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && point.visible !== false && callback(point)) {\n result.push(point);\n }\n }\n }\n return result;\n },\n findPoint: function (callback) {\n var charts = this.charts;\n for (var i = 0; i < charts.length; i++) {\n var chart = charts[i];\n var points = chart.points;\n for (var j = 0; j < points.length; j++) {\n var point = points[j];\n if (point && point.visible !== false && callback(point)) {\n return point;\n }\n }\n }\n },\n paneByPoint: function (point) {\n var panes = this.panes;\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n if (pane.box.containsPoint(point)) {\n return pane;\n }\n }\n }\n });\n function axisGroupBox(axes) {\n var length = axes.length;\n var box;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n var axisBox = axes[i].contentBox();\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n return box || new Box();\n }\n function paneAnchor(axes, pane) {\n for (var i = 0; i < axes.length; i++) {\n var anchor = axes[i];\n if (anchor && anchor.pane === pane) {\n return anchor;\n }\n }\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n setDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: { margin: {} },\n background: '',\n border: {\n color: BLACK,\n width: 0\n },\n legend: {\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n }\n });\n var PlotAreaEventsMixin = {\n hover: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_HOVER);\n },\n click: function (chart, e) {\n this._dispatchEvent(chart, e, PLOT_AREA_CLICK);\n }\n };\n var SeriesAggregator = Class.extend({\n init: function (series, binder, defaultAggregates) {\n var canonicalFields = binder.canonicalFields(series);\n var valueFields = binder.valueFields(series);\n var sourceFields = binder.sourceFields(series, canonicalFields);\n var seriesFields = this._seriesFields = [];\n var defaults = defaultAggregates.query(series.type);\n var rootAggregate = series.aggregate || defaults;\n this._series = series;\n this._binder = binder;\n for (var i = 0; i < canonicalFields.length; i++) {\n var field = canonicalFields[i];\n var fieldAggregate = void 0;\n if (isObject(rootAggregate)) {\n fieldAggregate = rootAggregate[field];\n } else if (i === 0 || inArray(field, valueFields)) {\n fieldAggregate = rootAggregate;\n } else {\n break;\n }\n if (fieldAggregate) {\n seriesFields.push({\n canonicalName: field,\n name: sourceFields[i],\n transform: isFunction(fieldAggregate) ? fieldAggregate : Aggregates[fieldAggregate]\n });\n }\n }\n },\n aggregatePoints: function (srcPoints, group) {\n var this$1 = this;\n var ref = this;\n var series = ref._series;\n var seriesFields = ref._seriesFields;\n var data = this._bindPoints(srcPoints || []);\n var firstDataItem = data.dataItems[0];\n var result = {};\n if (firstDataItem && !isNumber(firstDataItem) && !isArray(firstDataItem)) {\n var fn = function () {\n };\n fn.prototype = firstDataItem;\n result = new fn();\n }\n for (var i = 0; i < seriesFields.length; i++) {\n var field = seriesFields[i];\n var srcValues = this$1._bindField(data.values, field.canonicalName);\n var value = field.transform(srcValues, series, data.dataItems, group);\n if (value !== null && isObject(value) && !defined(value.length) && !(value instanceof Date)) {\n result = value;\n break;\n } else {\n if (defined(value)) {\n setValue(field.name, result, value);\n }\n }\n }\n return result;\n },\n _bindPoints: function (points) {\n var ref = this;\n var binder = ref._binder;\n var series = ref._series;\n var values = [];\n var dataItems = [];\n for (var i = 0; i < points.length; i++) {\n var pointIx = points[i];\n values.push(binder.bindPoint(series, pointIx));\n dataItems.push(series.data[pointIx]);\n }\n return {\n values: values,\n dataItems: dataItems\n };\n },\n _bindField: function (data, field) {\n var values = [];\n var count = data.length;\n for (var i = 0; i < count; i++) {\n var item = data[i];\n var valueFields = item.valueFields;\n var value = void 0;\n if (defined(valueFields[field])) {\n value = valueFields[field];\n } else {\n value = item.fields[field];\n }\n values.push(value);\n }\n return values;\n }\n });\n function setValue(fieldName, target, value) {\n var parentObj = target;\n var field = fieldName;\n if (fieldName.indexOf('.') > -1) {\n var parts = fieldName.split('.');\n while (parts.length > 1) {\n field = parts.shift();\n if (!defined(parentObj[field])) {\n parentObj[field] = {};\n }\n parentObj = parentObj[field];\n }\n field = parts.shift();\n }\n parentObj[field] = value;\n }\n var DefaultAggregates = Class.extend({\n init: function () {\n this._defaults = {};\n },\n register: function (seriesTypes, aggregates) {\n var this$1 = this;\n for (var i = 0; i < seriesTypes.length; i++) {\n this$1._defaults[seriesTypes[i]] = aggregates;\n }\n },\n query: function (seriesType) {\n return this._defaults[seriesType];\n }\n });\n DefaultAggregates.current = new DefaultAggregates();\n var RangeBar = Bar.extend({\n createLabel: function () {\n var labels = this.options.labels;\n var fromOptions = deepExtend({}, labels, labels.from);\n var toOptions = deepExtend({}, labels, labels.to);\n if (fromOptions.visible) {\n this.labelFrom = this._createLabel(fromOptions);\n this.append(this.labelFrom);\n }\n if (toOptions.visible) {\n this.labelTo = this._createLabel(toOptions);\n this.append(this.labelTo);\n }\n },\n _createLabel: function (options) {\n var labelTemplate = getTemplate(options);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total,\n series: this.series\n });\n } else {\n labelText = this.formatValue(options.format);\n }\n return new BarLabel(labelText, deepExtend({ vertical: this.options.vertical }, options));\n },\n reflow: function (targetBox) {\n this.render();\n var ref = this;\n var labelFrom = ref.labelFrom;\n var labelTo = ref.labelTo;\n var value = ref.value;\n this.box = targetBox;\n if (labelFrom) {\n labelFrom.options.aboveAxis = value.from > value.to;\n labelFrom.reflow(targetBox);\n }\n if (labelTo) {\n labelTo.options.aboveAxis = value.to > value.from;\n labelTo.reflow(targetBox);\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n }\n });\n RangeBar.prototype.defaults = deepExtend({}, RangeBar.prototype.defaults, {\n labels: { format: '{0} - {1}' },\n tooltip: { format: '{1}' }\n });\n var RangeBarChart = BarChart.extend({\n pointType: function () {\n return RangeBar;\n },\n pointValue: function (data) {\n return data.valueFields;\n },\n formatPointValue: function (point, format) {\n if (point.value.from === null && point.value.to === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value.from, point.value.to);\n },\n plotRange: function (point) {\n if (!point) {\n return 0;\n }\n return [\n point.value.from,\n point.value.to\n ];\n },\n updateRange: function (value, fields) {\n var axisName = fields.series.axis;\n var from = value.from;\n var to = value.to;\n var axisRange = this.valueAxisRanges[axisName];\n if (value !== null && isNumber(from) && isNumber(to)) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, from);\n axisRange.max = Math.max(axisRange.max, from);\n axisRange.min = Math.min(axisRange.min, to);\n axisRange.max = Math.max(axisRange.max, to);\n }\n },\n aboveAxis: function (point) {\n var value = point.value;\n return value.from < value.to;\n }\n });\n RangeBarChart.prototype.plotLimits = CategoricalChart.prototype.plotLimits;\n var RangeLinePoint = LinePoint.extend({\n aliasFor: function () {\n return this.parent;\n }\n });\n var AUTO = 'auto';\n var DEFAULT_FROM_FORMAT = '{0}';\n var DEFAULT_TO_FORMAT = '{1}';\n var RangeAreaPoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n this.initLabelsFormat();\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n var value = this.value;\n var fromPoint = this.fromPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.from,\n markers: markers.from\n }));\n var toPoint = this.toPoint = new RangeLinePoint(value, deepExtend({}, this.options, {\n labels: labels.to,\n markers: markers.to\n }));\n this.copyFields(fromPoint);\n this.copyFields(toPoint);\n this.append(fromPoint);\n this.append(toPoint);\n },\n reflow: function (targetBox) {\n this.render();\n var fromBox = targetBox.from;\n var toBox = targetBox.to;\n this.positionLabels(fromBox, toBox);\n this.fromPoint.reflow(fromBox);\n this.toPoint.reflow(toBox);\n this.box = this.fromPoint.markerBox().clone().wrap(this.toPoint.markerBox());\n },\n createHighlight: function () {\n var group = new Group();\n group.append(this.fromPoint.createHighlight());\n group.append(this.toPoint.createHighlight());\n return group;\n },\n highlightVisual: function () {\n return this.visual;\n },\n highlightVisualArgs: function () {\n return {\n options: this.options,\n from: this.fromPoint.highlightVisualArgs(),\n to: this.toPoint.highlightVisualArgs()\n };\n },\n tooltipAnchor: function () {\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(this.box);\n if (showTooltip) {\n var box = this.box;\n var center = box.center();\n var horizontalAlign = LEFT;\n var x, y, verticalAlign;\n if (this.options.vertical) {\n x = center.x;\n y = box.y1 - TOOLTIP_OFFSET;\n verticalAlign = BOTTOM;\n } else {\n x = box.x2 + TOOLTIP_OFFSET;\n y = center.y;\n verticalAlign = CENTER;\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n },\n unclipElements: function () {\n this.fromPoint.unclipElements();\n this.toPoint.unclipElements();\n },\n initLabelsFormat: function () {\n var labels = this.options.labels;\n if (!labels.format) {\n if (!labels.from || !labels.from.format) {\n labels.from = $.extend({}, labels.from, { format: DEFAULT_FROM_FORMAT });\n }\n if (!labels.to || !labels.to.format) {\n labels.to = $.extend({}, labels.to, { format: DEFAULT_TO_FORMAT });\n }\n }\n },\n positionLabels: function (fromBox, toBox) {\n var ref = this.options;\n var labels = ref.labels;\n var vertical = ref.vertical;\n if (labels.position === AUTO) {\n var fromLabelPosition, toLabelPosition;\n if (vertical) {\n if (toBox.y1 <= fromBox.y1) {\n toLabelPosition = ABOVE;\n fromLabelPosition = BELOW;\n } else {\n toLabelPosition = BELOW;\n fromLabelPosition = ABOVE;\n }\n } else {\n if (toBox.x1 <= fromBox.x1) {\n toLabelPosition = LEFT;\n fromLabelPosition = RIGHT;\n } else {\n toLabelPosition = RIGHT;\n fromLabelPosition = LEFT;\n }\n }\n if (!labels.from || !labels.from.position) {\n this.fromPoint.options.labels.position = fromLabelPosition;\n }\n if (!labels.to || !labels.to.position) {\n this.toPoint.options.labels.position = toLabelPosition;\n }\n }\n },\n copyFields: function (point) {\n point.dataItem = this.dataItem;\n point.category = this.category;\n point.series = this.series;\n point.color = this.color;\n point.owner = this.owner;\n }\n });\n deepExtend(RangeAreaPoint.prototype, PointEventsMixin);\n deepExtend(RangeAreaPoint.prototype, NoteMixin);\n RangeAreaPoint.prototype.defaults = {\n markers: {\n visible: false,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\n opacity: 1\n },\n labels: {\n visible: false,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n position: AUTO\n },\n notes: { label: {} },\n highlight: {\n markers: {\n border: {\n color: WHITE,\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n tooltip: { format: '{0} - {1}' }\n };\n var RangeAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.toGeometryPoints(this.toPoints()));\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.toGeometryPoints(this.fromPoints().reverse()));\n }\n return fromSegments;\n },\n createStroke: function (style) {\n var toPath = new Path(style);\n var fromPath = new Path(style);\n toPath.segments.push.apply(toPath.segments, this.strokeSegments());\n fromPath.segments.push.apply(fromPath.segments, this.stackSegments());\n this.visual.append(toPath);\n this.visual.append(fromPath);\n },\n hasStackSegment: function () {\n return true;\n },\n fromPoints: function () {\n return this.linePoints.map(function (point) {\n return point.fromPoint;\n });\n },\n toPoints: function () {\n return this.linePoints.map(function (point) {\n return point.toPoint;\n });\n }\n });\n var SplineRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.createCurveSegments(this.toPoints());\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.createCurveSegments(this.fromPoints().reverse());\n }\n return fromSegments;\n },\n createCurveSegments: function (points) {\n var curveProcessor = new CurveProcessor();\n return curveProcessor.process(this.toGeometryPoints(points));\n }\n });\n var StepRangeAreaSegment = RangeAreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.toPoints()));\n },\n stackSegments: function () {\n var fromSegments = this.fromSegments;\n if (!this.fromSegments) {\n fromSegments = this.fromSegments = this.segmentsFromPoints(this.calculateStepPoints(this.fromPoints()));\n fromSegments.reverse();\n }\n return fromSegments;\n }\n });\n deepExtend(StepRangeAreaSegment.prototype, StepLineMixin);\n var RangeAreaChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.renderSegments();\n },\n pointType: function () {\n return RangeAreaPoint;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var value = data.valueFields;\n if (!hasValue(value.from) && !hasValue(value.to)) {\n if (this.seriesMissingValues(series) === ZERO) {\n value = {\n from: 0,\n to: 0\n };\n } else {\n return null;\n }\n }\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new RangeAreaPoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segmentType;\n if (style === 'smooth') {\n segmentType = SplineRangeAreaSegment;\n } else if (style === 'step') {\n segmentType = StepRangeAreaSegment;\n } else {\n segmentType = RangeAreaSegment;\n }\n return new segmentType(linePoints, currentSeries, seriesIx);\n },\n plotRange: function (point, startValue) {\n if (!point) {\n return [\n startValue,\n startValue\n ];\n }\n return [\n point.value.from,\n point.value.to\n ];\n },\n valueSlot: function (valueAxis, plotRange) {\n var fromSlot = valueAxis.getSlot(plotRange[0], plotRange[0], !this.options.clip);\n var toSlot = valueAxis.getSlot(plotRange[1], plotRange[1], !this.options.clip);\n if (fromSlot && toSlot) {\n return {\n from: fromSlot,\n to: toSlot\n };\n }\n },\n pointSlot: function (categorySlot, valueSlot) {\n var from = valueSlot.from;\n var to = valueSlot.to;\n var fromSlot, toSlot;\n if (this.options.invertAxes) {\n fromSlot = new Box(from.x1, categorySlot.y1, from.x2, categorySlot.y2);\n toSlot = new Box(to.x1, categorySlot.y1, to.x2, categorySlot.y2);\n } else {\n fromSlot = new Box(categorySlot.x1, from.y1, categorySlot.x2, from.y2);\n toSlot = new Box(categorySlot.x1, to.y1, categorySlot.x2, to.y2);\n }\n return {\n from: fromSlot,\n to: toSlot\n };\n },\n addValue: function (data, fields) {\n var valueFields = data.valueFields;\n if (!isNumber(valueFields.from)) {\n valueFields.from = valueFields.to;\n }\n if (!isNumber(valueFields.to)) {\n valueFields.to = valueFields.from;\n }\n CategoricalChart.fn.addValue.call(this, data, fields);\n },\n updateRange: function (value, fields) {\n if (value !== null && isNumber(value.from) && isNumber(value.to)) {\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName] = this.valueAxisRanges[axisName] || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n var from = value.from;\n var to = value.to;\n axisRange.min = Math.min(axisRange.min, from, to);\n axisRange.max = Math.max(axisRange.max, from, to);\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.from, value.to);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n result.push((point.fromPoint || {}).marker);\n result.push((point.toPoint || {}).marker);\n }\n }\n return result.concat(this._segments);\n }\n });\n deepExtend(RangeAreaChart.prototype, LineChartMixin, ClipAnimationMixin);\n var OHLCPoint = Candlestick.extend({\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var value = ref.value;\n var chart = ref.owner;\n var valueAxis = chart.seriesValueAxis(options);\n var oPoints = [];\n var cPoints = [];\n var lhPoints = [];\n var lhSlot = valueAxis.getSlot(value.low, value.high);\n var oSlot = valueAxis.getSlot(value.open, value.open);\n var cSlot = valueAxis.getSlot(value.close, value.close);\n oSlot.x1 = cSlot.x1 = lhSlot.x1 = box.x1;\n oSlot.x2 = cSlot.x2 = lhSlot.x2 = box.x2;\n var mid = lhSlot.center().x;\n oPoints.push([\n oSlot.x1,\n oSlot.y1\n ]);\n oPoints.push([\n mid,\n oSlot.y1\n ]);\n cPoints.push([\n mid,\n cSlot.y1\n ]);\n cPoints.push([\n cSlot.x2,\n cSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y1\n ]);\n lhPoints.push([\n mid,\n lhSlot.y2\n ]);\n this.lines = [\n oPoints,\n cPoints,\n lhPoints\n ];\n this.box = lhSlot.clone().wrap(oSlot.clone().wrap(cSlot));\n this.reflowNote();\n },\n createBody: function () {\n }\n });\n var OHLCChart = CandlestickChart.extend({\n pointType: function () {\n return OHLCPoint;\n }\n });\n var WaterfallSegment = ChartElement.extend({\n init: function (from, to, series) {\n ChartElement.fn.init.call(this);\n this.from = from;\n this.to = to;\n this.series = series;\n },\n linePoints: function () {\n var from = this.from;\n var ref = this;\n var fromBox = ref.from.box;\n var toBox = ref.to.box;\n var points = [];\n if (from.isVertical) {\n var y = from.aboveAxis ? fromBox.y1 : fromBox.y2;\n points.push([\n fromBox.x1,\n y\n ], [\n toBox.x2,\n y\n ]);\n } else {\n var x = from.aboveAxis ? fromBox.x2 : fromBox.x1;\n points.push([\n x,\n fromBox.y1\n ], [\n x,\n toBox.y2\n ]);\n }\n return points;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var line = this.series.line || {};\n var path = Path.fromPoints(this.linePoints(), {\n stroke: {\n color: line.color,\n width: line.width,\n opacity: line.opacity,\n dashType: line.dashType\n }\n });\n alignPathToPixel(path);\n this.visual.append(path);\n }\n });\n setDefaultOptions(WaterfallSegment, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n });\n var WaterfallChart = BarChart.extend({\n render: function () {\n BarChart.fn.render.call(this);\n this.createSegments();\n },\n traverseDataPoints: function (callback) {\n var series = this.options.series;\n var categories = this.categoryAxis.options.categories || [];\n var totalCategories = categoriesCount(series);\n var isVertical = !this.options.invertAxes;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var total = 0;\n var runningTotal = 0;\n for (var categoryIx = 0; categoryIx < totalCategories; categoryIx++) {\n var data = SeriesBinder.current.bindPoint(currentSeries, categoryIx);\n var value = data.valueFields.value;\n var summary = data.fields.summary;\n var from = total;\n var to = void 0;\n if (summary) {\n if (summary.toLowerCase() === 'total') {\n data.valueFields.value = total;\n from = 0;\n to = total;\n } else {\n data.valueFields.value = runningTotal;\n to = from - runningTotal;\n runningTotal = 0;\n }\n } else if (isNumber(value)) {\n runningTotal += value;\n total += value;\n to = total;\n }\n callback(data, {\n category: categories[categoryIx],\n categoryIx: categoryIx,\n series: currentSeries,\n seriesIx: seriesIx,\n total: total,\n runningTotal: runningTotal,\n from: from,\n to: to,\n isVertical: isVertical\n });\n }\n }\n },\n updateRange: function (value, fields) {\n BarChart.fn.updateRange.call(this, { value: fields.to }, fields);\n },\n aboveAxis: function (point) {\n return point.value >= 0;\n },\n plotRange: function (point) {\n return [\n point.from,\n point.to\n ];\n },\n createSegments: function () {\n var this$1 = this;\n var series = this.options.series;\n var seriesPoints = this.seriesPoints;\n var segments = this.segments = [];\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var points = seriesPoints[seriesIx];\n if (points) {\n var prevPoint = void 0;\n for (var pointIx = 0; pointIx < points.length; pointIx++) {\n var point = points[pointIx];\n if (point && prevPoint) {\n var segment = new WaterfallSegment(prevPoint, point, currentSeries);\n segments.push(segment);\n this$1.append(segment);\n }\n prevPoint = point;\n }\n }\n }\n }\n });\n function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n var AREA_SERIES = [\n AREA,\n VERTICAL_AREA,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ];\n var OUT_OF_RANGE_SERIES = [\n LINE,\n VERTICAL_LINE\n ].concat(AREA_SERIES);\n var CategoricalPlotArea = PlotAreaBase.extend({\n initFields: function (series) {\n var this$1 = this;\n this.namedCategoryAxes = {};\n this.namedValueAxes = {};\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n if (series.length > 0) {\n this.invertAxes = inArray(series[0].type, [\n BAR,\n BULLET,\n VERTICAL_LINE,\n VERTICAL_AREA,\n VERTICAL_RANGE_AREA,\n RANGE_BAR,\n HORIZONTAL_WATERFALL,\n VERTICAL_BOX_PLOT\n ]);\n for (var i = 0; i < series.length; i++) {\n var stack = series[i].stack;\n if (stack && stack.type === '100%') {\n this$1.stack100 = true;\n break;\n }\n }\n }\n },\n render: function (panes) {\n if (panes === void 0) {\n panes = this.panes;\n }\n this.createCategoryAxes(panes);\n this.aggregateCategories(panes);\n this.createCategoryAxesLabels(panes);\n this.createCharts(panes);\n this.createValueAxes(panes);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis instanceof CategoryAxis) {\n delete this.namedCategoryAxes[axisName];\n } else {\n this.valueAxisRangeTracker.reset(axisName);\n delete this.namedValueAxes[axisName];\n }\n if (axis === this.categoryAxis) {\n delete this.categoryAxis;\n }\n if (axis === this.valueAxis) {\n delete this.valueAxis;\n }\n },\n createCharts: function (panes) {\n var this$1 = this;\n var seriesByPane = this.groupSeriesByPane();\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || 'default'] || [];\n this$1.addToLegend(paneSeries);\n var visibleSeries = this$1.filterVisibleSeries(paneSeries);\n if (!visibleSeries) {\n continue;\n }\n var groups = this$1.groupSeriesByCategoryAxis(visibleSeries);\n for (var groupIx = 0; groupIx < groups.length; groupIx++) {\n this$1.createChartGroup(groups[groupIx], pane);\n }\n }\n },\n createChartGroup: function (series, pane) {\n this.createAreaChart(filterSeriesByType(series, [\n AREA,\n VERTICAL_AREA\n ]), pane);\n this.createRangeAreaChart(filterSeriesByType(series, [\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ]), pane);\n this.createBarChart(filterSeriesByType(series, [\n COLUMN,\n BAR\n ]), pane);\n this.createRangeBarChart(filterSeriesByType(series, [\n RANGE_COLUMN,\n RANGE_BAR\n ]), pane);\n this.createBulletChart(filterSeriesByType(series, [\n BULLET,\n VERTICAL_BULLET\n ]), pane);\n this.createCandlestickChart(filterSeriesByType(series, CANDLESTICK), pane);\n this.createBoxPlotChart(filterSeriesByType(series, [\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ]), pane);\n this.createOHLCChart(filterSeriesByType(series, OHLC), pane);\n this.createWaterfallChart(filterSeriesByType(series, [\n WATERFALL,\n HORIZONTAL_WATERFALL\n ]), pane);\n this.createLineChart(filterSeriesByType(series, [\n LINE,\n VERTICAL_LINE\n ]), pane);\n },\n aggregateCategories: function (panes) {\n var this$1 = this;\n var series = this.srcSeries || this.series;\n var processedSeries = [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var categoryAxis = this$1.seriesCategoryAxis(currentSeries);\n var axisPane = this$1.findPane(categoryAxis.options.pane);\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n if ((dateAxis || currentSeries.categoryField) && inArray(axisPane, panes)) {\n currentSeries = this$1.aggregateSeries(currentSeries, categoryAxis);\n } else if (isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max)) {\n currentSeries = this$1.filterSeries(currentSeries, categoryAxis);\n }\n processedSeries.push(currentSeries);\n }\n this.srcSeries = series;\n this.series = processedSeries;\n },\n filterSeries: function (series, categoryAxis) {\n var range = categoryAxis.totalRangeIndices();\n var justified = categoryAxis.options.justified;\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n range.min = isNumber(categoryAxis.options.min) ? Math.floor(range.min) : 0;\n if (isNumber(categoryAxis.options.max)) {\n range.max = justified ? Math.floor(range.max) + 1 : Math.ceil(range.max);\n } else {\n range.max = series.data.length;\n }\n var currentSeries = deepExtend({}, series);\n if (outOfRangePoints) {\n var minCategory = range.min - 1;\n var srcCategories = categoryAxis.options.srcCategories || [];\n if (minCategory >= 0 && minCategory < currentSeries.data.length) {\n currentSeries._outOfRangeMinPoint = {\n item: currentSeries.data[minCategory],\n category: srcCategories[minCategory],\n categoryIx: -1\n };\n }\n if (range.max < currentSeries.data.length) {\n currentSeries._outOfRangeMaxPoint = {\n item: currentSeries.data[range.max],\n category: srcCategories[range.max],\n categoryIx: range.max - range.min\n };\n }\n }\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, currentSeries.data.length);\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max);\n return currentSeries;\n },\n aggregateSeries: function (series, categoryAxis) {\n var this$1 = this;\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n var ref = categoryAxis.options;\n var categories = ref.categories;\n var srcCategories = ref.srcCategories;\n if (srcCategories === void 0) {\n srcCategories = categories;\n }\n var dataItems = ref.dataItems;\n if (dataItems === void 0) {\n dataItems = [];\n }\n var dateAxis = equalsIgnoreCase(categoryAxis.options.type, DATE);\n var aggregatorSeries = deepExtend({}, series);\n var result = deepExtend({}, series);\n var srcData = series.data;\n var srcPoints = [];\n var outOfRangeMinIdx = MIN_VALUE;\n var outOfRangeMaxIdx = MAX_VALUE;\n var getFn = getField;\n var outOfRangeMinCategory, outOfRangeMaxCategory;\n if (dateAxis) {\n getFn = getDateField;\n }\n for (var i = 0; i < srcData.length; i++) {\n var category = void 0;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[i], this$1.chartService.intl);\n } else {\n category = srcCategories[i];\n }\n if (defined(category)) {\n var categoryIx = categoryAxis.categoryIndex(category);\n if (0 <= categoryIx && categoryIx < categories.length) {\n srcPoints[categoryIx] = srcPoints[categoryIx] || [];\n srcPoints[categoryIx].push(i);\n } else if (outOfRangePoints) {\n if (categoryIx < 0) {\n if (categoryIx === outOfRangeMinIdx) {\n outOfRangeMinCategory.points.push(i);\n } else if (categoryIx > outOfRangeMinIdx) {\n outOfRangeMinIdx = categoryIx;\n outOfRangeMinCategory = {\n category: category,\n points: [i]\n };\n }\n } else if (categoryIx >= categories.length) {\n if (categoryIx === outOfRangeMaxIdx) {\n outOfRangeMaxCategory.points.push(i);\n } else if (categoryIx < outOfRangeMaxIdx) {\n outOfRangeMaxIdx = categoryIx;\n outOfRangeMaxCategory = {\n category: category,\n points: [i]\n };\n }\n }\n }\n }\n }\n var aggregator = new SeriesAggregator(aggregatorSeries, SeriesBinder.current, DefaultAggregates.current);\n var data = result.data = [];\n for (var i$1 = 0; i$1 < categories.length; i$1++) {\n data[i$1] = aggregator.aggregatePoints(srcPoints[i$1], categories[i$1]);\n if (srcPoints[i$1]) {\n dataItems[i$1] = data[i$1];\n }\n }\n if (outOfRangeMinCategory && data.length) {\n result._outOfRangeMinPoint = {\n item: aggregator.aggregatePoints(outOfRangeMinCategory.points, outOfRangeMinCategory.category),\n categoryIx: outOfRangeMinIdx,\n category: outOfRangeMinCategory.category\n };\n }\n if (outOfRangeMaxCategory && data.length) {\n result._outOfRangeMaxPoint = {\n item: aggregator.aggregatePoints(outOfRangeMaxCategory.points, outOfRangeMaxCategory.category),\n categoryIx: outOfRangeMaxIdx,\n category: outOfRangeMaxCategory.category\n };\n }\n categoryAxis.options.dataItems = dataItems;\n return result;\n },\n appendChart: function (chart, pane) {\n var series = chart.options.series;\n var categoryAxis = this.seriesCategoryAxis(series[0]);\n var categories = categoryAxis.options.categories;\n var categoriesToAdd = Math.max(0, categoriesCount(series) - categories.length);\n while (categoriesToAdd--) {\n categories.push('');\n }\n this.valueAxisRangeTracker.update(chart.valueAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n seriesPaneName: function (series) {\n var options = this.options;\n var axisName = series.axis;\n var axisOptions = [].concat(options.valueAxis);\n var axis = grep(axisOptions, function (a) {\n return a.name === axisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = (panes[0] || {}).name || 'default';\n var paneName = (axis || {}).pane || defaultPaneName;\n return paneName;\n },\n seriesCategoryAxis: function (series) {\n var axisName = series.categoryAxis;\n var axis = axisName ? this.namedCategoryAxes[axisName] : this.categoryAxis;\n if (!axis) {\n throw new Error('Unable to locate category axis with name ' + axisName);\n }\n return axis;\n },\n stackableChartOptions: function (firstSeries, pane) {\n var stack = firstSeries.stack;\n var isStacked100 = stack && stack.type === '100%';\n var clip = pane.options.clip;\n return {\n isStacked: stack,\n isStacked100: isStacked100,\n clip: clip\n };\n },\n groupSeriesByCategoryAxis: function (series) {\n var categoryAxes = [];\n var unique = {};\n for (var idx = 0; idx < series.length; idx++) {\n var name = series[idx].categoryAxis || '$$default$$';\n if (!unique.hasOwnProperty(name)) {\n unique[name] = true;\n categoryAxes.push(name);\n }\n }\n var groups = [];\n for (var axisIx = 0; axisIx < categoryAxes.length; axisIx++) {\n var axis = categoryAxes[axisIx];\n var axisSeries = groupSeries(series, axis, axisIx);\n if (axisSeries.length === 0) {\n continue;\n }\n groups.push(axisSeries);\n }\n return groups;\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var barChart = new BarChart(this, $.extend({\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(barChart, pane);\n },\n createRangeBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var rangeColumnChart = new RangeBarChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n this.appendChart(rangeColumnChart, pane);\n },\n createBulletChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var bulletChart = new BulletChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(bulletChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var lineChart = new LineChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(lineChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var areaChart = new AreaChart(this, $.extend({\n invertAxes: this.invertAxes,\n series: series\n }, this.stackableChartOptions(firstSeries, pane)));\n this.appendChart(areaChart, pane);\n },\n createRangeAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var rangeAreaChart = new RangeAreaChart(this, {\n invertAxes: this.invertAxes,\n series: series,\n clip: pane.options.clip\n });\n this.appendChart(rangeAreaChart, pane);\n },\n createOHLCChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new OHLCChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createCandlestickChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new CandlestickChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createBoxPlotChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var chart = new BoxPlotChart(this, {\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n series: series,\n spacing: firstSeries.spacing,\n clip: pane.options.clip\n });\n this.appendChart(chart, pane);\n },\n createWaterfallChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var waterfallChart = new WaterfallChart(this, {\n series: series,\n invertAxes: this.invertAxes,\n gap: firstSeries.gap,\n spacing: firstSeries.spacing\n });\n this.appendChart(waterfallChart, pane);\n },\n axisRequiresRounding: function (categoryAxisName, categoryAxisIndex) {\n var this$1 = this;\n var centeredSeries = filterSeriesByType(this.series, EQUALLY_SPACED_SERIES);\n for (var seriesIx = 0; seriesIx < this.series.length; seriesIx++) {\n var currentSeries = this$1.series[seriesIx];\n if (inArray(currentSeries.type, AREA_SERIES)) {\n var line = currentSeries.line;\n if (line && line.style === STEP) {\n centeredSeries.push(currentSeries);\n }\n }\n }\n for (var seriesIx$1 = 0; seriesIx$1 < centeredSeries.length; seriesIx$1++) {\n var seriesAxis = centeredSeries[seriesIx$1].categoryAxis || '';\n if (seriesAxis === categoryAxisName || !seriesAxis && categoryAxisIndex === 0) {\n return true;\n }\n }\n },\n aggregatedAxis: function (categoryAxisName, categoryAxisIndex) {\n var series = this.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var seriesAxis = series[seriesIx].categoryAxis || '';\n if ((seriesAxis === categoryAxisName || !seriesAxis && categoryAxisIndex === 0) && series[seriesIx].categoryField) {\n return true;\n }\n }\n },\n createCategoryAxesLabels: function () {\n var axes = this.axes;\n for (var i = 0; i < axes.length; i++) {\n if (axes[i] instanceof CategoryAxis) {\n axes[i].createLabels();\n }\n }\n },\n createCategoryAxes: function (panes) {\n var this$1 = this;\n var invertAxes = this.invertAxes;\n var definitions = [].concat(this.options.categoryAxis);\n var axes = [];\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var categories = axisOptions.categories;\n if (categories === void 0) {\n categories = [];\n }\n axisOptions = deepExtend({\n vertical: invertAxes,\n reverse: !invertAxes && this$1.chartService.rtl,\n axisCrossingValue: invertAxes ? MAX_VALUE : 0\n }, axisOptions);\n if (!defined(axisOptions.justified)) {\n axisOptions.justified = this$1.isJustified();\n }\n if (this$1.axisRequiresRounding(name, i)) {\n axisOptions.justified = false;\n }\n var categoryAxis = void 0;\n if (isDateAxis(axisOptions, categories[0])) {\n categoryAxis = new DateCategoryAxis(axisOptions, this$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1.chartService);\n }\n if (name) {\n if (this$1.namedCategoryAxes[name]) {\n throw new Error('Category axis with name ' + name + ' is already defined');\n }\n this$1.namedCategoryAxes[name] = categoryAxis;\n }\n categoryAxis.axisIndex = i;\n axes.push(categoryAxis);\n this$1.appendAxis(categoryAxis);\n }\n }\n var primaryAxis = this.categoryAxis || axes[0];\n this.categoryAxis = primaryAxis;\n if (invertAxes) {\n this.axisY = primaryAxis;\n } else {\n this.axisX = primaryAxis;\n }\n },\n isJustified: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (!inArray(currentSeries.type, AREA_SERIES)) {\n return false;\n }\n }\n return true;\n },\n createValueAxes: function (panes) {\n var this$1 = this;\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var definitions = [].concat(this.options.valueAxis);\n var invertAxes = this.invertAxes;\n var baseOptions = {\n vertical: !invertAxes,\n reverse: invertAxes && this.chartService.rtl\n };\n var axes = [];\n if (this.stack100) {\n baseOptions.roundToMajorUnit = false;\n baseOptions.labels = { format: 'P0' };\n }\n for (var i = 0; i < definitions.length; i++) {\n var axisOptions = definitions[i];\n var axisPane = this$1.findPane(axisOptions.pane);\n if (inArray(axisPane, panes)) {\n var name = axisOptions.name;\n var defaultAxisRange = equalsIgnoreCase(axisOptions.type, LOGARITHMIC) ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(name) || defaultRange || defaultAxisRange;\n if (i === 0 && range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var axisType = void 0;\n if (equalsIgnoreCase(axisOptions.type, LOGARITHMIC)) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var valueAxis = new axisType(range.min, range.max, deepExtend({}, baseOptions, axisOptions), this$1.chartService);\n if (name) {\n if (this$1.namedValueAxes[name]) {\n throw new Error('Value axis with name ' + name + ' is already defined');\n }\n this$1.namedValueAxes[name] = valueAxis;\n }\n valueAxis.axisIndex = i;\n axes.push(valueAxis);\n this$1.appendAxis(valueAxis);\n }\n }\n var primaryAxis = this.valueAxis || axes[0];\n this.valueAxis = primaryAxis;\n if (invertAxes) {\n this.axisX = primaryAxis;\n } else {\n this.axisY = primaryAxis;\n }\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var pane = this.pointPane(point);\n var categories = [];\n var values = [];\n if (!pane) {\n return;\n }\n var allAxes = pane.axes;\n for (var i = 0; i < allAxes.length; i++) {\n var axis = allAxes[i];\n if (axis.getValue) {\n appendIfNotNull(values, axis.getValue(point));\n } else {\n appendIfNotNull(categories, axis.getCategory(point));\n }\n }\n if (categories.length === 0) {\n appendIfNotNull(categories, this.categoryAxis.getCategory(point));\n }\n if (categories.length > 0 && values.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n category: singleItemOrArray(categories),\n value: singleItemOrArray(values)\n });\n }\n },\n pointPane: function (point) {\n var panes = this.panes;\n for (var i = 0; i < panes.length; i++) {\n var currentPane = panes[i];\n if (currentPane.contentBox.containsPoint(point)) {\n return currentPane;\n }\n }\n },\n updateAxisOptions: function (axis, options) {\n updateAxisOptions(this.options, axis, options);\n updateAxisOptions(this.originalOptions, axis, options);\n }\n });\n function updateAxisOptions(targetOptions, axis, options) {\n var axesOptions = axis instanceof CategoryAxis ? [].concat(targetOptions.categoryAxis) : [].concat(targetOptions.valueAxis);\n deepExtend(axesOptions[axis.axisIndex], options);\n }\n function groupSeries(series, axis, axisIx) {\n return grep(series, function (s) {\n return axisIx === 0 && !s.categoryAxis || s.categoryAxis === axis;\n });\n }\n setDefaultOptions(CategoricalPlotArea, {\n categoryAxis: { categories: [] },\n valueAxis: {}\n });\n deepExtend(CategoricalPlotArea.prototype, PlotAreaEventsMixin);\n var Highlight = Class.extend({\n init: function () {\n this._points = [];\n },\n destroy: function () {\n this._points = [];\n },\n show: function (points) {\n var this$1 = this;\n var arrayPoints = [].concat(points);\n this.hide();\n for (var i = 0; i < arrayPoints.length; i++) {\n var point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this$1.togglePointHighlight(point, true);\n this$1._points.push(point);\n }\n }\n },\n togglePointHighlight: function (point, show) {\n var toggleHandler = (point.options.highlight || {}).toggle;\n if (toggleHandler) {\n var eventArgs = {\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n value: point.value,\n stackValue: point.stackValue,\n preventDefault: preventDefault,\n visual: point.highlightVisual(),\n show: show\n };\n toggleHandler(eventArgs);\n if (!eventArgs._defaultPrevented) {\n point.toggleHighlight(show);\n }\n } else {\n point.toggleHighlight(show);\n }\n },\n hide: function () {\n var this$1 = this;\n var points = this._points;\n while (points.length) {\n this$1.togglePointHighlight(points.pop(), false);\n }\n },\n isHighlighted: function (element) {\n var points = this._points;\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (element === point) {\n return true;\n }\n }\n return false;\n }\n });\n function preventDefault() {\n this._defaultPrevented = true;\n }\n function acceptKey(e, mouseKey) {\n var key = (mouseKey || '').toLowerCase();\n var event = e.event;\n var accept = key === 'none' && !(event.ctrlKey || event.shiftKey || event.altKey) || event[key + 'Key'];\n return accept;\n }\n function toChartAxisRanges(axisRanges) {\n var ranges = {};\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n if (axisRange.axis.options.name) {\n ranges[axisRange.axis.options.name] = {\n min: axisRange.range.min,\n max: axisRange.range.max\n };\n }\n }\n return ranges;\n }\n var Pannable = Class.extend({\n init: function (plotArea, options) {\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n },\n start: function (e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n },\n move: function (e) {\n if (this._active) {\n var axisRanges = this.axisRanges = this._panAxes(e, X).concat(this._panAxes(e, Y));\n if (axisRanges.length) {\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n }\n },\n end: function () {\n var active = this._active;\n this._active = false;\n return active;\n },\n pan: function () {\n var ref = this;\n var plotArea = ref.plotArea;\n var axisRanges = ref.axisRanges;\n if (axisRanges.length) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var range = axisRanges[idx];\n plotArea.updateAxisOptions(range.axis, range.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.plotArea;\n },\n _panAxes: function (e, position) {\n var plotArea = this.plotArea;\n var delta = -e[position].delta;\n var lock = (this.options.lock || '').toLowerCase();\n var updatedAxes = [];\n if (delta !== 0 && (lock || '').toLowerCase() !== position) {\n var axes = plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n var range = axis.pan(delta);\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n return updatedAxes;\n }\n });\n Pannable.prototype.options = {\n key: 'none',\n lock: 'none'\n };\n var ZoomSelection = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n },\n createElement: function () {\n var marquee = this._marquee = document.createElement('div');\n marquee.className = 'k-marquee';\n var marqueeColor = document.createElement('div');\n marqueeColor.className = 'k-marquee-color';\n marquee.appendChild(marqueeColor);\n },\n removeElement: function () {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n },\n setStyles: function (styles) {\n elementStyles(this._marquee, styles);\n },\n start: function (e) {\n if (acceptKey(e, this.options.key)) {\n var chart = this.chart;\n var point = chart._eventCoordinates(e);\n var zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n if (zoomPane && zoomPane.clipBox()) {\n var clipBox = zoomPane.clipBox().clone();\n var offset = this._elementOffset();\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n document.body.appendChild(this._marquee);\n this.setStyles({\n left: e.pageX + 1,\n top: e.pageY + 1,\n width: 0,\n height: 0\n });\n return true;\n }\n }\n return false;\n },\n _elementOffset: function () {\n var chartElement = this.chart.element;\n var ref = elementStyles(chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var offset = dataviz.elementOffset(chartElement);\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n },\n move: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\n },\n end: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n var elementOffset$$1 = this._elementOffset();\n var selectionPosition = this._selectionPosition(e);\n selectionPosition.left -= elementOffset$$1.left;\n selectionPosition.top -= elementOffset$$1.top;\n var start = {\n x: selectionPosition.left,\n y: selectionPosition.top\n };\n var end = {\n x: selectionPosition.left + selectionPosition.width,\n y: selectionPosition.top + selectionPosition.height\n };\n this._updateAxisRanges(start, end);\n this.removeElement();\n delete this._zoomPane;\n return toChartAxisRanges(this.axisRanges);\n }\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n },\n _updateAxisRanges: function (start, end) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this._zoomPane.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical)) {\n var range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n },\n _selectionPosition: function (e) {\n var clipBox = this._zoomPaneClipBox;\n var startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n var pageX = e.x.location;\n var pageY = e.y.location;\n var lock = (this.options.lock || '').toLowerCase();\n var left = Math.min(startLocation.x, pageX);\n var top = Math.min(startLocation.y, pageY);\n var width = Math.abs(startLocation.x - pageX);\n var height = Math.abs(startLocation.y - pageY);\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n });\n ZoomSelection.prototype.options = {\n key: 'shift',\n lock: 'none'\n };\n var MousewheelZoom = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n },\n updateRanges: function (delta) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical)) {\n var range = axis.zoomRange(-delta);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.chart;\n }\n });\n var LegendLayout = ChartElement.extend({\n init: function (options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n },\n render: function () {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n this.visual = new drawing.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? 'vertical' : 'horizontal',\n reverse: options.rtl,\n alignItems: vertical ? 'start' : 'center'\n });\n for (var idx = 0; idx < children.length; idx++) {\n var legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n },\n reflow: function (box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n renderVisual: function () {\n this.addVisual();\n },\n createVisual: function () {\n }\n });\n var LegendItem = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n },\n createContainer: function () {\n this.container = new dataviz.FloatElement({\n vertical: false,\n wrap: false,\n align: CENTER,\n spacing: this.options.spacing\n });\n this.append(this.container);\n },\n createMarker: function () {\n this.container.append(new ShapeElement(this.markerOptions()));\n },\n markerOptions: function () {\n var options = this.options;\n var markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: { color: markerColor }\n });\n },\n createLabel: function () {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n this.container.append(new TextBox(options.text, labelOptions));\n },\n renderComplete: function () {\n BoxElement.fn.renderComplete.call(this);\n var cursor = this.options.cursor || {};\n var eventSink = this._itemOverlay = Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n this.appendVisual(eventSink);\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_CLICK, args)) {\n e.preventDefault();\n }\n },\n hover: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n e.preventDefault();\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n return true;\n },\n leave: function (widget) {\n widget._unsetActivePoint();\n },\n eventArgs: function (e) {\n var options = this.options;\n return {\n element: eventElement(e),\n text: options.text,\n series: options.series,\n seriesIndex: options.series.index,\n pointIndex: options.pointIndex\n };\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (customVisual) {\n this.visual = customVisual({\n active: options.active,\n series: options.series,\n sender: this.getSender(),\n pointIndex: options.pointIndex,\n options: {\n markers: this.markerOptions(),\n labels: options.labels\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n this$1.renderComplete();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n }\n });\n var HORIZONTAL = 'horizontal';\n var POINTER = 'pointer';\n var CUSTOM = 'custom';\n var Legend = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = {};\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!inArray(this.options.position, [\n TOP,\n RIGHT,\n BOTTOM,\n LEFT,\n CUSTOM\n ])) {\n this.options.position = RIGHT;\n }\n this.createContainer();\n this.createItems();\n },\n createContainer: function () {\n var options = this.options;\n var position = options.position;\n var userAlign = options.align;\n var align = position;\n var vAlign = CENTER;\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [\n TOP,\n BOTTOM\n ])) {\n if (userAlign === 'start') {\n align = LEFT;\n } else if (userAlign === 'end') {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === 'start') {\n vAlign = TOP;\n } else if (userAlign === 'end') {\n vAlign = BOTTOM;\n }\n }\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n this.append(this.container);\n },\n createItems: function () {\n var chartService = this.getService();\n var options = this.options;\n var vertical = this.isVertical();\n var innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing,\n rtl: chartService.rtl\n }, chartService);\n var items = options.items;\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n var count = items.length;\n for (var i = 0; i < count; i++) {\n var item = items[i];\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n innerElement.render();\n this.container.append(innerElement);\n },\n isVertical: function () {\n var ref = this.options;\n var orientation = ref.orientation;\n var position = ref.position;\n var vertical = position === CUSTOM && orientation !== HORIZONTAL || (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [\n LEFT,\n RIGHT\n ]));\n return vertical;\n },\n hasItems: function () {\n return this.container.children[0].children.length > 0;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n },\n containerReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var position = options.position;\n var width = options.width;\n var height = options.height;\n var pos = position === TOP || position === BOTTOM ? X : Y;\n var vertical = this.isVertical();\n var alignTarget = targetBox.clone();\n var containerBox = targetBox.clone();\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n container.reflow(containerBox);\n containerBox = container.box;\n var box = containerBox.clone();\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n this.container.reflow(containerBox);\n }\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n this.box = box;\n },\n containerCustomReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var offsetX = options.offsetX;\n var offsetY = options.offsetY;\n var width = options.width;\n var height = options.height;\n var vertical = this.isVertical();\n var containerBox = targetBox.clone();\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n container.reflow(new Box(offsetX, offsetY, offsetX + containerBox.width(), offsetY + containerBox.height()));\n },\n renderVisual: function () {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\n }\n }\n });\n setDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\n spacing: 6,\n background: '',\n zIndex: 1,\n markers: {\n border: { width: 0 },\n width: 15,\n height: 3,\n type: 'rect',\n align: LEFT,\n vAlign: CENTER\n }\n });\n var PlotAreaFactory = Class.extend({\n init: function () {\n this._registry = [];\n },\n register: function (type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n create: function (srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n return new match.type(series, options, chartService);\n }\n });\n PlotAreaFactory.current = new PlotAreaFactory();\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n function createDiv(className) {\n var element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n return element;\n }\n function closestHandle(element) {\n var current = element;\n while (current && !hasClasses(current, 'k-handle')) {\n current = current.parentNode;\n }\n return current;\n }\n var Selection = Class.extend({\n init: function (chart, categoryAxis, options, observer) {\n var chartElement = chart.element;\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof DateCategoryAxis;\n this.initOptions();\n if (this.options.visible) {\n this.createElements();\n this.set(this._index(this.options.from), this._index(this.options.to));\n this.bindEvents();\n }\n },\n createElements: function () {\n var options = this.options;\n var wrapper = this.wrapper = createDiv('k-selector');\n elementStyles(wrapper, {\n top: options.offset.top,\n left: options.offset.left,\n width: options.width,\n height: options.height,\n direction: 'ltr'\n });\n var selection = this.selection = createDiv('k-selection');\n this.leftMask = createDiv('k-mask');\n this.rightMask = createDiv('k-mask');\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n selection.appendChild(createDiv('k-selection-bg'));\n var leftHandle = this.leftHandle = createDiv('k-handle k-left-handle');\n var rightHandle = this.rightHandle = createDiv('k-handle k-right-handle');\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n this.chartElement.appendChild(wrapper);\n var selectionStyles = elementStyles(selection, [\n 'borderLeftWidth',\n 'borderRightWidth',\n 'height'\n ]);\n var leftHandleHeight = elementStyles(leftHandle, 'height').height;\n var rightHandleHeight = elementStyles(rightHandle, 'height').height;\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n elementStyles(leftHandle, { top: (selectionStyles.height - leftHandleHeight) / 2 });\n elementStyles(rightHandle, { top: (selectionStyles.height - rightHandleHeight) / 2 });\n wrapper.style.cssText = wrapper.style.cssText;\n },\n bindEvents: function () {\n this._mousewheelHandler = this.options.mousewheel !== false ? this._mousewheel.bind(this) : stopPropagation;\n var obj;\n bindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n press: this._press.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n },\n initOptions: function () {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var box = categoryAxis.pane.chartsBox();\n var intlService = this.chart.chartService.intl;\n if (this._dateAxis) {\n deepExtend(options, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n from: parseDate(intlService, options.from),\n to: parseDate(intlService, options.to)\n });\n }\n var ref$1 = elementStyles(this.chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref$1.paddingLeft;\n var paddingTop = ref$1.paddingTop;\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST,\n padding: {\n left: paddingLeft,\n top: paddingTop\n },\n offset: {\n left: box.x1 + paddingLeft,\n top: box.y1 + paddingTop\n },\n from: options.min,\n to: options.max\n }, options);\n },\n destroy: function () {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n clearTimeout(this._mwTimeout);\n this._state = null;\n if (this.wrapper) {\n var obj;\n unbindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this.chartElement.removeChild(this.wrapper);\n }\n },\n _rangeEventArgs: function (range) {\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\n };\n },\n _start: function (e) {\n var options = this.options;\n var target = eventElement(e);\n if (this._state || !target) {\n return;\n }\n this.chart._unsetActivePoint();\n this._state = {\n moveTarget: closestHandle(target) || target,\n startLocation: e.x ? e.x.location : 0,\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n }\n },\n _press: function (e) {\n var handle;\n if (this._state) {\n handle = this._state.moveTarget;\n } else {\n handle = closestHandle(eventElement(e));\n }\n if (handle) {\n dataviz.addClass(handle, 'k-handle-active');\n }\n },\n _move: function (e) {\n if (!this._state) {\n return;\n }\n var ref = this;\n var state = ref._state;\n var options = ref.options;\n var axisOptions = ref.categoryAxis.options;\n var range = state.range;\n var target = state.moveTarget;\n var reverse = axisOptions.reverse;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var delta = state.startLocation - e.x.location;\n var oldRange = {\n from: range.from,\n to: range.to\n };\n var span = range.to - range.from;\n var scale = elementStyles(this.wrapper, 'width').width / (axisOptions.categories.length - 1);\n var offset = Math.round(delta / scale) * (reverse ? -1 : 1);\n if (!target) {\n return;\n }\n var leftHandle = hasClasses(target, 'k-left-handle');\n var rightHandle = hasClasses(target, 'k-right-handle');\n if (hasClasses(target, 'k-selection k-selection-bg')) {\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n } else if (leftHandle && !reverse || rightHandle && reverse) {\n range.from = Math.min(Math.max(min, from - offset), max - 1);\n range.to = Math.max(range.from + 1, range.to);\n } else if (leftHandle && reverse || rightHandle && !reverse) {\n range.to = Math.min(Math.max(min + 1, to - offset), max);\n range.from = Math.min(range.to - 1, range.from);\n }\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n },\n _end: function () {\n if (this._state) {\n var moveTarget = this._state.moveTarget;\n if (moveTarget) {\n dataviz.removeClass(moveTarget, 'k-handle-active');\n }\n var range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n delete this._state;\n }\n },\n _tap: function (e) {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var coords = this.chart._eventCoordinates(e);\n var categoryIx = categoryAxis.pointCategoryIndex(new Point(coords.x, categoryAxis.box.y1));\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var span = to - from;\n var mid = from + span / 2;\n var range = {};\n var rightClick = e.event.which === 3;\n var offset = Math.round(mid - categoryIx);\n if (this._state || rightClick) {\n return;\n }\n this.chart._unsetActivePoint();\n if (!categoryAxis.options.justified) {\n offset--;\n }\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n this._start(e);\n if (this._state) {\n this._state.range = range;\n this.trigger(SELECT, this._rangeEventArgs(range));\n this._end();\n }\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n this._start({ target: this.selection });\n if (this._state) {\n var range = this._state.range;\n e.preventDefault();\n e.stopPropagation();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (this.options.mousewheel.reverse) {\n delta *= -1;\n }\n if (this.expand(delta)) {\n this.trigger(SELECT, {\n axis: this.categoryAxis.options,\n delta: delta,\n originalEvent: e,\n from: this._value(range.from),\n to: this._value(range.to)\n });\n }\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._end();\n }, MOUSEWHEEL_DELAY);\n }\n },\n _gesturestart: function (e) {\n var options = this.options;\n this._state = {\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs(this._state.range);\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\n }\n },\n _gestureend: function () {\n if (this._state) {\n this.trigger(SELECT_END, this._rangeEventArgs(this._state.range));\n delete this._state;\n }\n },\n _gesturechange: function (e) {\n var ref = this;\n var chart = ref.chart;\n var state = ref._state;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var range = state.range;\n var p0 = chart._toModelCoordinates(e.touches[0].x.location).x;\n var p1 = chart._toModelCoordinates(e.touches[1].x.location).x;\n var left = Math.min(p0, p1);\n var right = Math.max(p0, p1);\n e.preventDefault();\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n },\n _index: function (value) {\n var index = value;\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n return index;\n },\n _value: function (index) {\n var categories = this.categoryAxis.options.categories;\n var value = index;\n if (this._dateAxis) {\n if (index > categories.length - 1) {\n value = this.options.max;\n } else {\n value = categories[Math.ceil(index)];\n }\n }\n return value;\n },\n _slot: function (value) {\n var categoryAxis = this.categoryAxis;\n var index = this._index(value);\n return categoryAxis.getSlot(index, index, true);\n },\n move: function (from, to) {\n var options = this.options;\n var reverse = this.categoryAxis.options.reverse;\n var offset = options.offset;\n var padding = options.padding;\n var border = options.selection.border;\n var left = reverse ? to : from;\n var right = reverse ? from : to;\n var edge = 'x' + (reverse ? 2 : 1);\n var box = this._slot(left);\n var leftMaskWidth = round(box[edge] - offset.left + padding.left);\n elementStyles(this.leftMask, { width: leftMaskWidth });\n elementStyles(this.selection, { left: leftMaskWidth });\n box = this._slot(right);\n var rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, { width: rightMaskWidth });\n var distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n elementStyles(this.rightMask, { left: distance });\n elementStyles(this.selection, { width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0) });\n },\n set: function (from, to) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var fromValue = limitValue(this._index(from), min, max);\n var toValue = limitValue(this._index(to), fromValue + 1, max);\n if (options.visible) {\n this.move(fromValue, toValue);\n }\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\n },\n expand: function (delta) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var zDir = options.mousewheel.zoom;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var range = {\n from: from,\n to: to\n };\n var oldRange = deepExtend({}, range);\n if (this._state) {\n range = this._state.range;\n }\n if (zDir !== RIGHT) {\n range.from = limitValue(limitValue(from - delta, 0, to - 1), min, max);\n }\n if (zDir !== LEFT) {\n range.to = limitValue(limitValue(to + delta, range.from + 1, max), min, max);\n }\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n trigger: function (name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n });\n function stopPropagation(e) {\n e.stopPropagation();\n }\n setDefaultOptions(Selection, {\n visible: true,\n mousewheel: { zoom: 'both' },\n min: MIN_VALUE,\n max: MAX_VALUE\n });\n var Tooltip = BaseTooltip.extend({\n show: function (point) {\n if (!point || !point.tooltipAnchor || this._current && this._current === point) {\n return;\n }\n var options = deepExtend({}, this.options, point.options.tooltip);\n var anchor = point.tooltipAnchor();\n if (anchor) {\n this._current = point;\n BaseTooltip.fn.show.call(this, {\n point: point,\n anchor: anchor\n }, options, point);\n } else {\n this.hide();\n }\n },\n hide: function () {\n delete this._current;\n BaseTooltip.fn.hide.call(this);\n }\n });\n var SharedTooltip = BaseTooltip.extend({\n init: function (plotArea, options) {\n BaseTooltip.fn.init.call(this, plotArea.chartService, options);\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\n },\n showAt: function (points, coords) {\n var tooltipPoints = grep(points, function (point) {\n var tooltip = point.series.tooltip;\n var excluded = tooltip && tooltip.visible === false;\n return !excluded;\n });\n if (tooltipPoints.length > 0) {\n var point = tooltipPoints[0];\n var slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n var anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\n this.show({\n anchor: anchor,\n shared: true,\n points: points,\n category: point.category,\n categoryText: this.formatService.auto(this.options.categoryFormat, point.category),\n series: this.plotArea.series\n }, this.options);\n }\n },\n _slotAnchor: function (point, slot) {\n var axis = this.plotArea.categoryAxis;\n var align = {\n horizontal: 'left',\n vertical: 'center'\n };\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n var box = point.owner.pane.chartsBox();\n var vertical = this.plotArea.categoryAxis.options.vertical;\n var center = box.center();\n var slotCenter = slot.center();\n var align = {\n horizontal: 'center',\n vertical: 'center'\n };\n var centerPoint;\n if (vertical) {\n centerPoint = new Point(center.x, slotCenter.y);\n } else {\n centerPoint = new Point(slotCenter.x, center.y);\n }\n return {\n point: centerPoint,\n align: align\n };\n }\n });\n setDefaultOptions(SharedTooltip, { categoryFormat: '{0:d}' });\n var BarChartAnimation = Animation.extend({\n setup: function () {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var bbox = element.bbox();\n if (bbox) {\n this.origin = options.origin;\n var axis = options.vertical ? Y : X;\n var fromScale = this.fromScale = new GeometryPoint(1, 1);\n fromScale[axis] = START_SCALE;\n element.transform(transform().scale(fromScale.x, fromScale.y));\n } else {\n this.abort();\n }\n },\n step: function (pos) {\n var scaleX = dataviz.interpolateValue(this.fromScale.x, 1, pos);\n var scaleY = dataviz.interpolateValue(this.fromScale.y, 1, pos);\n this.element.transform(transform().scale(scaleX, scaleY, this.origin));\n },\n abort: function () {\n Animation.fn.abort.call(this);\n this.element.transform(null);\n }\n });\n setDefaultOptions(BarChartAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register(BAR, BarChartAnimation);\n var BubbleAnimation = Animation.extend({\n setup: function () {\n var center = this.center = this.element.bbox().center();\n this.element.transform(transform().scale(START_SCALE, START_SCALE, center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.center));\n }\n });\n setDefaultOptions(BubbleAnimation, { easing: 'easeOutElastic' });\n AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n var FadeInAnimation = Animation.extend({\n setup: function () {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n },\n step: function (pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n });\n setDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: 'linear'\n });\n AnimationFactory.current.register(FADEIN, FadeInAnimation);\n var PieAnimation = Animation.extend({\n setup: function () {\n this.element.transform(transform().scale(START_SCALE, START_SCALE, this.options.center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.options.center));\n }\n });\n setDefaultOptions(PieAnimation, {\n easing: 'easeOutElastic',\n duration: INITIAL_ANIMATION_DURATION\n });\n AnimationFactory.current.register(PIE, PieAnimation);\n var ScatterLineChart = ScatterChart.extend({\n render: function () {\n ScatterChart.fn.render.call(this);\n this.renderSegments();\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = ScatterChart.fn.animationPoints.call(this);\n return points.concat(this._segments);\n },\n createMissingValue: function (value, missingValues) {\n if (missingValues === ZERO) {\n var missingValue = {\n x: value.x,\n y: value.y\n };\n if (!hasValue(missingValue.x)) {\n missingValue.x = 0;\n }\n if (!hasValue(missingValue.y)) {\n missingValue.y = 0;\n }\n return missingValue;\n }\n }\n });\n deepExtend(ScatterLineChart.prototype, LineChartMixin);\n var XYPlotArea = PlotAreaBase.extend({\n initFields: function () {\n this.namedXAxes = {};\n this.namedYAxes = {};\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\n }\n var seriesByPane = this.groupSeriesByPane();\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || 'default'] || [];\n this$1.addToLegend(paneSeries);\n var filteredSeries = this$1.filterVisibleSeries(paneSeries);\n if (!filteredSeries) {\n continue;\n }\n this$1.createScatterChart(filterSeriesByType(filteredSeries, SCATTER), pane);\n this$1.createScatterLineChart(filterSeriesByType(filteredSeries, SCATTER_LINE), pane);\n this$1.createBubbleChart(filterSeriesByType(filteredSeries, BUBBLE), pane);\n }\n this.createAxes(panes);\n },\n appendChart: function (chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis.options.vertical) {\n this.yAxisRangeTracker.reset(axisName);\n delete this.namedYAxes[axisName];\n } else {\n this.xAxisRangeTracker.reset(axisName);\n delete this.namedXAxes[axisName];\n }\n if (axis === this.axisX) {\n delete this.axisX;\n }\n if (axis === this.axisY) {\n delete this.axisY;\n }\n },\n seriesPaneName: function (series) {\n var options = this.options;\n var xAxisName = series.xAxis;\n var xAxisOptions = [].concat(options.xAxis);\n var xAxis = grep(xAxisOptions, function (a) {\n return a.name === xAxisName;\n })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function (a) {\n return a.name === yAxisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = panes[0].name || 'default';\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n return paneName;\n },\n createScatterChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createScatterLineChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterLineChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createBubbleChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new BubbleChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createXYAxis: function (options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var tracker = vertical ? this.yAxisRangeTracker : this.xAxisRangeTracker;\n var axisOptions = deepExtend({ reverse: !vertical && this.chartService.rtl }, options, { vertical: vertical });\n var isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC);\n var defaultRange = tracker.query();\n var defaultAxisRange = isLog ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n var typeSamples = [\n axisOptions.min,\n axisOptions.max\n ];\n var series = this.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesAxisName = currentSeries[vertical ? 'yAxis' : 'xAxis'];\n if (seriesAxisName === axisOptions.name || axisIndex === 0 && !seriesAxisName) {\n var firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? 'y' : 'x']);\n break;\n }\n }\n if (axisIndex === 0 && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var inferredDate;\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || !axisOptions.type && inferredDate) {\n axisType = dataviz.DateValueAxis;\n } else if (isLog) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error((vertical ? 'Y' : 'X') + ' axis with name ' + axisName + ' is already defined');\n }\n namedAxes[axisName] = axis;\n }\n this.appendAxis(axis);\n return axis;\n },\n createAxes: function (panes) {\n var this$1 = this;\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n for (var i = 0; i < length; i++) {\n var axis = allAxes[i];\n var values = axis.options.vertical ? yValues : xValues;\n var currentValue = axis.getValue(point);\n if (currentValue !== null) {\n values.push(currentValue);\n }\n }\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n },\n updateAxisOptions: function (axis, options) {\n var vertical = axis.options.vertical;\n var axes = this.groupAxes(this.panes);\n var index = (vertical ? axes.y : axes.x).indexOf(axis);\n updateAxisOptions$1(this.options, index, vertical, options);\n updateAxisOptions$1(this.originalOptions, index, vertical, options);\n }\n });\n function updateAxisOptions$1(targetOptions, axisIndex, vertical, options) {\n var axisOptions = [].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis)[axisIndex];\n deepExtend(axisOptions, options);\n }\n setDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n var PieSegment = ChartElement.extend({\n init: function (value, sector, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.sector = sector;\n },\n render: function () {\n var labels = this.options.labels;\n var chartService = this.owner.chartService;\n var labelText = this.value;\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n var labelTemplate = getTemplate(labels);\n if (labelTemplate) {\n labelText = labelTemplate({\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n });\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n var brightnessValue = new Color(this.options.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n }\n if (!labels.background) {\n labels.background = this.options.color;\n }\n } else {\n var themeLabels = chartService.theme.seriesDefaults.labels;\n labels.color = labels.color || themeLabels.color;\n labels.background = labels.background || themeLabels.background;\n }\n this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: '',\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }));\n this.append(this.label);\n }\n },\n reflow: function (targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n },\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var labelsDistance = labelsOptions.distance;\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n var labelWidth = label.box.width();\n var lp;\n if (labelsOptions.position === CENTER) {\n sector.radius = Math.abs((sector.radius - labelHeight) / 2) + labelHeight;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else if (labelsOptions.position === INSIDE_END) {\n sector.radius = sector.radius - labelHeight / 2;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n var x1;\n lp = sector.clone().expand(labelsDistance).point(angle);\n if (lp.x >= sector.center.x) {\n x1 = lp.x + labelWidth;\n label.orientation = RIGHT;\n } else {\n x1 = lp.x - labelWidth;\n label.orientation = LEFT;\n }\n label.reflow(new Box(x1, lp.y - labelHeight, lp.x, lp.y));\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n ChartElement.fn.createVisual.call(this);\n if (this.value) {\n if (options.visual) {\n var startAngle = (sector.startAngle + 180) % 360;\n var visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n startAngle: startAngle,\n endAngle: startAngle + sector.angle,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n var group = new Group();\n this$1.createSegmentVisual(group);\n return group;\n }\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\n }\n },\n createSegmentVisual: function (group) {\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n var borderOptions = options.border || {};\n var border = borderOptions.width > 0 ? {\n stroke: {\n color: borderOptions.color,\n width: borderOptions.width,\n opacity: borderOptions.opacity,\n dashType: borderOptions.dashType\n }\n } : {};\n var color = options.color;\n var fill = {\n color: color,\n opacity: options.opacity\n };\n var visual = this.createSegment(sector, deepExtend({\n fill: fill,\n stroke: { opacity: options.opacity },\n zIndex: options.zIndex\n }, border));\n group.append(visual);\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [\n sector.center.x,\n sector.center.y\n ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n },\n createSegment: function (sector, options) {\n if (options.singleSegment) {\n return new drawing.Circle(new geometry.Circle(new GeometryPoint(sector.center.x, sector.center.y), sector.radius), options);\n }\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n },\n createAnimation: function () {\n var ref = this;\n var options = ref.options;\n var center = ref.sector.center;\n deepExtend(options, {\n animation: {\n center: [\n center.x,\n center.y\n ],\n delay: this.animationDelay\n }\n });\n ChartElement.fn.createAnimation.call(this);\n },\n createHighlight: function (options) {\n var highlight = this.options.highlight || {};\n var border = highlight.border || {};\n return this.createSegment(this.sector, deepExtend({}, options, {\n fill: {\n color: highlight.color,\n opacity: highlight.opacity\n },\n stroke: {\n opacity: border.opacity,\n width: border.width,\n color: border.color\n }\n }));\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var sector = this.sector;\n return {\n options: this.options,\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n startAngle: sector.startAngle,\n endAngle: sector.angle + sector.startAngle,\n visual: this.visual\n };\n },\n tooltipAnchor: function () {\n var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n }\n });\n var RAD_30 = round(dataviz.rad(30), DEFAULT_PRECISION);\n var RAD_60 = round(dataviz.rad(60), DEFAULT_PRECISION);\n function tooltipAlignment(angle) {\n var radians = dataviz.rad(angle);\n var sine = round(Math.sin(radians), DEFAULT_PRECISION);\n var cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n var horizontal;\n if (Math.abs(sine) > RAD_60) {\n horizontal = CENTER;\n } else if (cosine < 0) {\n horizontal = RIGHT;\n } else {\n horizontal = LEFT;\n }\n var vertical;\n if (Math.abs(sine) < RAD_30) {\n vertical = CENTER;\n } else if (sine < 0) {\n vertical = BOTTOM;\n } else {\n vertical = TOP;\n }\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n }\n setDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: { gradient: 'roundedBevel' },\n border: { width: 0.5 },\n labels: {\n visible: false,\n distance: 35,\n font: datavizConstants.DEFAULT_FONT,\n margin: getSpacing(0.5),\n align: CIRCLE,\n zIndex: 1,\n position: OUTSIDE_END\n },\n animation: { type: PIE },\n highlight: {\n visible: true,\n border: { width: 1 }\n },\n visible: true\n });\n deepExtend(PieSegment.prototype, PointEventsMixin);\n var PieChartMixin = {\n createLegendItem: function (value, point, options) {\n var legendOptions = this.options.legend || {};\n var labelsOptions = legendOptions.labels || {};\n var inactiveItems = legendOptions.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n if (options && options.visibleInLegend !== false) {\n var pointVisible = options.visible !== false;\n var labelTemplate = pointVisible ? getTemplate(labelsOptions) : getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n var text = options.category;\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: options.series,\n dataItem: options.dataItem,\n percentage: options.percentage,\n value: value\n });\n }\n var itemLabelOptions, markerColor;\n if (pointVisible) {\n itemLabelOptions = {};\n markerColor = point.color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = (inactiveItems.markers || {}).color;\n }\n if (hasValue(text) && text !== '') {\n this.legendItems.push({\n pointIndex: options.index,\n text: text,\n series: options.series,\n markerColor: markerColor,\n labels: itemLabelOptions\n });\n }\n }\n }\n };\n var PIE_SECTOR_ANIM_DELAY = 70;\n var PieChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var colorsCount = seriesColors.length;\n var series = options.series;\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var data = currentSeries.data;\n var ref$1 = bindSegments(currentSeries);\n var total = ref$1.total;\n var points = ref$1.points;\n var count = ref$1.count;\n var anglePerValue = 360 / total;\n var constantAngle = void 0;\n if (!isFinite(anglePerValue)) {\n constantAngle = 360 / count;\n }\n var currentAngle = void 0;\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n var value = pointData.value;\n var visible = pointData.visible;\n var angle = value !== 0 ? constantAngle || value * anglePerValue : 0;\n var explode = data.length !== 1 && Boolean(fields.explode);\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n callback(pointData.valueFields.value, new dataviz.Ring(null, 0, 0, currentAngle, angle), {\n owner: this$1,\n category: defined(fields.category) ? fields.category : '',\n index: i,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: total !== 0 ? value / total : 0,\n explode: explode,\n visibleInLegend: fields.visibleInLegend,\n visible: visible,\n zIndex: seriesCount - seriesIx,\n animationDelay: this$1.animationDelay(i, seriesIx, seriesCount)\n });\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'visual',\n 'toggle'\n ]\n });\n },\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (fields.visible === false) {\n return;\n }\n var segment = new PieSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var points = ref.points;\n var seriesConfigs = ref.seriesConfigs;\n if (seriesConfigs === void 0) {\n seriesConfigs = [];\n }\n var count = points.length;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n var newBoxCenter = newBox.center();\n var boxCenter = box.center();\n var seriesCount = options.series.length;\n var leftSideLabels = [];\n var rightSideLabels = [];\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n var radius = halfMinWidth - padding;\n var center = new Point(radius + newBox.x1 + padding, radius + newBox.y1 + padding);\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n segment.reflow(newBox);\n var label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n this.box = newBox;\n },\n leftLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n rightLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n distanceBetweenLabels: function (labels) {\n var segment = last(this.points);\n var sector = segment.sector;\n var count = labels.length - 1;\n var lr = sector.radius + segment.options.labels.distance;\n var distances = [];\n var firstBox = labels[0].box;\n var distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n distances.push(distance);\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n return distances;\n },\n distributeLabels: function (distances, labels) {\n var this$1 = this;\n var count = distances.length;\n var left, right, remaining;\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n this.reflowLabels(distances, labels);\n },\n _takeDistance: function (distances, anchor, position, amount) {\n var result = amount;\n if (distances[position] > 0) {\n var available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n return result;\n },\n reflowLabels: function (distances, labels) {\n var this$1 = this;\n var segment = last(this.points);\n var sector = segment.sector;\n var labelOptions = segment.options.labels;\n var labelsCount = labels.length;\n var labelDistance = labelOptions.distance;\n var boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n var boxX;\n distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n boxY += distances[i];\n boxX = this$1.hAlignLabel(box.x2, sector.clone().expand(labelDistance), boxY, boxY + box.height(), label.orientation === RIGHT);\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n boxY += box.height();\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var connectors = ref.options.connectors;\n var points = ref.points;\n var count = points.length;\n var space = 4;\n ChartElement.fn.createVisual.call(this);\n this._connectorLines = [];\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var label = segment.label;\n var angle = sector.middle();\n var connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n if (label) {\n var connectorLine = new Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n if (label.options.position === OUTSIDE_END) {\n var box = label.box;\n var centerPoint = sector.center;\n var start = sector.point(angle);\n var middle = new Point(box.x1, box.center().y);\n var sr = void 0, end = void 0, crossing = void 0;\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n connectorLine.lineTo(end.x, end.y);\n this$1._connectorLines.push(connectorLine);\n this$1.visual.append(connectorLine);\n }\n }\n }\n },\n labelComparator: function (reverse) {\n var reverseValue = reverse ? -1 : 1;\n return function (a, b) {\n var first = (a.parent.sector.middle() + 270) % 360;\n var second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n },\n hAlignLabel: function (originalX, sector, y1, y2, direction) {\n var radius = sector.radius;\n var sector_center = sector.center;\n var cx = sector_center.x;\n var cy = sector_center.y;\n var t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n if (t > radius) {\n return originalX;\n }\n return cx + Math.sqrt(radius * radius - t * t) * (direction ? 1 : -1);\n },\n pointInCircle: function (point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n animationDelay: function (categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n }\n });\n function intersection(a1, a2, b1, b2) {\n var uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n var ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n var result;\n if (ub !== 0) {\n var ua = uat / ub;\n result = new Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y));\n }\n return result;\n }\n setDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n });\n deepExtend(PieChart.prototype, PieChartMixin);\n var PiePlotArea = PlotAreaBase.extend({\n render: function () {\n this.createPieChart(this.series);\n },\n createPieChart: function (series) {\n var firstSeries = series[0];\n var pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(pieChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var DonutSegment = PieSegment.extend({\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n var lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n PieSegment.fn.reflowLabel.call(this);\n }\n }\n },\n createSegment: function (sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n setDefaultOptions(DonutSegment, {\n overlay: { gradient: 'roundedGlass' },\n labels: { position: CENTER },\n animation: { type: PIE }\n });\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n var DONUT_SECTOR_ANIM_DELAY = 50;\n var DonutChart = PieChart.extend({\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (!value || fields.visible === false) {\n return;\n }\n var segment = new DonutSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var series = options.series;\n var seriesCount = series.length;\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\n for (var i = 0; i < seriesCount; i++) {\n var currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n this.seriesConfigs = [];\n for (var i$1 = 0; i$1 < seriesCount; i$1++) {\n var currentSeries$1 = series[i$1];\n size = valueOrDefault(currentSeries$1.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this$1.seriesConfigs.push({\n innerRadius: innerRadius,\n radius: radius\n });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n PieChart.fn.reflow.call(this, targetBox);\n },\n animationDelay: function (categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY + INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1);\n }\n });\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n }\n });\n var DonutPlotArea = PiePlotArea.extend({\n render: function () {\n this.createDonutChart(this.series);\n },\n createDonutChart: function (series) {\n var firstSeries = series[0];\n var donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(donutChart);\n }\n });\n var DEFAULT_PADDING = 0.15;\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function () {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function () {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n },\n alignAxes: function () {\n var axis = this.valueAxis;\n var range = axis.range();\n var crossingValue = axis.options.reverse ? range.max : range.min;\n var slot = axis.getSlot(crossingValue);\n var center = this.polarAxis.getSlot(0).center;\n var axisBox = axis.box.translate(center.x - slot.x1, center.y - slot.y1);\n axis.reflow(axisBox);\n },\n createValueAxis: function () {\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n var axisType, axisDefaultRange;\n if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = {\n min: 0.1,\n max: 1\n };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = {\n min: 0,\n max: 1\n };\n }\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var valueAxis = new axisType(range.min, range.max, axisOptions, this.chartService);\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n },\n reflowAxes: function () {\n var ref = this;\n var options = ref.options.plotArea;\n var valueAxis = ref.valueAxis;\n var polarAxis = ref.polarAxis;\n var box = ref.box;\n var defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n var padding = getSpacing(options.padding || {}, defaultPadding);\n var paddingBox = box.clone().unpad(padding);\n var axisBox = paddingBox.clone();\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n var heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n backgroundBox: function () {\n return this.box;\n }\n });\n var PolarScatterChart = ScatterChart.extend({\n pointSlot: function (slotX, slotY) {\n var valueRadius = slotX.center.y - slotY.y1;\n var slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n });\n setDefaultOptions(PolarScatterChart, { clip: false });\n var PolarLineChart = ScatterLineChart.extend({});\n PolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n setDefaultOptions(PolarLineChart, { clip: false });\n var SplinePolarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function (fillPath) {\n var center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n },\n _polarAxisCenter: function () {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n return center;\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n var center = this._polarAxisCenter();\n var curveProcessor = new CurveProcessor(false);\n var linePoints = this.points();\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n return segments;\n }\n });\n var PolarAreaSegment = AreaSegment.extend({\n fillToAxes: function (fillPath) {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n var centerSegment = new geometry.Segment([\n center.x,\n center.y\n ]);\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n });\n var PolarAreaChart = PolarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segment;\n if (style === SMOOTH) {\n segment = new SplinePolarAreaSegment(linePoints, currentSeries, seriesIx);\n } else {\n segment = new PolarAreaSegment(linePoints, currentSeries, seriesIx);\n }\n return segment;\n },\n createMissingValue: function (value, missingValues) {\n var missingValue;\n if (hasValue(value.x) && missingValues !== INTERPOLATE) {\n missingValue = {\n x: value.x,\n y: value.y\n };\n if (missingValues === ZERO) {\n missingValue.y = 0;\n }\n }\n return missingValue;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n },\n _hasMissingValuesGap: function () {\n var this$1 = this;\n var series = this.options.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (this$1.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n },\n sortPoints: function (points) {\n var this$1 = this;\n points.sort(xComparer);\n if (this._hasMissingValuesGap()) {\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n var value = point.value;\n if (!hasValue(value.y) && this$1.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n return points;\n }\n });\n function xComparer(a, b) {\n return a.value.x - b.value.x;\n }\n var PolarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var polarAxis = new dataviz.PolarAxis(this.options.xAxis, this.chartService);\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n },\n valueAxisOptions: function (defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n },\n createValueAxis: function () {\n PolarPlotAreaBase.fn.createValueAxis.call(this);\n this.axisY = this.valueAxis;\n },\n appendChart: function (chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createLineChart(filterSeriesByType(series, [POLAR_LINE]), pane);\n this.createScatterChart(filterSeriesByType(series, [POLAR_SCATTER]), pane);\n this.createAreaChart(filterSeriesByType(series, [POLAR_AREA]), pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new PolarLineChart(this, { series: series });\n this.appendChart(lineChart, pane);\n },\n createScatterChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var scatterChart = new PolarScatterChart(this, { series: series });\n this.appendChart(scatterChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new PolarAreaChart(this, { series: series });\n this.appendChart(areaChart, pane);\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var xValue = this.axisX.getValue(point);\n var yValue = this.axisY.getValue(point);\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n setDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin);\n var RadarLineChart = LineChart.extend({\n pointSlot: function (categorySlot, valueSlot) {\n var valueRadius = categorySlot.center.y - valueSlot.y1;\n var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n if (linePoints.length === currentSeries.data.length) {\n segment.options.closed = true;\n }\n return segment;\n }\n });\n setDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n });\n var SplineRadarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaSegment = AreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaChart = RadarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n var segment;\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n return segment;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var RadarSegment = DonutSegment.extend({\n init: function (value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n }\n });\n setDefaultOptions(RadarSegment, {\n overlay: { gradient: 'none' },\n labels: { distance: 10 }\n });\n var RadarClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n reflow: function (sector) {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var gap = options.gap;\n var spacing = options.spacing;\n var count = children.length;\n var slots = count + gap + spacing * (count - 1);\n var slotAngle = sector.angle / slots;\n var angle = sector.startAngle + slotAngle * (gap / 2);\n this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n child.reflow(slotSector);\n child.sector = slotSector;\n angle += slotAngle + slotAngle * spacing;\n });\n }\n });\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n });\n var RadarStackLayout = ChartElement.extend({\n reflow: function (sector) {\n var ref = this;\n var reverse = ref.options.reverse;\n var children = ref.children;\n var childrenCount = children.length;\n var first = reverse ? childrenCount - 1 : 0;\n var step = reverse ? -1 : 1;\n this.box = new Box();\n for (var i = first; i >= 0 && i < childrenCount; i += step) {\n var childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n });\n var RadarBarChart = BarChart.extend({\n pointType: function () {\n return RadarSegment;\n },\n clusterType: function () {\n return RadarClusterLayout;\n },\n stackType: function () {\n return RadarStackLayout;\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n pointSlot: function (categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n return slot;\n },\n reflowPoint: function (point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n createAnimation: function () {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n setDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: { type: 'pie' }\n });\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n },\n valueAxisOptions: function (defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: 'P0' }\n });\n }\n return deepExtend(defaults, this.options.valueAxis);\n },\n aggregateCategories: function () {\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n createCategoryAxesLabels: function () {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n filterSeries: function (currentSeries) {\n return currentSeries;\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createAreaChart(filterSeriesByType(series, [RADAR_AREA]), pane);\n this.createLineChart(filterSeriesByType(series, [RADAR_LINE]), pane);\n this.createBarChart(filterSeriesByType(series, [RADAR_COLUMN]), pane);\n },\n chartOptions: function (series) {\n var options = { series: series };\n var firstSeries = series[0];\n if (firstSeries) {\n var filteredSeries = this.filterVisibleSeries(series);\n var stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === '100%' && filteredSeries.length > 1;\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n return options;\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n this._hasBarCharts = true;\n },\n seriesCategoryAxis: function () {\n return this.categoryAxis;\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var category = this.categoryAxis.getCategory(point);\n var value = this.valueAxis.getValue(point);\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n deepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries\n });\n setDefaultOptions(RadarPlotArea, {\n categoryAxis: { categories: [] },\n valueAxis: {}\n });\n var FunnelSegment = ChartElement.extend({\n init: function (value, options, segmentOptions) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.options.index = segmentOptions.index;\n },\n reflow: function (chartBox) {\n var points = this.points;\n var label = this.children[0];\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual;\n ChartElement.fn.createVisual.call(this);\n if (options.visual) {\n visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n points: this.points,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n return this$1.createPath();\n }\n });\n } else {\n visual = this.createPath();\n }\n if (visual) {\n this.visual.append(visual);\n }\n },\n createPath: function () {\n var options = this.options;\n var border = options.border;\n var path = Path.fromPoints(this.points, {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: {\n color: border.color,\n opacity: border.opacity,\n width: border.width\n }\n }).close();\n return path;\n },\n createHighlight: function (style) {\n return Path.fromPoints(this.points, style);\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var path = Path.fromPoints(this.points).close();\n return {\n options: this.options,\n path: path\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n return {\n point: new Point(box.center().x, box.y1),\n align: {\n horizontal: 'center',\n vertical: 'top'\n }\n };\n },\n formatValue: function (format) {\n var point = this;\n return point.owner.formatPointValue(point, format);\n }\n });\n setDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: { width: 1 }\n });\n deepExtend(FunnelSegment.prototype, PointEventsMixin);\n var FunnelChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n render: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var series = options.series[0];\n var data = series.data;\n if (!data) {\n return;\n }\n var ref$1 = bindSegments(series);\n var total = ref$1.total;\n var points = ref$1.points;\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n fields = deepExtend({\n index: i,\n owner: this$1,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n var value = pointData.valueFields.value;\n var segment = this$1.createSegment(value, fields);\n var label = this$1.createLabel(value, fields);\n if (segment && label) {\n segment.append(label);\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'toggle',\n 'visual'\n ]\n });\n },\n createSegment: function (value, fields) {\n var seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n this.createLegendItem(value, seriesOptions, fields);\n if (fields.visible !== false) {\n var segment = new FunnelSegment(value, seriesOptions, fields);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n return segment;\n }\n },\n createLabel: function (value, fields) {\n var series = fields.series;\n var dataItem = fields.dataItem;\n var labels = deepExtend({}, this.options.labels, series.labels);\n var text = value;\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n });\n } else if (labels.format) {\n text = this.plotArea.chartService.format.auto(labels.format, text);\n }\n if (!labels.color) {\n var brightnessValue = new Color(series.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n this.evalSegmentOptions(labels, value, fields);\n var textBox = new TextBox(text, deepExtend({ vAlign: labels.position }, labels));\n this.labels.push(textBox);\n return textBox;\n }\n },\n labelPadding: function () {\n var labels = this.labels;\n var padding = {\n left: 0,\n right: 0\n };\n for (var i = 0; i < labels.length; i++) {\n var label = labels[i];\n var align = label.options.align;\n if (align !== CENTER) {\n var width = labels[i].box.width();\n if (align === LEFT) {\n padding.left = Math.max(padding.left, width);\n } else {\n padding.right = Math.max(padding.right, width);\n }\n }\n }\n return padding;\n },\n dynamicSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var firstSegment = segments[0];\n var maxSegment = firstSegment;\n for (var idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n var lastUpperSide = firstSegment.percentage / maxSegment.percentage * width;\n var previousOffset = (width - lastUpperSide) / 2;\n var previousHeight = 0;\n for (var idx$1 = 0; idx$1 < count; idx$1++) {\n var percentage = segments[idx$1].percentage;\n var nextSegment = segments[idx$1 + 1];\n var nextPercentage = nextSegment ? nextSegment.percentage : percentage;\n var points = segments[idx$1].points = [];\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n var offset = void 0;\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n offset = limitValue(offset, 0, width);\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + offset, box.y1 + height + previousHeight));\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\n },\n constantSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var decreasingWidth = options.neckRatio <= 1;\n var neckRatio = decreasingWidth ? options.neckRatio * width : width;\n var previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n var topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n var finalNarrow = (topMostWidth - neckRatio) / 2;\n var previousHeight = 0;\n for (var idx = 0; idx < count; idx++) {\n var points = segments[idx].points = [];\n var percentage = segments[idx].percentage;\n var offset = options.dynamicHeight ? finalNarrow * percentage : finalNarrow / count;\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + previousOffset + offset, box.y1 + height + previousHeight));\n previousOffset += offset;\n previousHeight += height + options.segmentSpacing;\n }\n },\n reflow: function (chartBox) {\n var points = this.points;\n var count = points.length;\n if (!count) {\n return;\n }\n var options = this.options;\n var box = chartBox.clone().unpad(this.labelPadding());\n var totalHeight = box.height() - options.segmentSpacing * (count - 1);\n var width = box.width();\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n for (var idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\n }\n });\n setDefaultOptions(FunnelChart, {\n neckRatio: 0.3,\n width: 300,\n dynamicSlope: false,\n dynamicHeight: true,\n segmentSpacing: 0,\n labels: {\n visible: false,\n align: CENTER,\n position: CENTER,\n zIndex: 1\n }\n });\n deepExtend(FunnelChart.prototype, PieChartMixin);\n var FunnelPlotArea = PlotAreaBase.extend({\n render: function () {\n this.createFunnelChart(this.series);\n },\n createFunnelChart: function (series) {\n var firstSeries = series[0];\n var funnelChart = new FunnelChart(this, {\n series: series,\n legend: this.options.legend,\n neckRatio: firstSeries.neckRatio,\n dynamicHeight: firstSeries.dynamicHeight,\n dynamicSlope: firstSeries.dynamicSlope,\n segmentSpacing: firstSeries.segmentSpacing,\n highlight: firstSeries.highlight\n });\n this.appendChart(funnelChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var COLOR = 'color';\n var FIRST = 'first';\n var FROM = 'from';\n var MAX = 'max';\n var MIN = 'min';\n var NOTE_TEXT = 'noteText';\n var SUMMARY_FIELD = 'summary';\n var TO = 'to';\n PlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n CANDLESTICK,\n OHLC,\n BULLET,\n VERTICAL_BULLET,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ]);\n PlotAreaFactory.current.register(XYPlotArea, [\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ]);\n PlotAreaFactory.current.register(PiePlotArea, [PIE]);\n PlotAreaFactory.current.register(DonutPlotArea, [DONUT]);\n PlotAreaFactory.current.register(FunnelPlotArea, [FUNNEL]);\n PlotAreaFactory.current.register(PolarPlotArea, [\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ]);\n PlotAreaFactory.current.register(RadarPlotArea, [\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ]);\n SeriesBinder.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], [\n FROM,\n TO\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n SUMMARY_FIELD\n ]);\n SeriesBinder.current.register([\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ], [\n X,\n Y\n ], [COLOR]);\n SeriesBinder.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], [VALUE], [COLOR]);\n SeriesBinder.current.register([FUNNEL], [VALUE], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n 'visible'\n ]);\n DefaultAggregates.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], {\n value: MAX,\n color: FIRST,\n noteText: FIRST,\n errorLow: MIN,\n errorHigh: MAX\n });\n DefaultAggregates.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], {\n from: MIN,\n to: MAX,\n color: FIRST,\n noteText: FIRST\n });\n DefaultAggregates.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], {\n value: MAX,\n color: FIRST\n });\n SeriesBinder.current.register([\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ], [\n X,\n Y\n ], [\n COLOR,\n NOTE_TEXT,\n X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([BUBBLE], [\n X,\n Y,\n 'size'\n ], [\n COLOR,\n CATEGORY,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n CANDLESTICK,\n OHLC\n ], [\n 'open',\n 'high',\n 'low',\n 'close'\n ], [\n CATEGORY,\n COLOR,\n 'downColor',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n CANDLESTICK,\n OHLC\n ], {\n open: MAX,\n high: MAX,\n low: MIN,\n close: MAX,\n color: FIRST,\n downColor: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], [\n 'lower',\n 'q1',\n 'median',\n 'q3',\n 'upper',\n 'mean',\n 'outliers'\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], {\n lower: MAX,\n q1: MAX,\n median: MAX,\n q3: MAX,\n upper: MAX,\n mean: MAX,\n outliers: FIRST,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BULLET,\n VERTICAL_BULLET\n ], [\n 'current',\n 'target'\n ], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BULLET,\n VERTICAL_BULLET\n ], {\n current: MAX,\n target: MAX,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n PIE,\n DONUT\n ], [VALUE], [\n CATEGORY,\n COLOR,\n 'explode',\n 'visibleInLegend',\n 'visible'\n ]);\n var AXIS_NAMES = [\n CATEGORY,\n VALUE,\n X,\n Y\n ];\n var MOUSEMOVE = 'mousemove';\n var CONTEXTMENU = 'contextmenu';\n var MOUSEMOVE_DELAY = 20;\n var Chart = Class.extend({\n init: function (element, userOptions, themeOptions, context) {\n var this$1 = this;\n if (context === void 0) {\n context = {};\n }\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new services.ChartService(this, context);\n this.chartService.theme = themeOptions;\n this._initElement(element);\n var options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n this._initSurface();\n this._initHandlers();\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n if (!this$1._destroyed) {\n this$1.trigger('init');\n this$1._redraw();\n this$1._attachEvents();\n }\n });\n },\n _initElement: function (element) {\n this._setElementClass(element);\n element.style.position = 'relative';\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n this.element = element;\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart');\n },\n _initTheme: function (options, themeOptions) {\n var seriesCopies = [];\n var series = options.series || [];\n for (var i = 0; i < series.length; i++) {\n seriesCopies.push($.extend({}, series[i]));\n }\n options.series = seriesCopies;\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\n },\n getSize: function () {\n return {\n width: this.element.offsetWidth,\n height: this.element.offsetHeight\n };\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n _resize: function () {\n this._noTransitionsRedraw();\n },\n redraw: function (paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n if (paneName) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPane(paneName);\n plotArea.redraw(pane);\n } else {\n this._redraw();\n }\n },\n getAxis: function (name) {\n var axes = this._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n return new ChartAxis(axes[idx]);\n }\n }\n },\n findAxisByName: function (name) {\n return this.getAxis(name);\n },\n findPaneByName: function (name) {\n var panes = this._plotArea.panes;\n for (var idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(panes[idx]);\n }\n }\n },\n findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\n },\n plotArea: function () {\n return new ChartPlotArea(this._plotArea);\n },\n toggleHighlight: function (show, filter) {\n var plotArea = this._plotArea;\n var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n var points;\n if (isFunction(filter)) {\n points = plotArea.filterPoints(filter);\n } else {\n var seriesName, categoryName;\n if (isObject(filter)) {\n seriesName = filter.series;\n categoryName = filter.category;\n } else {\n seriesName = categoryName = filter;\n }\n if (firstSeries.type === DONUT) {\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\n } else if (firstSeries.type === PIE || firstSeries.type === FUNNEL) {\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\n } else {\n points = plotArea.pointsBySeriesName(seriesName);\n }\n }\n if (points) {\n this.togglePointsHighlight(show, points);\n }\n },\n togglePointsHighlight: function (show, points) {\n var highlight = this._highlight;\n for (var idx = 0; idx < points.length; idx++) {\n highlight.togglePointHighlight(points[idx], show);\n }\n },\n showTooltip: function (filter) {\n var shared = this._sharedTooltip();\n var ref = this;\n var tooltip = ref._tooltip;\n var plotArea = ref._plotArea;\n var point, categoryIndex;\n if (isFunction(filter)) {\n point = plotArea.findPoint(filter);\n if (point && shared) {\n categoryIndex = point.categoryIx;\n }\n } else if (shared && defined(filter)) {\n categoryIndex = plotArea.categoryAxis.categoryIndex(filter);\n }\n if (shared) {\n if (categoryIndex >= 0) {\n var points = this._plotArea.pointsByCategoryIndex(categoryIndex);\n tooltip.showAt(points);\n }\n } else if (point) {\n tooltip.show(point);\n }\n },\n hideTooltip: function () {\n this._tooltip.hide();\n },\n _initSurface: function () {\n var surface = this.surface;\n var wrap = this._surfaceWrap();\n var chartArea = this.options.chartArea;\n if (chartArea.width) {\n dataviz.elementSize(wrap, { width: chartArea.width });\n }\n if (chartArea.height) {\n dataviz.elementSize(wrap, { height: chartArea.height });\n }\n if (!surface || surface.options.type !== this.options.renderAs) {\n if (surface) {\n surface.destroy();\n }\n this.surface = drawing.Surface.create(wrap, { type: this.options.renderAs });\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n _surfaceWrap: function () {\n return this.element;\n },\n _redraw: function () {\n var model = this._getModel();\n this._destroyView();\n this._model = model;\n this._plotArea = model._plotArea;\n model.renderVisual();\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n this._initSurface();\n this.surface.draw(model.visual);\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.play();\n }\n });\n }\n this._tooltip = this._createTooltip();\n this._highlight = new Highlight();\n this._setupSelection();\n this._createPannable();\n this._createZoomSelection();\n this._createMousewheelZoom();\n this.trigger(RENDER);\n if (!this._navState) {\n this._cancelDomEvents();\n }\n },\n exportVisual: function (exportOptions) {\n var visual;\n if (exportOptions && (exportOptions.width || exportOptions.height || exportOptions.options)) {\n var currentOptions = this.options;\n var options = deepExtend({}, exportOptions.options, {\n chartArea: {\n width: exportOptions.width,\n height: exportOptions.height\n }\n });\n clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n var model = this._getModel();\n model.renderVisual();\n visual = model.visual;\n this.options = currentOptions;\n } else {\n visual = this.surface.exportVisual();\n }\n return visual;\n },\n _sharedTooltip: function () {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip.shared;\n },\n _createPannable: function () {\n var options = this.options;\n if (options.pannable !== false) {\n this._pannable = new Pannable(this._plotArea, options.pannable);\n }\n },\n _createZoomSelection: function () {\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (zoomable !== false && selection !== false) {\n this._zoomSelection = new ZoomSelection(this, selection);\n }\n },\n _toggleDomDrag: function () {\n if (!this.domEvents || !this.domEvents.toggleDrag) {\n return;\n }\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (!pannable && (zoomable === false || selection === false) && !this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this.domEvents.toggleDrag(false);\n } else {\n this.domEvents.toggleDrag(true);\n }\n },\n _createMousewheelZoom: function () {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if (zoomable !== false && mousewheel !== false) {\n this._mousewheelZoom = new MousewheelZoom(this, mousewheel);\n }\n },\n _toggleDomZoom: function () {\n if (!this.domEvents || !this.domEvents.toggleZoom) {\n return;\n }\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if ((zoomable === false || mousewheel === false) && !this.requiresHandlers([\n ZOOM_START,\n ZOOM,\n ZOOM_END\n ])) {\n this.domEvents.toggleZoom(false);\n } else {\n this.domEvents.toggleZoom(true);\n }\n },\n _createTooltip: function () {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var tooltip;\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n return tooltip;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip(this._plotArea, options);\n },\n applyDefaults: function (options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n },\n applySeriesColors: function () {\n var options = this.options;\n var series = options.series;\n var colors = options.seriesColors || [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var seriesColor = colors[i % colors.length];\n var defaults = currentSeries._defaults;\n currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\n }\n }\n },\n _getModel: function () {\n var options = this.options;\n var plotArea = this._createPlotArea();\n var model = new dataviz.RootElement(this._modelOptions());\n model.chart = this;\n model._plotArea = plotArea;\n dataviz.Title.buildTitle(options.title, model);\n if (options.legend.visible) {\n model.append(new Legend(plotArea.options.legend, this.chartService));\n }\n model.append(plotArea);\n model.reflow();\n return model;\n },\n _modelOptions: function () {\n var ref = this;\n var options = ref.options;\n var element = ref.element;\n var size = dataviz.elementSize(element);\n this._size = null;\n return deepExtend({\n width: Math.floor(size.width) || datavizConstants.DEFAULT_WIDTH,\n height: Math.floor(size.height) || datavizConstants.DEFAULT_HEIGHT,\n transitions: options.transitions\n }, options.chartArea);\n },\n _createPlotArea: function (skipSeries) {\n var options = this.options;\n var plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n return plotArea;\n },\n _hasSelection: function () {\n return this._selections && this._selections.length;\n },\n _setupSelection: function () {\n var this$1 = this;\n var ref = this;\n var axes = ref._plotArea.axes;\n var selections = this._selections = [];\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var options = axis.options;\n if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n var min = 0;\n var max = options.categories.length - 1;\n if (axis instanceof DateCategoryAxis) {\n min = options.categories[min];\n max = options.categories[max];\n }\n if (!options.justified) {\n if (axis instanceof DateCategoryAxis) {\n max = dataviz.addDuration(max, 1, options.baseUnit, options.weekStartDay);\n } else {\n max++;\n }\n }\n var selection = new Selection(this$1, axis, deepExtend({\n min: min,\n max: max\n }, options.select));\n selections.push(selection);\n }\n }\n },\n _selectStart: function (e) {\n return this.trigger(SELECT_START, e);\n },\n _select: function (e) {\n return this.trigger(SELECT, e);\n },\n _selectEnd: function (e) {\n return this.trigger(SELECT_END, e);\n },\n _initHandlers: function () {\n this._clickHandler = this._click.bind(this);\n this._mousewheelHandler = this._mousewheel.bind(this);\n this._surfaceMouseenterHandler = this._mouseover.bind(this);\n this._surfaceMouseleaveHandler = this._mouseout.bind(this);\n this._mousemove = kendo.throttle(this._mousemove.bind(this), MOUSEMOVE_DELAY);\n },\n addObserver: function (observer) {\n if (observer) {\n this.observers.push(observer);\n }\n },\n removeObserver: function (observer) {\n var index = this.observers.indexOf(observer);\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n },\n requiresHandlers: function (eventNames) {\n var observers = this.observers;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].requiresHandlers(eventNames)) {\n return true;\n }\n }\n },\n trigger: function (name, args) {\n if (args === void 0) {\n args = {};\n }\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n }\n args.sender = this;\n var observers = this.observers;\n var isDefaultPrevented = false;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n return isDefaultPrevented;\n },\n _attachEvents: function () {\n var ref = this;\n var element = ref.element;\n var surface = ref.surface;\n surface.bind('mouseenter', this._surfaceMouseenterHandler);\n surface.bind('mouseleave', this._surfaceMouseleaveHandler);\n var obj;\n bindEvents(element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\n }\n this.domEvents = services.DomEventsBuilder.create(this.element, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n this._toggleDomDrag();\n this._toggleDomZoom();\n },\n _cancelDomEvents: function () {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\n },\n _gesturestart: function (e) {\n if (this._mousewheelZoom && !this._stopDragEvent(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\n }\n },\n _gestureend: function (e) {\n if (this._zooming && !this._stopDragEvent(e)) {\n if (this.surface) {\n this.surface.resumeTracking();\n }\n this._zooming = false;\n this.trigger(ZOOM_END, {});\n }\n },\n _gesturechange: function (e) {\n var mousewheelZoom = this._mousewheelZoom;\n if (mousewheelZoom && !this._stopDragEvent(e)) {\n e.preventDefault();\n var previousGestureDistance = this._gestureDistance;\n var scaleDelta = -e.distance / previousGestureDistance + 1;\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n this._gestureDistance = e.distance;\n var args = {\n delta: scaleDelta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n if (!this._zooming) {\n this._zooming = true;\n }\n var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta);\n if (ranges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n }\n }\n }\n },\n _mouseout: function (e) {\n if (e.element) {\n var element = this._drawingChartElement(e.element, e);\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n },\n _start: function (e) {\n var coords = this._eventCoordinates(e);\n if (this._stopDragEvent(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\n if (this._pannable && this._pannable.start(e)) {\n this.surface.suspendTracking();\n this._unsetActivePoint();\n this._suppressHover = true;\n }\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n }\n }\n },\n _move: function (e) {\n var ref = this;\n var state = ref._navState;\n var pannable = ref._pannable;\n if (this._stopDragEvent(e)) {\n return;\n }\n if (pannable) {\n var ranges = pannable.move(e);\n if (ranges && !this.trigger(DRAG, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n pannable.pan();\n }\n } else if (state) {\n var ranges$1 = {};\n var axes = state.axes;\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n var axis = currentAxis.options.vertical ? e.y : e.x;\n var delta = axis.startLocation - axis.location;\n if (delta !== 0) {\n ranges$1[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n state.axisRanges = ranges$1;\n this.trigger(DRAG, {\n axisRanges: ranges$1,\n originalEvent: e\n });\n }\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n },\n _end: function (e) {\n if (this._stopDragEvent(e)) {\n return;\n }\n var pannable = this._pannable;\n if (pannable && pannable.end(e)) {\n this.surface.resumeTracking();\n this.trigger(DRAG_END, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n this._suppressHover = false;\n } else {\n this._endNavigation(e, DRAG_END);\n }\n if (this._zoomSelection) {\n var ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, {\n axisRanges: ranges,\n originalEvent: e\n });\n }\n }\n },\n _stopDragEvent: function () {\n return this._hasSelection();\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n var mousewheelZoom = this._mousewheelZoom;\n var coords = this._eventCoordinates(e);\n if (!this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (mousewheelZoom) {\n var args = {\n delta: delta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n if (!this._zooming) {\n this._unsetActivePoint();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n args.axisRanges = mousewheelZoom.updateRanges(delta);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n this._mwTimeout = setTimeout(function () {\n this$1.trigger(ZOOM_END, args);\n this$1._zooming = false;\n if (this$1.surface) {\n this$1.surface.resumeTracking();\n }\n }, MOUSEWHEEL_DELAY);\n }\n } else {\n var state = this._navState;\n if (!state) {\n var prevented = this._startNavigation(e, coords, ZOOM_START);\n if (!prevented) {\n state = this._navState;\n }\n }\n if (state) {\n var totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n var axes = this._navState.axes;\n var ranges = {};\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n ranges[axisName] = currentAxis.scaleRange(-totalDelta);\n }\n }\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\n }\n }\n },\n _startNavigation: function (e, coords, chartEvent) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPointPane(coords);\n var axes = plotArea.axes.slice(0);\n if (!pane) {\n return;\n }\n var ranges = axisRanges(axes);\n var prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\n if (prevented) {\n this._cancelDomEvents();\n } else {\n this._suppressHover = true;\n this._unsetActivePoint();\n this._navState = {\n axisRanges: ranges,\n pane: pane,\n axes: axes\n };\n }\n },\n _endNavigation: function (e, chartEvent) {\n if (this._navState) {\n this.trigger(chartEvent, {\n axisRanges: this._navState.axisRanges,\n originalEvent: e\n });\n this._suppressHover = false;\n this._navState = null;\n }\n },\n _getChartElement: function (e, match) {\n var element = this.surface.eventTarget(e);\n if (element) {\n return this._drawingChartElement(element, e, match);\n }\n },\n _drawingChartElement: function (element, e, match) {\n var current = element;\n var chartElement;\n while (current && !chartElement) {\n chartElement = current.chartElement;\n current = current.parent;\n }\n if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n if (match) {\n chartElement = chartElement.closest(match);\n if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\n }\n return chartElement;\n }\n },\n _eventCoordinates: function (e) {\n var coordinates = dataviz.eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n },\n _elementPadding: function () {\n if (!this._padding) {\n var ref = elementStyles(this.element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n return this._padding;\n },\n _toDocumentCoordinates: function (point) {\n var padding = this._elementPadding();\n var offset = dataviz.elementOffset(this.element);\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\n };\n },\n _toModelCoordinates: function (clientX, clientY) {\n var element = this.element;\n var offset = dataviz.elementOffset(element);\n var padding = this._elementPadding();\n return new Point(clientX - offset.left - padding.left, clientY - offset.top - padding.top);\n },\n _tap: function (e) {\n var this$1 = this;\n var drawingElement = this.surface.eventTarget(e);\n var element = this._drawingChartElement(drawingElement, e);\n if (this._activePoint === element) {\n this._propagateClick(element, e);\n } else {\n if (!this._startHover(drawingElement, e)) {\n this._unsetActivePoint();\n }\n this._propagateClick(element, e);\n }\n this.handlingTap = true;\n setTimeout(function () {\n this$1.handlingTap = false;\n }, 0);\n },\n _click: function (e) {\n var element = this._getChartElement(e);\n this._propagateClick(element, e);\n },\n _propagateClick: function (element, e) {\n var this$1 = this;\n var current = element;\n while (current) {\n if (current.click) {\n current.click(this$1, e);\n }\n current = current.parent;\n }\n },\n _startHover: function (element, e) {\n var chartElement = this._drawingChartElement(element, e);\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n if (this._suppressHover || !highlight || highlight.isHighlighted(chartElement) || this._sharedTooltip()) {\n return false;\n }\n var point = this._drawingChartElement(element, e, function (element) {\n return element.hover && !(element instanceof PlotAreaBase);\n });\n if (point && !point.hover(this, e)) {\n this._activePoint = point;\n var tooltipOptions = deepExtend({}, tooltipOptions, point.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(point);\n }\n highlight.show(point);\n return point;\n }\n },\n _mouseover: function (e) {\n var point = this._startHover(e.element, e.originalEvent);\n if (point && point.tooltipTracking) {\n this._mouseMoveTrackHandler = this._mouseMoveTrackHandler || this._mouseMoveTracking.bind(this);\n var obj;\n bindEvents(document, (obj = {}, obj[MOUSEMOVE] = this._mouseMoveTrackHandler, obj));\n }\n },\n _mouseMoveTracking: function (e) {\n var ref = this;\n var options = ref.options;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n var point = ref._activePoint;\n var coords = this._eventCoordinates(e);\n if (this._plotArea.box.containsPoint(coords)) {\n if (point && point.tooltipTracking && point.series && point.parent.getNearestPoint) {\n var seriesPoint = point.parent.getNearestPoint(coords.x, coords.y, point.seriesIx);\n if (seriesPoint && seriesPoint !== point) {\n seriesPoint.hover(this, e);\n this._activePoint = seriesPoint;\n var tooltipOptions = deepExtend({}, options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\n }\n highlight.show(seriesPoint);\n }\n }\n } else {\n var obj;\n unbindEvents(document, (obj = {}, obj[MOUSEMOVE] = this._mouseMoveTrackHandler, obj));\n this._unsetActivePoint();\n }\n },\n _mousemove: function (e) {\n var coords = this._eventCoordinates(e);\n this._trackCrosshairs(coords);\n if (this._plotArea.hover) {\n this._plotArea.hover(this, e);\n }\n if (this._sharedTooltip()) {\n this._trackSharedTooltip(coords, e);\n }\n },\n _trackCrosshairs: function (coords) {\n var crosshairs = this._plotArea.crosshairs;\n for (var i = 0; i < crosshairs.length; i++) {\n var current = crosshairs[i];\n if (current.box.containsPoint(coords)) {\n current.showAt(coords);\n } else {\n current.hide();\n }\n }\n },\n _trackSharedTooltip: function (coords, e) {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var plotArea = ref._plotArea;\n var categoryAxis = ref._plotArea.categoryAxis;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n if (plotArea.box.containsPoint(coords)) {\n var index = categoryAxis.pointCategoryIndex(coords);\n if (index !== this._tooltipCategoryIx) {\n var points = plotArea.pointsByCategoryIndex(index);\n var pointArgs = points.map(function (point) {\n return point.eventArgs(e);\n });\n var hoverArgs = pointArgs[0] || {};\n hoverArgs.categoryPoints = pointArgs;\n if (points.length > 0 && !this.trigger(SERIES_HOVER, hoverArgs)) {\n if (tooltipOptions.visible) {\n tooltip.showAt(points, coords);\n }\n highlight.show(points);\n } else {\n tooltip.hide();\n }\n this._tooltipCategoryIx = index;\n }\n }\n },\n hideElements: function () {\n var ref = this;\n var plotArea = ref._plotArea;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._mousemove.cancel();\n plotArea.hideCrosshairs();\n highlight.hide();\n tooltip.hide();\n delete this._tooltipCategoryIx;\n },\n _unsetActivePoint: function () {\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._activePoint = null;\n if (tooltip) {\n tooltip.hide();\n }\n if (highlight) {\n highlight.hide();\n }\n },\n _deferRedraw: function () {\n this._redraw();\n },\n _clearRedrawTimeout: function () {\n if (this._redrawTimeout) {\n clearInterval(this._redrawTimeout);\n this._redrawTimeout = null;\n }\n },\n bindCategories: function () {\n var this$1 = this;\n var options = this.options;\n var definitions = [].concat(options.categoryAxis);\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n this$1.bindCategoryAxisFromSeries(axis, axisIx);\n }\n }\n },\n bindCategoryAxisFromSeries: function (axis, axisIx) {\n var this$1 = this;\n var series = this.options.series;\n var seriesLength = series.length;\n var uniqueCategories = {};\n var items = [];\n var dateAxis;\n for (var seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n var s = series[seriesIx];\n var onAxis = s.categoryAxis === axis.name || !s.categoryAxis && axisIx === 0;\n var data = s.data;\n var dataLength = data.length;\n if (s.categoryField && onAxis && dataLength > 0) {\n dateAxis = isDateAxis(axis, getField(s.categoryField, data[0]));\n var getFn = dateAxis ? getDateField : getField;\n for (var dataIx = 0; dataIx < dataLength; dataIx++) {\n var dataRow = data[dataIx];\n var category = getFn(s.categoryField, dataRow, this$1.chartService.intl);\n if (dateAxis || !uniqueCategories[category]) {\n items.push([\n category,\n dataRow\n ]);\n if (!dateAxis) {\n uniqueCategories[category] = true;\n }\n }\n }\n }\n }\n if (items.length > 0) {\n if (dateAxis) {\n items = uniqueDates(items, function (a, b) {\n return dataviz.dateComparer(a[0], b[0]);\n });\n }\n var result = transpose(items);\n axis.categories = result[0];\n }\n },\n _isBindable: function (series) {\n var valueFields = SeriesBinder.current.valueFields(series);\n var result = true;\n for (var i = 0; i < valueFields.length; i++) {\n var field = valueFields[i];\n if (field === VALUE) {\n field = 'field';\n } else {\n field = field + 'Field';\n }\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n return result;\n },\n _noTransitionsRedraw: function () {\n var options = this.options;\n var transitionsState;\n if (options.transitions) {\n options.transitions = false;\n transitionsState = true;\n }\n this._redraw();\n if (transitionsState) {\n options.transitions = true;\n }\n },\n _legendItemHover: function (seriesIndex, pointIndex) {\n var ref = this;\n var plotArea = ref._plotArea;\n var highlight = ref._highlight;\n var currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n var items;\n if (inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\n items = plotArea.findPoint(function (point) {\n return point.series.index === seriesIndex && point.index === pointIndex;\n });\n } else {\n items = plotArea.pointsBySeriesIndex(seriesIndex);\n }\n highlight.show(items);\n },\n _shouldAttachMouseMove: function () {\n return this._plotArea.crosshairs.length || this._tooltip && this._sharedTooltip() || this.requiresHandlers([PLOT_AREA_HOVER]);\n },\n updateMouseMoveHandler: function () {\n var obj;\n unbindEvents(this.element, (obj = {}, obj[MOUSEMOVE] = this._mousemove, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(this.element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\n }\n },\n applyOptions: function (options, theme) {\n clearMissingValues(this._originalOptions, options);\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n },\n setOptions: function (options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n this._toggleDomDrag();\n this._toggleDomZoom();\n },\n destroy: function () {\n this._destroyed = true;\n var obj;\n unbindEvents(this.element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj[MOUSEMOVE] = this._mousemove, obj));\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n var obj$1;\n unbindEvents(document, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mouseMoveTrackHandler, obj$1));\n this._destroyView();\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n this._clearRedrawTimeout();\n },\n _destroyView: function () {\n var ref = this;\n var model = ref._model;\n var selections = ref._selections;\n if (model) {\n model.destroy();\n this._model = null;\n }\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n this._unsetActivePoint();\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n if (this._highlight) {\n this._highlight.destroy();\n }\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n });\n function resolveAxisAliases(options) {\n var aliases = AXIS_NAMES;\n for (var idx = 0; idx < aliases.length; idx++) {\n var alias = aliases[idx] + 'Axes';\n if (options[alias]) {\n options[aliases[idx] + 'Axis'] = options[alias];\n delete options[alias];\n }\n }\n }\n function pointByCategoryName(points, name) {\n if (points) {\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx].category === name) {\n return [points[idx]];\n }\n }\n }\n }\n function applyAxisDefaults(options, themeOptions) {\n var themeAxisDefaults = (themeOptions || {}).axisDefaults || {};\n var axisName, axisDefaults, axes;\n function mapAxisOptions(axisOptions) {\n var axisColor = (axisOptions || {}).color || axisDefaults.color;\n var result = deepExtend({}, themeAxisDefaults, themeAxisDefaults[axisName], axisDefaults, axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n }, axisOptions);\n delete result[axisName];\n return result;\n }\n for (var idx = 0; idx < AXIS_NAMES.length; idx++) {\n axisName = AXIS_NAMES[idx] + 'Axis';\n axisDefaults = options.axisDefaults || {};\n axes = [].concat(options[axisName]);\n axes = axes.map(mapAxisOptions);\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\n }\n function applySeriesDefaults(options, themeOptions) {\n var series = options.series;\n var seriesLength = series.length;\n var seriesDefaults = options.seriesDefaults;\n var commonDefaults = deepExtend({}, options.seriesDefaults);\n var themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n var commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n for (var i = 0; i < seriesLength; i++) {\n var seriesType = series[i].type || options.seriesDefaults.type;\n var baseOptions = deepExtend({ data: [] }, commonThemeDefaults, themeSeriesDefaults[seriesType], { tooltip: options.tooltip }, commonDefaults, seriesDefaults[seriesType]);\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n }\n }\n function cleanupNestedSeriesDefaults(seriesDefaults) {\n delete seriesDefaults.bar;\n delete seriesDefaults.column;\n delete seriesDefaults.rangeColumn;\n delete seriesDefaults.line;\n delete seriesDefaults.verticalLine;\n delete seriesDefaults.pie;\n delete seriesDefaults.donut;\n delete seriesDefaults.area;\n delete seriesDefaults.verticalArea;\n delete seriesDefaults.scatter;\n delete seriesDefaults.scatterLine;\n delete seriesDefaults.bubble;\n delete seriesDefaults.candlestick;\n delete seriesDefaults.ohlc;\n delete seriesDefaults.boxPlot;\n delete seriesDefaults.bullet;\n delete seriesDefaults.verticalBullet;\n delete seriesDefaults.polarArea;\n delete seriesDefaults.polarLine;\n delete seriesDefaults.radarArea;\n delete seriesDefaults.radarLine;\n delete seriesDefaults.waterfall;\n }\n function axisRanges(axes) {\n var ranges = {};\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var axisName = axis.options.name;\n if (axisName) {\n ranges[axisName] = axis.range();\n }\n }\n return ranges;\n }\n function sortDates(dates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n for (var i = 1, length = dates.length; i < length; i++) {\n if (comparer(dates[i], dates[i - 1]) < 0) {\n dates.sort(comparer);\n break;\n }\n }\n return dates;\n }\n function uniqueDates(srcDates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n var dates = sortDates(srcDates, comparer);\n var length = dates.length;\n var result = length > 0 ? [dates[0]] : [];\n for (var i = 1; i < length; i++) {\n if (comparer(dates[i], last(result)) !== 0) {\n result.push(dates[i]);\n }\n }\n return result;\n }\n function transpose(rows) {\n var rowCount = rows.length;\n var result = [];\n for (var rowIx = 0; rowIx < rowCount; rowIx++) {\n var row = rows[rowIx];\n var colCount = row.length;\n for (var colIx = 0; colIx < colCount; colIx++) {\n result[colIx] = result[colIx] || [];\n result[colIx].push(row[colIx]);\n }\n }\n return result;\n }\n function clearMissingValues(originalOptions, options) {\n for (var field in options) {\n var fieldValue = options[field];\n var originalValue = originalOptions[field];\n if (defined(originalValue)) {\n var nullValue = fieldValue === null;\n if (nullValue || !defined(fieldValue)) {\n delete originalOptions[field];\n if (nullValue) {\n delete options[field];\n }\n } else if (originalValue && isObject(fieldValue)) {\n if (isObject(originalValue)) {\n clearMissingValues(originalValue, fieldValue);\n }\n }\n }\n }\n }\n setDefaultOptions(Chart, {\n renderAs: '',\n chartArea: {},\n legend: {\n visible: true,\n labels: {}\n },\n categoryAxis: {},\n seriesDefaults: {\n type: COLUMN,\n data: [],\n highlight: { visible: true },\n labels: {},\n negativeValues: { visible: false }\n },\n series: [],\n seriesColors: null,\n tooltip: { visible: false },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Aggregates: Aggregates,\n AreaChart: AreaChart,\n AreaSegment: AreaSegment,\n AxisGroupRangeTracker: AxisGroupRangeTracker,\n Bar: Bar,\n BarChart: BarChart,\n BarLabel: BarLabel,\n BoxPlotChart: BoxPlotChart,\n BoxPlot: BoxPlot,\n BubbleChart: BubbleChart,\n Bullet: Bullet,\n BulletChart: BulletChart,\n CandlestickChart: CandlestickChart,\n Candlestick: Candlestick,\n CategoricalChart: CategoricalChart,\n CategoricalErrorBar: CategoricalErrorBar,\n CategoricalPlotArea: CategoricalPlotArea,\n Chart: Chart,\n ChartContainer: ChartContainer,\n ClipAnimation: ClipAnimation,\n ClusterLayout: ClusterLayout,\n Crosshair: Crosshair,\n CrosshairTooltip: CrosshairTooltip,\n DefaultAggregates: DefaultAggregates,\n DonutChart: DonutChart,\n DonutPlotArea: DonutPlotArea,\n DonutSegment: DonutSegment,\n ErrorBarBase: ErrorBarBase,\n ErrorRangeCalculator: ErrorRangeCalculator,\n Highlight: Highlight,\n SharedTooltip: SharedTooltip,\n Legend: Legend,\n LegendItem: LegendItem,\n LegendLayout: LegendLayout,\n LineChart: LineChart,\n LinePoint: LinePoint,\n LineSegment: LineSegment,\n Pane: Pane,\n PieAnimation: PieAnimation,\n PieChart: PieChart,\n PieChartMixin: PieChartMixin,\n PiePlotArea: PiePlotArea,\n PieSegment: PieSegment,\n PlotAreaBase: PlotAreaBase,\n PlotAreaEventsMixin: PlotAreaEventsMixin,\n PlotAreaFactory: PlotAreaFactory,\n PointEventsMixin: PointEventsMixin,\n RangeBar: RangeBar,\n RangeBarChart: RangeBarChart,\n RangeAreaPoint: RangeAreaPoint,\n RangeAreaChart: RangeAreaChart,\n ScatterChart: ScatterChart,\n ScatterErrorBar: ScatterErrorBar,\n ScatterLineChart: ScatterLineChart,\n Selection: Selection,\n SeriesAggregator: SeriesAggregator,\n SeriesBinder: SeriesBinder,\n SplineSegment: SplineSegment,\n SplineAreaSegment: SplineAreaSegment,\n StackWrap: StackWrap,\n Tooltip: Tooltip,\n OHLCChart: OHLCChart,\n OHLCPoint: OHLCPoint,\n WaterfallChart: WaterfallChart,\n WaterfallSegment: WaterfallSegment,\n XYPlotArea: XYPlotArea,\n MousewheelZoom: MousewheelZoom,\n ZoomSelection: ZoomSelection,\n Pannable: Pannable,\n ChartAxis: ChartAxis,\n ChartPane: ChartPane,\n ChartPlotArea: ChartPlotArea,\n anyHasZIndex: anyHasZIndex,\n appendIfNotNull: areNumbers,\n areNumbers: areNumbers,\n bindSegments: bindSegments,\n categoriesCount: categoriesCount,\n countNumbers: countNumbers,\n equalsIgnoreCase: equalsIgnoreCase,\n evalOptions: evalOptions,\n filterSeriesByType: filterSeriesByType,\n getDateField: getDateField,\n getField: getField,\n hasGradientOverlay: hasGradientOverlay,\n hasValue: hasValue,\n isDateAxis: isDateAxis,\n segmentVisible: segmentVisible,\n singleItemOrArray: singleItemOrArray\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/chart', [\n 'dataviz/chart/kendo-chart',\n 'kendo.data',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.drawing',\n 'kendo.userevents'\n ], f);\n}(function () {\n (function ($, undefined) {\n var NS = '.kendoChart';\n var kendo = window.kendo;\n var Class = kendo.Class;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var KendoChart = dataviz.Chart;\n var SeriesBinder = dataviz.SeriesBinder;\n var Widget = kendo.ui.Widget;\n var DataSource = kendo.data.DataSource;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var getField = dataviz.getField;\n var InstanceObserver = dataviz.InstanceObserver;\n var inArray = dataviz.inArray;\n var services = dataviz.services;\n var proxy = $.proxy;\n var isArray = $.isArray;\n var extend = $.extend;\n var template = kendo.template;\n var MOUSELEAVE_NS = 'mouseleave' + NS;\n var AXIS_LABEL_CLICK = constants.AXIS_LABEL_CLICK;\n var LEGEND_ITEM_CLICK = constants.LEGEND_ITEM_CLICK;\n var LEGEND_ITEM_HOVER = constants.LEGEND_ITEM_HOVER;\n var SERIES_CLICK = constants.SERIES_CLICK;\n var SERIES_HOVER = constants.SERIES_HOVER;\n var PLOT_AREA_CLICK = constants.PLOT_AREA_CLICK;\n var PLOT_AREA_HOVER = constants.PLOT_AREA_HOVER;\n var DRAG = constants.DRAG;\n var DRAG_END = constants.DRAG_END;\n var DRAG_START = constants.DRAG_START;\n var ZOOM_START = constants.ZOOM_START;\n var ZOOM = constants.ZOOM;\n var ZOOM_END = constants.ZOOM_END;\n var SELECT_START = constants.SELECT_START;\n var SELECT = constants.SELECT;\n var SELECT_END = constants.SELECT_END;\n var RENDER = constants.RENDER;\n var NOTE_CLICK = constants.NOTE_CLICK;\n var NOTE_HOVER = constants.NOTE_HOVER;\n var CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var LEAVE = 'leave';\n var VALUE = constants.VALUE;\n var PIE = constants.PIE;\n var DONUT = constants.DONUT;\n var FUNNEL = constants.FUNNEL;\n var Observable = kendo.Observable;\n var TOOLTIP_ANIMATION_DURATION = 150;\n var TOOLTIP_SHOW_DELAY = 100;\n var TOOLTIP_INVERSE = 'k-chart-tooltip-inverse';\n var SHARED_TOOLTIP_CLASS = 'k-chart-shared-tooltip';\n var RTL = 'rtl';\n services.DomEventsBuilder.register({\n create: function (element, events) {\n return new kendo.UserEvents(element, deepExtend({\n global: true,\n multiTouch: true,\n fastTap: true\n }, events));\n }\n });\n var ChartInstanceObserver = InstanceObserver.extend({\n handlerMap: {\n showTooltip: '_showTooltip',\n hideTooltip: '_hideTooltip',\n legendItemClick: '_onLegendItemClick',\n render: '_onRender',\n init: '_onInit'\n }\n });\n var Chart = Widget.extend({\n init: function (element, userOptions) {\n var dataSource;\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n if (userOptions) {\n dataSource = userOptions.dataSource;\n delete userOptions.dataSource;\n }\n this.options = deepExtend({}, this.options, userOptions);\n this.wrapper = this.element;\n this._attachEvents();\n if (userOptions) {\n userOptions.dataSource = dataSource;\n }\n this._seriesVisibility = new SeriesVisibilityState();\n this.bind(this.events, this.options);\n this._initDataSource(userOptions);\n kendo.notify(this, dataviz.ui);\n },\n events: [\n DATABOUND,\n SERIES_CLICK,\n SERIES_HOVER,\n AXIS_LABEL_CLICK,\n LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER,\n PLOT_AREA_CLICK,\n PLOT_AREA_HOVER,\n DRAG_START,\n DRAG,\n DRAG_END,\n ZOOM_START,\n ZOOM,\n ZOOM_END,\n SELECT_START,\n SELECT,\n SELECT_END,\n NOTE_CLICK,\n NOTE_HOVER,\n RENDER\n ],\n options: {\n name: 'Chart',\n renderAs: '',\n theme: 'default',\n axisDefaults: {},\n chartArea: {},\n legend: {},\n categoryAxis: {},\n autoBind: true,\n seriesDefaults: {},\n series: [],\n seriesColors: null,\n tooltip: {},\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\n },\n items: function () {\n return $();\n },\n refresh: function () {\n var chart = this;\n var instance = chart._instance;\n instance.applyDefaults(chart.options);\n instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n chart.trigger(DATABOUND);\n chart._redraw();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n redraw: function (paneName) {\n this._size = null;\n this._instance.redraw(paneName);\n },\n setOptions: function (options) {\n var chart = this, dataSource = options.dataSource;\n delete options.dataSource;\n Widget.fn._setEvents.call(chart, options);\n this._instance.applyOptions(options, this._getThemeOptions(options));\n this.options = this._instance.options;\n this._tooltip.setOptions(this.options.tooltip);\n this._seriesVisibility.setOptions(this.options);\n this._sourceSeries = null;\n if (dataSource) {\n chart.setDataSource(dataSource);\n }\n if (chart._hasDataSource) {\n chart._onDataChanged();\n } else {\n chart._bindCategories();\n chart.redraw();\n }\n chart._instance.updateMouseMoveHandler();\n },\n setDataSource: function (dataSource) {\n var chart = this;\n chart.dataSource.unbind(CHANGE, chart._dataChangeHandler);\n chart.dataSource = dataSource = DataSource.create(dataSource);\n chart._hasDataSource = true;\n chart._hasData = false;\n dataSource.bind(CHANGE, chart._dataChangeHandler);\n if (chart.options.autoBind) {\n dataSource.fetch();\n }\n },\n destroy: function () {\n var chart = this, dataSource = chart.dataSource;\n chart.element.off(NS);\n if (dataSource) {\n dataSource.unbind(CHANGE, chart._dataChangeHandler);\n }\n if (chart._instance) {\n chart._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n this._destroyCrosshairTooltips();\n Widget.fn.destroy.call(chart);\n },\n findPaneByName: function (name) {\n var panes = this._plotArea.panes;\n for (var idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(this, panes[idx]);\n }\n }\n },\n findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(this, panes[idx]);\n }\n },\n findSeries: function (callback) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (callback(series[idx])) {\n return new ChartSeries(this, series[idx]);\n }\n }\n },\n findSeriesByName: function (name) {\n return this._createSeries({ name: name });\n },\n findSeriesByIndex: function (index) {\n return this._createSeries({ index: index });\n },\n _createSeries: function (options) {\n var seriesOptions = this._seriesOptions(options);\n if (seriesOptions) {\n return new ChartSeries(this, seriesOptions);\n }\n },\n _seriesOptions: function (options) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n var seriesOptions;\n if (defined(options.index)) {\n seriesOptions = series[options.index];\n } else if (defined(options.name)) {\n for (var idx = 0; idx < series.length; idx++) {\n if (series[idx].name === options.name) {\n seriesOptions = series[idx];\n break;\n }\n }\n }\n return seriesOptions;\n },\n _attachEvents: function () {\n this.element.on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n },\n _mouseleave: function (e) {\n var instance = this._instance;\n var tooltip = this._tooltip;\n var target = e.relatedTarget;\n if (!(target && $(target).closest(tooltip.element).length) && instance && !instance.handlingTap) {\n instance.hideElements();\n }\n },\n _getThemeOptions: function (userOptions) {\n var themeName = (userOptions || {}).theme;\n if (themeName === 'sass' || themeName === 'default-v2' || themeName === 'bootstrap-v4') {\n return dataviz.autoTheme().chart;\n }\n if (defined(themeName)) {\n var themes = dataviz.ui.themes || {};\n var theme = themes[themeName] || themes[themeName.toLowerCase()] || {};\n return theme.chart || {};\n }\n },\n _initChart: function () {\n this._createChart(this.options, this._getThemeOptions(this.options));\n this.options = this._instance.options;\n this._seriesVisibility.setOptions(this.options);\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoChart(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _onInit: function (e) {\n this._instance = e.sender;\n },\n _initDataSource: function (userOptions) {\n var chart = this, dataSource = (userOptions || {}).dataSource;\n chart._dataChangeHandler = proxy(chart._onDataChanged, chart);\n chart.dataSource = DataSource.create(dataSource).bind('change', chart._dataChangeHandler);\n chart._bindCategories();\n if (dataSource) {\n chart._hasDataSource = true;\n }\n this._initChart();\n this._initTooltip();\n if (dataSource) {\n if (chart.options.autoBind) {\n chart.dataSource.fetch();\n }\n }\n },\n _destroyCrosshairTooltips: function () {\n var tooltips = this._crosshairTooltips;\n if (tooltips) {\n for (var key in tooltips) {\n tooltips[key].destroy();\n }\n }\n this._crosshairTooltips = {};\n },\n _getCrosshairTooltip: function (name, index) {\n var tooltips = this._crosshairTooltips = this._crosshairTooltips || {};\n var key = name + index;\n var tooltip = tooltips[key];\n if (!tooltip) {\n tooltip = tooltips[key] = new CrosshairTooltip(this.element);\n }\n return tooltip;\n },\n _showTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.show(e);\n } else if (this._tooltip) {\n this._tooltip.show(e);\n }\n },\n _hideTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.hide();\n } else if (this._tooltip) {\n this._tooltip.hide(e);\n }\n },\n _onRender: function (e) {\n this._destroyCrosshairTooltips();\n this._copyMembers(e.sender);\n if (!this._hasDataSource || this._hasData || !this.options.autoBind) {\n this.trigger(RENDER);\n }\n },\n _copyMembers: function (instance) {\n this.options = instance.options;\n this._originalOptions = instance._originalOptions;\n this.surface = instance.surface;\n this._plotArea = instance._plotArea;\n this._model = instance._model;\n this._highlight = instance._highlight;\n this._selections = instance._selections;\n this._pannable = instance._pannable;\n this._zoomSelection = instance._zoomSelection;\n this._mousewheelZoom = instance._mousewheelZoom;\n },\n requiresHandlers: function (names) {\n var events = this._events;\n for (var idx = 0; idx < names.length; idx++) {\n if (defined(events[names[idx]])) {\n return true;\n }\n }\n },\n _initTooltip: function () {\n this._tooltip = this._createTooltip();\n this._tooltip.bind(LEAVE, proxy(this._tooltipleave, this));\n },\n _onLegendItemClick: function (e) {\n if (!this.trigger(LEGEND_ITEM_CLICK, e)) {\n this._legendItemClick(e.seriesIndex, e.pointIndex);\n }\n },\n _legendItemClick: function (seriesIndex, pointIndex) {\n var chart = this._instance, plotArea = chart._plotArea, currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n if ($.inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ]) >= 0) {\n var point = currentSeries.data[pointIndex];\n if (point && defined(point.visible)) {\n point.visible = !point.visible;\n } else {\n var pointVisibility = currentSeries.pointVisibility = currentSeries.pointVisibility || {};\n var visible = pointVisibility[pointIndex];\n pointVisibility[pointIndex] = defined(visible) ? !visible : false;\n }\n } else {\n currentSeries.visible = !currentSeries.visible;\n this._seriesVisibility.save(currentSeries);\n }\n chart._noTransitionsRedraw();\n },\n _createTooltip: function () {\n return new Tooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n _tooltipleave: function () {\n if (this._instance) {\n this._instance.hideElements();\n }\n },\n _bindData: function (e) {\n var chart = this, options = chart.options, series = chart._sourceSeries || options.series, seriesIx, seriesLength = series.length, data = chart.dataSource.view(), grouped = (chart.dataSource.group() || []).length > 0, processedSeries = [], seriesVisibility = this._seriesVisibility, currentSeries, groupedSeries;\n seriesVisibility.read();\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries) && grouped) {\n groupedSeries = groupSeries(currentSeries, data);\n processedSeries = processedSeries.concat(groupedSeries);\n seriesVisibility.applyByGroup(groupedSeries, e);\n } else {\n currentSeries = extend({}, currentSeries);\n processedSeries.push(currentSeries);\n seriesVisibility.applyByIndex(currentSeries, e);\n }\n }\n chart._sourceSeries = series;\n options.series = processedSeries;\n this._instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n this._hasData = true;\n },\n _onDataChanged: function (e) {\n this._bindData(e);\n this.trigger(DATABOUND);\n this._redraw();\n },\n _bindSeries: function () {\n var chart = this, data = chart.dataSource.view(), series = chart.options.series, seriesIx, seriesLength = series.length, currentSeries, groupIx, seriesData;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries)) {\n groupIx = currentSeries._groupIx;\n seriesData = defined(groupIx) ? (data[groupIx] || {}).items : data;\n if (currentSeries.autoBind !== false) {\n currentSeries.data = seriesData;\n }\n }\n }\n },\n _bindCategories: function () {\n var chart = this, data = chart.dataSource.view() || [], grouped = (chart.dataSource.group() || []).length > 0, categoriesData = data, options = chart.options, definitions = [].concat(options.categoryAxis), axisIx, axis;\n if (grouped) {\n if (data.length) {\n categoriesData = data[0].items;\n }\n }\n for (axisIx = 0; axisIx < definitions.length; axisIx++) {\n axis = definitions[axisIx];\n if (axis.autoBind !== false) {\n chart._bindCategoryAxis(axis, categoriesData, axisIx);\n }\n }\n },\n _bindCategoryAxis: function (axis, data, axisIx) {\n var count = (data || []).length, categoryIx, category, row;\n if (axis.field) {\n axis.categories = [];\n for (categoryIx = 0; categoryIx < count; categoryIx++) {\n row = data[categoryIx];\n category = getField(axis.field, row);\n if (categoryIx === 0) {\n axis.categories = [category];\n axis.dataItems = [row];\n } else {\n axis.categories.push(category);\n axis.dataItems.push(row);\n }\n }\n } else if (this._instance) {\n this._instance.bindCategoryAxisFromSeries(axis, axisIx);\n }\n },\n _isBindable: function (series) {\n var valueFields = SeriesBinder.current.valueFields(series), result = true, field, i;\n for (i = 0; i < valueFields.length; i++) {\n field = valueFields[i];\n if (field === VALUE) {\n field = 'field';\n } else {\n field = field + 'Field';\n }\n if (!defined(series[field])) {\n result = false;\n break;\n }\n }\n return result;\n },\n _isRtl: function () {\n return kendo.support.isRtl(this.element) && this.element.css('direction') === RTL;\n }\n });\n var proxyMembers = [\n 'getAxis',\n 'findAxisByName',\n 'plotArea',\n 'toggleHighlight',\n 'showTooltip',\n 'hideTooltip',\n 'exportVisual',\n '_resize',\n '_redraw',\n '_noTransitionsRedraw',\n '_legendItemHover',\n '_eventCoordinates'\n ];\n function createProxyMember(name) {\n Chart.fn[name] = function () {\n var instance = this._instance;\n if (instance) {\n return instance[name].apply(instance, arguments);\n }\n };\n }\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n function groupSeries(series, data) {\n var result = [], nameTemplate, legacyTemplate = series.groupNameTemplate, groupIx, dataLength = data.length, seriesClone;\n if (dataLength === 0) {\n seriesClone = deepExtend({}, series);\n seriesClone.visibleInLegend = false;\n return [seriesClone];\n }\n if (defined(legacyTemplate)) {\n kendo.logToConsole('\\'groupNameTemplate\\' is obsolete and will be removed in future versions. ' + 'Specify the group name template as \\'series.name\\'');\n if (legacyTemplate) {\n nameTemplate = template(legacyTemplate);\n }\n } else {\n nameTemplate = template(series.name || '');\n if (nameTemplate._slotCount === 0) {\n nameTemplate = template(defined(series.name) ? '#= group.value #: #= series.name #' : '#= group.value #');\n }\n }\n for (groupIx = 0; groupIx < dataLength; groupIx++) {\n seriesClone = deepExtend({}, series);\n if (!kendo.isFunction(seriesClone.color)) {\n seriesClone.color = undefined;\n }\n seriesClone._groupIx = groupIx;\n seriesClone._groupValue = data[groupIx].value;\n result.push(seriesClone);\n if (nameTemplate) {\n seriesClone.name = nameTemplate({\n series: seriesClone,\n group: data[groupIx]\n });\n }\n }\n return result;\n }\n dataviz.ExportMixin.extend(Chart.fn);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Chart.fn);\n }\n dataviz.ui.plugin(Chart);\n var SeriesVisibilityState = Class.extend({\n init: function () {\n this.groups = {};\n this.index = {};\n this.options = {};\n },\n applyByGroup: function (series, e) {\n if (e && e.action || this.options.persistSeriesVisibility) {\n for (var idx = 0; idx < series.length; idx++) {\n if (this.groups[series[idx]._groupValue] === false) {\n series[idx].visible = false;\n }\n }\n } else {\n this.groups = {};\n }\n },\n applyByIndex: function (series, e) {\n if (e && e.action || this.options.persistSeriesVisibility) {\n if (this.index[series.index] === false) {\n series.visible = false;\n }\n } else {\n this.index = {};\n }\n },\n save: function (series) {\n if (!series) {\n return;\n }\n if (this.options.persistSeriesVisibility) {\n this.options.series[series.index].visible = series.visible;\n } else {\n this.saveState(series);\n }\n },\n setOptions: function (options) {\n this.options = options;\n this.groups = {};\n this.index = {};\n },\n read: function () {\n var options = this.options;\n if (options.persistSeriesVisibility) {\n var series = options.series;\n for (var idx = 0; idx < series.length; idx++) {\n this.saveState(series[idx]);\n }\n }\n },\n saveState: function (series) {\n if (defined(series._groupValue)) {\n this.groups[series._groupValue] = series.visible;\n } else {\n this.index[series.index] = series.visible;\n }\n }\n });\n var geom = kendo.geometry;\n function normalizeStyle(style) {\n for (var field in style) {\n if (style[field] === undefined) {\n style[field] = '';\n }\n }\n return style;\n }\n var Tooltip = Observable.extend({\n init: function (chartElement, options) {\n var tooltip = this;\n Observable.fn.init.call(tooltip);\n this.setOptions(options);\n tooltip.chartElement = chartElement;\n tooltip.template = Tooltip.template;\n if (!tooltip.template) {\n tooltip.template = Tooltip.template = kendo.template('
    ' + '
    ', {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n tooltip.element = $(tooltip.template(tooltip.options));\n tooltip.move = proxy(tooltip.move, tooltip);\n tooltip._mouseleave = proxy(tooltip._mouseleave, tooltip);\n var mobileScrollerSelector = kendo.format('[{0}=\\'content\\'],[{0}=\\'scroller\\']', kendo.attr('role'));\n tooltip._mobileScroller = chartElement.closest(mobileScrollerSelector).data('kendoMobileScroller');\n },\n destroy: function () {\n this._clearShowTimeout();\n if (this.element) {\n this.element.off(MOUSELEAVE_NS).remove();\n this.element = null;\n }\n },\n setOptions: function (options) {\n this.options = deepExtend({}, this.options, options);\n },\n options: {\n opacity: 1,\n animation: { duration: TOOLTIP_ANIMATION_DURATION },\n sharedTemplate: '' + '' + '# for(var i = 0; i < points.length; i++) { #' + '# var point = points[i]; #' + '' + '# if(colorMarker) { # ' + '' + '# } #' + '# if(nameColumn) { # ' + '' + '# } #' + '' + '' + '# } #' + '
    #= categoryText #
    #if (point.series.name) {# #: point.series.name #: #} else {#   #}##= content(point) #
    ',\n categoryFormat: '{0:d}'\n },\n move: function () {\n var tooltip = this, options = tooltip.options, element = tooltip.element, offset;\n if (!tooltip.anchor || !tooltip.element) {\n return;\n }\n offset = tooltip._offset();\n if (!tooltip.visible) {\n element.css({\n top: offset.top,\n left: offset.left\n });\n }\n tooltip.visible = true;\n tooltip._ensureElement(document.body);\n element.stop(true, true).show().animate({\n left: offset.left,\n top: offset.top\n }, options.animation.duration);\n },\n _clearShowTimeout: function () {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n },\n getAnchor: function (size) {\n var anchor = this.anchor;\n var point = anchor.point;\n var align = anchor.align;\n var x = point.left;\n var y = point.top;\n if (align.horizontal === 'center') {\n x -= size.width / 2;\n } else if (align.horizontal === 'right') {\n x -= size.width;\n }\n if (align.vertical === 'center') {\n y -= size.height / 2;\n } else if (align.vertical === 'bottom') {\n y -= size.height;\n }\n return {\n x: x,\n y: y\n };\n },\n _offset: function () {\n var tooltip = this, size = tooltip._measure(), anchor = tooltip.getAnchor(size), top = anchor.y, left = anchor.x, zoomLevel = kendo.support.zoomLevel(), viewport = $(window), scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0, scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0, movable = (this._mobileScroller || {}).movable;\n if (!movable || movable.scale === 1) {\n top += tooltip._fit(top - scrollTop, size.height, outerHeight(viewport) / zoomLevel);\n left += tooltip._fit(left - scrollLeft, size.width, outerWidth(viewport) / zoomLevel);\n } else {\n var transform = geom.transform().scale(movable.scale, movable.scale, [\n movable.x,\n movable.y\n ]);\n var point = new geom.Point(left, top).transform(transform);\n left = point.x;\n top = point.y;\n }\n return {\n top: top,\n left: left\n };\n },\n show: function (e) {\n this.anchor = e.anchor;\n this.element.css(normalizeStyle(e.style));\n this.element.toggleClass(TOOLTIP_INVERSE, !!e.className);\n this.element.toggleClass(SHARED_TOOLTIP_CLASS, !!e.shared);\n var content = e.shared ? this._sharedContent(e) : this._pointContent(e.point);\n this.element.html(content);\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n hide: function () {\n var tooltip = this;\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n }\n },\n _sharedContent: function (e) {\n var points = e.points;\n var nameColumn = dataviz.grep(points, function (point) {\n return defined(point.series.name);\n }).length;\n var colorMarker = e.series.length > 1;\n var colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\n var template = kendo.template(this.options.sharedTemplate);\n var content = template({\n points: points,\n category: e.category,\n categoryText: e.categoryText,\n content: this._pointContent,\n colorMarker: colorMarker,\n nameColumn: nameColumn,\n colspan: colspan\n });\n return content;\n },\n _measure: function () {\n this._ensureElement();\n var size = {\n width: outerWidth(this.element),\n height: outerHeight(this.element)\n };\n return size;\n },\n _ensureElement: function () {\n if (this.element) {\n this.element.appendTo(document.body).on(MOUSELEAVE_NS, this._mouseleave);\n }\n },\n _mouseleave: function (e) {\n var target = e.relatedTarget;\n var chart = this.chartElement[0];\n if (target && target !== chart && !$.contains(chart, target)) {\n this.trigger(LEAVE);\n }\n },\n _hideElement: function () {\n var tooltip = this;\n var element = this.element;\n if (element) {\n element.fadeOut({\n always: function () {\n if (!tooltip.visible) {\n element.off(MOUSELEAVE_NS).remove();\n }\n }\n });\n }\n },\n _pointContent: function (point) {\n var tooltip = this, options = deepExtend({}, tooltip.options, point.options.tooltip), content, tooltipTemplate;\n if (defined(point.value)) {\n content = point.value.toString();\n }\n if (options.template) {\n tooltipTemplate = template(options.template);\n content = tooltipTemplate({\n value: point.value,\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n percentage: point.percentage,\n runningTotal: point.runningTotal,\n total: point.total,\n low: point.low,\n high: point.high,\n xLow: point.xLow,\n xHigh: point.xHigh,\n yLow: point.yLow,\n yHigh: point.yHigh\n });\n } else if (options.format) {\n content = point.formatValue(options.format);\n }\n return content;\n },\n _fit: function (offset, size, viewPortSize) {\n var output = 0;\n if (offset + size > viewPortSize) {\n output = viewPortSize - (offset + size);\n }\n if (offset < 0) {\n output = -offset;\n }\n return output;\n }\n });\n var CrosshairTooltip = Tooltip.extend({\n init: function (chartElement, options) {\n Tooltip.fn.init.call(this, chartElement, options);\n this.element.addClass('k-chart-crosshair-tooltip');\n },\n show: function (e) {\n var element = this.element;\n if (element) {\n this.anchor = e.anchor;\n this.element.css(e.style);\n this.element.html(this.content(e));\n this.move();\n }\n },\n move: function () {\n var tooltip = this, element = tooltip.element, offset = tooltip._offset();\n tooltip._ensureElement();\n element.css({\n top: offset.top,\n left: offset.left\n }).show();\n },\n content: function (e) {\n var content = e.value, options = e.crosshair.options.tooltip;\n if (options.template) {\n content = template(options.template)({ value: content });\n }\n return content;\n },\n hide: function () {\n this.element.hide();\n }\n });\n var ChartPane = Class.extend({\n init: function (chart, pane) {\n this._chart = chart;\n this._pane = pane;\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this.name = pane.options.name;\n },\n series: function () {\n var chart = this._chart;\n var seriesByPane = chart._plotArea.groupSeriesByPane();\n var series = seriesByPane[this.name || 'default'];\n var result = [];\n if (series) {\n for (var idx = 0; idx < series.length; idx++) {\n result.push(new ChartSeries(chart, series[idx]));\n }\n }\n return result;\n }\n });\n var ChartSeries = Class.extend({\n init: function (chart, options) {\n this._chart = chart;\n this._options = options;\n },\n points: function (filter) {\n var points = this._points;\n if (!points) {\n var series = this._seriesOptions();\n var plotArea = this._chart._plotArea;\n this._points = points = plotArea.pointsBySeriesIndex(series.index);\n }\n if (kendo.isFunction(filter)) {\n points = this._filterPoints(points, filter);\n }\n return points;\n },\n data: function (data) {\n var series = this._seriesOptions();\n if (data) {\n var chart = this._chart;\n var plotArea = chart._plotArea;\n series.data = data;\n if (series.categoryField) {\n var axis = plotArea.seriesCategoryAxis(series);\n var options = [].concat(chart.options.categoryAxis);\n chart._instance.bindCategoryAxisFromSeries(options[axis.axisIndex], axis.axisIndex);\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n }\n return series.data;\n },\n findPoint: function (filter) {\n var points = this.points();\n for (var idx = 0; idx < points.length; idx++) {\n if (filter(points[idx])) {\n return points[idx];\n }\n }\n },\n toggleHighlight: function (show, elements) {\n if (!elements) {\n elements = this.points();\n } else if (kendo.isFunction(elements)) {\n elements = this.points(elements);\n } else {\n elements = isArray(elements) ? elements : [elements];\n }\n this._chart._instance.togglePointsHighlight(show, elements);\n },\n toggleVisibility: function (visible, filter) {\n var chart = this._chart;\n var seriesOptions = this._seriesOptions();\n var hasFilter = kendo.isFunction(filter);\n if (!hasFilter) {\n seriesOptions.visible = visible;\n chart._seriesVisibility.save(seriesOptions);\n } else {\n if (inArray(seriesOptions.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\n var data = this._filterData(filter);\n for (var idx = 0; idx < data.length; idx++) {\n data[idx].visible = visible;\n }\n } else {\n seriesOptions.visible = function (data) {\n return filter(data.dataItem) ? visible : true;\n };\n }\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n },\n _filterData: function (filter) {\n var data = this._seriesOptions().data;\n var length = data.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (filter(data[idx])) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n _filterPoints: function (points, filter) {\n var result = [];\n var length = points.length;\n for (var idx = 0; idx < length; idx++) {\n if (filter(points[idx])) {\n result.push(points[idx]);\n }\n }\n return result;\n },\n _seriesOptions: function () {\n var series = this._series;\n if (!series) {\n series = this._series = this._chart._seriesOptions(this._options);\n }\n return series;\n },\n _clearFields: function () {\n delete this._points;\n delete this._series;\n }\n });\n dataviz.Tooltip = Tooltip;\n dataviz.CrosshairTooltip = CrosshairTooltip;\n dataviz.ChartInstanceObserver = ChartInstanceObserver;\n dataviz.ChartPane = ChartPane;\n dataviz.ChartSeries = ChartSeries;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.chart', [\n 'dataviz/chart/kendo-chart',\n 'dataviz/chart/chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.chart',\n name: 'Chart',\n category: 'dataviz',\n description: 'The Chart widget uses modern browser technologies to render high-quality data visualizations in the browser.',\n depends: [\n 'data',\n 'userevents',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes'\n ],\n features: [{\n id: 'dataviz.chart-pdf-export',\n name: 'PDF export',\n description: 'Export Chart as PDF',\n depends: ['pdf']\n }]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.gauge', [\n 'kendo.dataviz.core',\n 'kendo.drawing',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.gauge',\n name: 'Gauge',\n category: 'dataviz',\n description: 'Radial and Linear gauges.',\n depends: [\n 'dataviz.core',\n 'dataviz.themes'\n ]\n };\n (function ($, undefined) {\n var math = Math, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, autoMajorUnit = dataviz.autoMajorUnit, ChartElement = dataviz.ChartElement, NumericAxis = dataviz.NumericAxis, Axis = dataviz.Axis, Box2D = dataviz.Box2D, Class = kendo.Class, defined = dataviz.defined, isNumber = dataviz.isNumber, interpolateValue = dataviz.interpolateValue, getSpacing = dataviz.getSpacing, round = dataviz.round, geo = dataviz.geometry, draw = dataviz.drawing, Point = geo.Point, Group = draw.Group, Path = draw.Path, Rect = geo.Rect, Text = draw.Text;\n var ANGULAR_SPEED = 150, LINEAR_SPEED = 250, ARROW = 'arrow', ARROW_POINTER = 'arrowPointer', BAR_POINTER = 'barPointer', BLACK = '#000', CAP_SIZE = 0.05, COORD_PRECISION = dataviz.COORD_PRECISION, MAX_VALUE = Number.MAX_VALUE, MIN_VALUE = -Number.MAX_VALUE, DEFAULT_HEIGHT = 200, DEFAULT_LINE_WIDTH = 0.5, DEFAULT_WIDTH = 200, DEFAULT_MIN_WIDTH = 60, DEFAULT_MIN_HEIGHT = 60, DEFAULT_MARGIN = 5, DEGREE = math.PI / 180, GEO_ARC_ADJUST_ANGLE = 180, INSIDE = 'inside', LINEAR = 'linear', NEEDLE = 'needle', OUTSIDE = 'outside', RADIAL_POINTER = 'radialPointer', X = 'x', Y = 'y';\n var Pointer = Class.extend({\n init: function (scale, options) {\n var pointer = this;\n var scaleOptions = scale.options;\n ChartElement.fn.init.call(pointer, options);\n options = pointer.options;\n options.fill = options.color;\n pointer.scale = scale;\n if (defined(options.value)) {\n options.value = math.min(math.max(options.value, scaleOptions.min), scaleOptions.max);\n } else {\n options.value = scaleOptions.min;\n }\n },\n options: { color: BLACK },\n value: function (newValue) {\n var that = this;\n var options = that.options;\n var value = options.value;\n var scaleOptions = that.scale.options;\n if (arguments.length === 0) {\n return value;\n }\n options._oldValue = options._oldValue !== undefined ? options.value : scaleOptions.min;\n options.value = math.min(math.max(newValue, scaleOptions.min), scaleOptions.max);\n if (that.elements) {\n that.repaint();\n }\n }\n });\n var RadialPointer = Pointer.extend({\n options: {\n shape: NEEDLE,\n cap: { size: CAP_SIZE },\n arrow: {\n width: 16,\n height: 14\n },\n animation: {\n type: RADIAL_POINTER,\n duration: ANGULAR_SPEED\n }\n },\n setRadius: function (radius) {\n var that = this;\n if (radius) {\n that.elements.clear();\n that.render(that.parent, that.center, radius);\n }\n },\n setAngle: function (angle) {\n this.elements.transform(geo.transform().rotate(angle, this.center));\n },\n repaint: function () {\n var that = this;\n var scale = that.scale;\n var options = that.options;\n var oldAngle = scale.slotAngle(options._oldValue);\n var newAngle = scale.slotAngle(options.value);\n if (options.animation.transitions === false) {\n that.setAngle(newAngle);\n } else {\n new RadialPointerAnimation(that.elements, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n })).play();\n }\n },\n render: function () {\n var that = this;\n var scale = that.scale;\n var center = scale.arc.center;\n var options = that.options;\n var elements = new Group();\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: center,\n reverse: scale.options.reverse\n });\n }\n if (options.shape === NEEDLE) {\n elements.append(that._renderNeedle(), that._renderCap());\n } else {\n elements.append(that._renderArrow());\n }\n that.elements = elements;\n that.setAngle(DEGREE);\n return elements;\n },\n reflow: function (arc) {\n var that = this;\n var center = that.center = arc.center;\n var radius = that.radius = arc.getRadiusX();\n var capSize = that.capSize = Math.round(radius * that.options.cap.size);\n that.bbox = Rect.fromPoints(new Point(center.x - capSize, center.y - capSize), new Point(center.x + capSize, center.y + capSize));\n },\n _renderNeedle: function () {\n var that = this;\n var options = that.options;\n var minorTickSize = that.scale.options.minorTicks.size;\n var center = that.center;\n var needleColor = options.color;\n var needlePath = new Path({\n fill: { color: needleColor },\n stroke: {\n color: needleColor,\n width: DEFAULT_LINE_WIDTH\n }\n });\n needlePath.moveTo(center.x + that.radius - minorTickSize, center.y).lineTo(center.x, center.y - that.capSize / 2).lineTo(center.x, center.y + that.capSize / 2).close();\n return needlePath;\n },\n _renderCap: function () {\n var that = this;\n var options = that.options;\n var capColor = options.cap.color || options.color;\n var circle = new geo.Circle(that.center, that.capSize);\n var cap = new draw.Circle(circle, {\n fill: { color: capColor },\n stroke: { color: capColor }\n });\n return cap;\n }\n });\n var RadialScale = NumericAxis.extend({\n init: function (options) {\n var scale = this;\n scale.options = deepExtend({}, scale.options, options);\n scale.options.majorUnit = scale.options.majorUnit || autoMajorUnit(scale.options.min, scale.options.max);\n scale.options.minorUnit = scale.options.minorUnit || scale.options.majorUnit / 10;\n Axis.fn.init.call(scale, scale.options);\n },\n options: {\n min: 0,\n max: 100,\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n startAngle: -30,\n endAngle: 210,\n labels: {\n position: INSIDE,\n padding: 2\n }\n },\n render: function (center, radius) {\n var that = this;\n var arc = that.renderArc(center, radius);\n that.bbox = arc.bbox();\n that.labelElements = that.renderLabels();\n that.ticks = that.renderTicks();\n that.ranges = that.renderRanges();\n },\n reflow: function (bbox) {\n var that = this;\n var center = bbox.center();\n var radius = math.min(bbox.height(), bbox.width()) / 2;\n if (that.bbox !== undefined) {\n that.bbox = that.arc.bbox();\n that.radius(that.arc.getRadiusX());\n that.repositionRanges();\n that.renderLabels();\n } else {\n return that.render(center, radius);\n }\n },\n slotAngle: function (value) {\n var options = this.options;\n var startAngle = options.startAngle;\n var reverse = options.reverse;\n var angle = options.endAngle - startAngle;\n var min = options.min;\n var max = options.max;\n var result;\n if (reverse) {\n result = options.endAngle - (value - min) / (max - min) * angle;\n } else {\n result = (value - min) / (max - min) * angle + startAngle;\n }\n return result + GEO_ARC_ADJUST_ANGLE;\n },\n renderLabels: function () {\n var that = this;\n var options = that.options;\n var majorTickSize = options.majorTicks.size;\n var arc = that.arc.clone();\n var radius = arc.getRadiusX();\n var tickAngles = that.tickAngles(arc, options.majorUnit);\n var labels = that.labels;\n var count = labels.length;\n var labelsOptions = options.labels;\n var padding = labelsOptions.padding;\n var rangeDistance = radius * 0.05;\n var rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n var ranges = options.ranges || [];\n var halfWidth, halfHeight, labelAngle;\n var angle, label, lp, i, cx, cy, isInside;\n var labelsGroup = new Group();\n var lbl, labelPos, prevLabelPos, labelTransform;\n if (that.options.rangeDistance !== undefined) {\n rangeDistance = that.options.rangeDistance;\n } else {\n that.options.rangeDistance = rangeDistance;\n }\n if (labelsOptions.position === INSIDE) {\n radius -= majorTickSize;\n if (ranges.length && that.labelElements === undefined) {\n radius -= rangeSize + rangeDistance;\n }\n arc.setRadiusX(radius).setRadiusY(radius);\n }\n for (i = 0; i < count; i++) {\n label = labels[i];\n halfWidth = label.box.width() / 2;\n halfHeight = label.box.height() / 2;\n angle = tickAngles[i];\n labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n isInside = labelsOptions.position === INSIDE;\n lp = arc.pointAt(angle);\n cx = lp.x + math.cos(labelAngle) * (halfWidth + padding) * (isInside ? 1 : -1);\n cy = lp.y + math.sin(labelAngle) * (halfHeight + padding) * (isInside ? 1 : -1);\n label.reflow(new dataviz.Box2D(cx - halfWidth, cy - halfHeight, cx + halfWidth, cy + halfHeight));\n labelPos = new Point(label.box.x1, label.box.y1);\n if (that.labelElements === undefined) {\n lbl = _buildLabel(label, options.labels);\n labelsGroup.append(lbl);\n } else {\n lbl = that.labelElements.children[i];\n prevLabelPos = lbl.bbox().origin;\n labelTransform = lbl.transform() || geo.transform();\n labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n lbl.transform(labelTransform);\n }\n that.bbox = Rect.union(that.bbox, lbl.bbox());\n }\n return labelsGroup;\n },\n repositionRanges: function () {\n var that = this;\n var ranges = that.ranges.children;\n var rangeSize = that.options.rangeSize;\n var rangeDistance = that.options.rangeDistance;\n var rangeRadius, newRadius;\n if (ranges.length > 0) {\n rangeRadius = that.getRangeRadius();\n if (that.options.labels.position === INSIDE) {\n rangeRadius += rangeSize + rangeDistance;\n }\n newRadius = rangeRadius + rangeSize / 2;\n for (var i = 0; i < ranges.length; i++) {\n ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n }\n that.bbox = Rect.union(that.bbox, that.ranges.bbox());\n }\n },\n renderRanges: function () {\n var that = this;\n var arc = that.arc;\n var result = new Group();\n var from, to;\n var segments = that.rangeSegments();\n var segmentsCount = segments.length;\n var reverse = that.options.reverse;\n var rangeSize = that.options.rangeSize;\n var rangeDistance = that.options.rangeDistance;\n var segment, rangeRadius, rangeGeom, i;\n if (segmentsCount) {\n rangeRadius = that.getRangeRadius();\n that.radius(that.radius() - rangeSize - rangeDistance);\n for (i = 0; i < segmentsCount; i++) {\n segment = segments[i];\n from = that.slotAngle(segment[reverse ? 'to' : 'from']);\n to = that.slotAngle(segment[!reverse ? 'to' : 'from']);\n if (to - from !== 0) {\n rangeGeom = new geo.Arc(arc.center, {\n radiusX: rangeRadius + rangeSize / 2,\n radiusY: rangeRadius + rangeSize / 2,\n startAngle: from,\n endAngle: to\n });\n result.append(new draw.Arc(rangeGeom, {\n stroke: {\n width: rangeSize,\n color: segment.color,\n opacity: segment.opacity\n }\n }));\n }\n }\n }\n return result;\n },\n rangeSegments: function () {\n var gauge = this;\n var options = gauge.options;\n var ranges = options.ranges || [];\n var count = ranges.length;\n var range;\n var segmentsCount;\n var defaultColor = options.rangePlaceholderColor;\n var segments = [];\n var segment;\n var min = options.min;\n var max = options.max;\n var i, j;\n function rangeSegment(from, to, color, opacity) {\n return {\n from: from,\n to: to,\n color: color,\n opacity: opacity\n };\n }\n if (count) {\n segments.push(rangeSegment(min, max, defaultColor));\n for (i = 0; i < count; i++) {\n range = getRange(ranges[i], min, max);\n segmentsCount = segments.length;\n for (j = 0; j < segmentsCount; j++) {\n segment = segments[j];\n if (segment.from <= range.from && range.from <= segment.to) {\n segments.push(rangeSegment(range.from, range.to, range.color, range.opacity));\n if (segment.from <= range.to && range.to <= segment.to) {\n segments.push(rangeSegment(range.to, segment.to, defaultColor, range.opacity));\n }\n segment.to = range.from;\n break;\n }\n }\n }\n }\n return segments;\n },\n getRangeRadius: function () {\n var that = this;\n var options = that.options;\n var majorTickSize = options.majorTicks.size;\n var rangeSize = options.rangeSize;\n var rangeDistance = options.rangeDistance;\n var arc = that.arc;\n var r;\n if (options.labels.position === OUTSIDE) {\n r = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n } else {\n r = arc.getRadiusX() - rangeSize;\n }\n return r;\n },\n renderArc: function (center, radius) {\n var that = this;\n var options = that.options;\n var arc = that.arc = new geo.Arc(center, {\n radiusX: radius,\n radiusY: radius,\n startAngle: options.startAngle + GEO_ARC_ADJUST_ANGLE,\n endAngle: options.endAngle + GEO_ARC_ADJUST_ANGLE\n });\n return arc;\n },\n renderTicks: function () {\n var that = this;\n var arc = that.arc;\n var options = that.options;\n var labelsPosition = options.labels.position;\n var allTicks = new Group();\n var majorTickSize = options.majorTicks.size;\n var minorTickSize = options.minorTicks.size;\n var tickArc = arc.clone();\n var radius = tickArc.getRadiusX();\n function drawTicks(arc, tickAngles, unit, tickOptions) {\n var ticks = new Group(), center = arc.center, radius = arc.getRadiusX(), i, tickStart, tickEnd, visible = tickOptions.visible;\n if (visible) {\n for (i = 0; i < tickAngles.length; i++) {\n tickStart = arc.pointAt(tickAngles[i]);\n tickEnd = new Point(center.x + radius - tickOptions.size, center.y).rotate(tickAngles[i], center);\n ticks.append(new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(tickStart).lineTo(tickEnd));\n }\n }\n return ticks;\n }\n that.majorTickAngles = that.tickAngles(arc, options.majorUnit);\n that.majorTicks = drawTicks(tickArc, that.majorTickAngles, options.majorUnit, options.majorTicks);\n allTicks.append(that.majorTicks);\n that._tickDifference = majorTickSize - minorTickSize;\n if (labelsPosition === OUTSIDE) {\n tickArc.setRadiusX(radius - majorTickSize + minorTickSize).setRadiusY(radius - majorTickSize + minorTickSize);\n }\n that.minorTickAngles = that.normalizeTickAngles(that.tickAngles(arc, options.minorUnit));\n that.minorTicks = drawTicks(tickArc, that.minorTickAngles, options.minorUnit, options.minorTicks, options.majorUnit);\n allTicks.append(that.minorTicks);\n return allTicks;\n },\n normalizeTickAngles: function (angles) {\n var that = this;\n var options = that.options;\n var skip = options.majorUnit / options.minorUnit;\n for (var i = angles.length - 1; i >= 0; i--) {\n if (i % skip === 0) {\n angles.splice(i, 1);\n }\n }\n return angles;\n },\n tickAngles: function (ring, stepValue) {\n var scale = this;\n var options = scale.options;\n var reverse = options.reverse;\n var range = options.max - options.min;\n var angle = ring.endAngle - ring.startAngle;\n var pos = ring.startAngle;\n var tickCount = range / stepValue;\n var step = angle / tickCount;\n var positions = [];\n var i;\n if (reverse) {\n pos += angle;\n step = -step;\n }\n for (i = 0; i < tickCount; i++) {\n positions.push(round(pos, COORD_PRECISION));\n pos += step;\n }\n if (round(pos) <= ring.endAngle) {\n positions.push(pos);\n }\n return positions;\n },\n radius: function (radius) {\n var that = this;\n if (radius) {\n that.arc.setRadiusX(radius).setRadiusY(radius);\n that.repositionTicks(that.majorTicks.children, that.majorTickAngles);\n that.repositionTicks(that.minorTicks.children, that.minorTickAngles, true);\n } else {\n return that.arc.getRadiusX();\n }\n },\n repositionTicks: function (ticks, tickAngles, minor) {\n var that = this;\n var diff = minor ? that._tickDifference || 0 : 0;\n var tickArc = that.arc;\n var radius = tickArc.getRadiusX();\n if (minor && that.options.labels.position === OUTSIDE && diff !== 0) {\n tickArc = that.arc.clone();\n tickArc.setRadiusX(radius - diff).setRadiusY(radius - diff);\n }\n for (var i = 0; i < ticks.length; i++) {\n var newPoint = tickArc.pointAt(tickAngles[i]);\n var segments = ticks[i].segments;\n var xDiff = newPoint.x - segments[0].anchor().x;\n var yDiff = newPoint.y - segments[0].anchor().y;\n ticks[i].transform(new geo.Transformation().translate(xDiff, yDiff));\n }\n }\n });\n var Gauge = Widget.extend({\n init: function (element, userOptions) {\n var gauge = this;\n var options;\n var themeOptions;\n var themeName;\n var themes = dataviz.ui.themes || {};\n var theme;\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(gauge, element);\n gauge.wrapper = gauge.element;\n gauge._originalOptions = deepExtend({}, userOptions);\n options = deepExtend({}, gauge.options, userOptions);\n themeName = options.theme;\n theme = themes[themeName] || themes[themeName.toLowerCase()];\n themeOptions = themeName && theme ? theme.gauge : {};\n gauge.options = deepExtend({}, themeOptions, options);\n if ($.isArray(options.pointer)) {\n for (var i = 0; i < options.pointer.length; i++) {\n gauge.options.pointer[i] = deepExtend({}, themeOptions.pointer, options.pointer[i]);\n }\n }\n gauge.element.addClass('k-gauge');\n gauge.surface = gauge._createSurface();\n gauge.redraw();\n },\n options: {\n plotArea: {},\n theme: 'default',\n renderAs: '',\n pointer: {},\n scale: {},\n gaugeArea: {}\n },\n destroy: function () {\n this.surface.destroy();\n Widget.fn.destroy.call(this);\n },\n value: function (value) {\n var that = this;\n var pointer = that.pointers[0];\n if (arguments.length === 0) {\n return pointer.value();\n }\n pointer.value(value);\n that._setValueOptions(value);\n },\n _draw: function () {\n var surface = this.surface;\n surface.clear();\n surface.draw(this._visuals);\n },\n exportVisual: function () {\n return this._visuals;\n },\n allValues: function (values) {\n var that = this;\n var pointers = that.pointers;\n var allValues = [];\n var i;\n if (arguments.length === 0) {\n for (i = 0; i < pointers.length; i++) {\n allValues.push(pointers[i].value());\n }\n return allValues;\n }\n if ($.isArray(values)) {\n for (i = 0; i < values.length; i++) {\n if (isNumber(values[i])) {\n pointers[i].value(values[i]);\n }\n }\n }\n that._setValueOptions(values);\n },\n _setValueOptions: function (values) {\n var pointers = [].concat(this.options.pointer);\n values = [].concat(values);\n for (var i = 0; i < values.length; i++) {\n pointers[i].value = values[i];\n }\n },\n _resize: function () {\n var that = this;\n var t = that.options.transitions;\n var i;\n that.options.transitions = false;\n for (i = 0; i < that.pointers.length; i++) {\n that.pointers[i].options.animation.transitions = false;\n }\n that.redraw();\n that.options.transitions = t;\n for (i = 0; i < that.pointers.length; i++) {\n that.pointers[i].options.animation.transitions = t;\n }\n },\n redraw: function () {\n var that = this;\n var size = deepExtend(that._getSize(), that.options.gaugeArea);\n var wrapper = new Rect([\n 0,\n 0\n ], [\n size.width,\n size.height\n ]);\n var bbox;\n that.surface.clear();\n that.gaugeArea = that._createGaugeArea();\n that.surface.element.css({\n width: size.width,\n height: size.height\n });\n that._createModel();\n bbox = _unpad(wrapper.bbox(), that._gaugeAreaMargin);\n that.reflow(bbox);\n },\n _createGaugeArea: function () {\n var that = this;\n var options = that.options.gaugeArea;\n var size = that.surface.size();\n var border = options.border || {};\n var areaGeometry = new Rect([\n 0,\n 0\n ], [\n size.width,\n size.height\n ]);\n that._gaugeAreaMargin = options.margin || DEFAULT_MARGIN;\n if (border.width > 0) {\n areaGeometry = _unpad(areaGeometry, border.width);\n }\n var gaugeArea = Path.fromRect(areaGeometry, {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType,\n lineJoin: 'round',\n lineCap: 'round'\n },\n fill: { color: options.background }\n });\n return gaugeArea;\n },\n _createSurface: function () {\n var that = this;\n var options = that.options;\n var size = that._getSize();\n size = options.gaugeArea ? deepExtend(size, options.gaugeArea) : size;\n var wrap = $('
    ').appendTo(that.element).css({\n width: size.width,\n height: size.height\n });\n return new draw.Surface.create(wrap, { type: options.renderAs });\n },\n getSize: function () {\n return this._getSize();\n },\n _getSize: function () {\n var that = this;\n var element = that.element;\n var width = element.width();\n var height = element.height();\n if (!width) {\n width = DEFAULT_WIDTH;\n }\n if (!height) {\n height = DEFAULT_HEIGHT;\n }\n return {\n width: width,\n height: height\n };\n }\n });\n var RadialGauge = Gauge.extend({\n init: function (element, options) {\n var radialGauge = this;\n Gauge.fn.init.call(radialGauge, element, options);\n kendo.notify(radialGauge, dataviz.ui);\n },\n options: {\n name: 'RadialGauge',\n transitions: true,\n gaugeArea: { background: '' }\n },\n reflow: function (bbox) {\n var that = this;\n var pointers = that.pointers;\n that.scale.reflow(bbox);\n that._initialPlotArea = that.scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(that.scale.arc);\n that._initialPlotArea = Rect.union(that._initialPlotArea, pointers[i].bbox);\n }\n that.fitScale(bbox);\n that.alignScale(bbox);\n that._buildVisual(that.gaugeArea, pointers, that.scale);\n that._draw();\n },\n _buildVisual: function (gaugeArea, pointers, scale) {\n var visuals = new Group();\n var current;\n visuals.append(gaugeArea);\n visuals.append(scale.ticks);\n visuals.append(scale.ranges);\n for (var i = 0; i < pointers.length; i++) {\n current = pointers[i];\n current.render();\n visuals.append(current.elements);\n current.value(current.options.value);\n }\n visuals.append(scale.labelElements);\n this._visuals = visuals;\n },\n fitScale: function (bbox) {\n var that = this;\n var scale = that.scale;\n var arc = scale.arc;\n var plotAreaBox = that._initialPlotArea;\n var step = math.abs(that.getDiff(plotAreaBox, bbox));\n var min = round(step, COORD_PRECISION);\n var max = round(-step, COORD_PRECISION);\n var minDiff, midDiff, maxDiff, mid, oldDiff;\n var staleFlag = 0;\n var i = 0;\n while (i++ < 100) {\n staleFlag = oldDiff === maxDiff ? staleFlag + 1 : 0;\n if (staleFlag > 5) {\n break;\n }\n if (min != mid) {\n minDiff = that.getPlotBox(min, bbox, arc);\n if (0 <= minDiff && minDiff <= 2) {\n break;\n }\n }\n if (max != mid) {\n maxDiff = that.getPlotBox(max, bbox, arc);\n if (0 <= maxDiff && maxDiff <= 2) {\n break;\n }\n }\n if (minDiff > 0 && maxDiff > 0) {\n mid = min * 2;\n } else if (minDiff < 0 && maxDiff < 0) {\n mid = max * 2;\n } else {\n mid = round((min + max) / 2 || 1, COORD_PRECISION);\n }\n midDiff = that.getPlotBox(mid, bbox, arc);\n if (0 <= midDiff && midDiff <= 2) {\n break;\n }\n oldDiff = maxDiff;\n if (midDiff > 0) {\n max = mid;\n maxDiff = midDiff;\n } else {\n min = mid;\n minDiff = midDiff;\n }\n }\n },\n getPlotBox: function (step, bbox, arc) {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var radius = arc.getRadiusX();\n arc = arc.clone();\n arc.setRadiusX(radius + step).setRadiusY(radius + step);\n scale.arc = arc;\n scale.reflow(bbox);\n that.plotBbox = scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(arc);\n that.plotBbox = Rect.union(that.plotBbox, pointers[i].bbox);\n }\n return that.getDiff(that.plotBbox, bbox);\n },\n getDiff: function (plotBox, box) {\n return math.min(box.width() - plotBox.width(), box.height() - plotBox.height());\n },\n alignScale: function (bbox) {\n var that = this;\n var plotBoxCenter = that.plotBbox.center();\n var boxCenter = bbox.center();\n var paddingX = plotBoxCenter.x - boxCenter.x;\n var paddingY = plotBoxCenter.y - boxCenter.y;\n var scale = that.scale;\n var pointers = that.pointers;\n scale.arc.center.x -= paddingX;\n scale.arc.center.y -= paddingY;\n scale.reflow(bbox);\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scale.arc);\n that.plotBbox = Rect.union(scale.bbox, pointers[i].bbox);\n }\n },\n _createModel: function () {\n var that = this;\n var options = that.options;\n var pointers = options.pointer;\n var scale = that.scale = new RadialScale(options.scale);\n var current;\n that.pointers = [];\n pointers = $.isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointers.length; i++) {\n current = new RadialPointer(scale, deepExtend({}, pointers[i], { animation: { transitions: options.transitions } }));\n that.pointers.push(current);\n }\n }\n });\n var LinearGauge = Gauge.extend({\n init: function (element, options) {\n var linearGauge = this;\n Gauge.fn.init.call(linearGauge, element, options);\n kendo.notify(linearGauge, dataviz.ui);\n },\n options: {\n name: 'LinearGauge',\n transitions: true,\n gaugeArea: { background: '' },\n scale: { vertical: true }\n },\n reflow: function (bbox) {\n var that = this;\n var pointers = that.pointers;\n var bboxX = bbox.origin.x;\n var bboxY = bbox.origin.y;\n var bbox2D = new dataviz.Box2D(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n that.scale.reflow(bbox2D);\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow();\n }\n that.bbox = that._getBox(bbox2D);\n that._alignElements();\n that._shrinkElements();\n that._buildVisual();\n that._draw();\n },\n _buildVisual: function () {\n var that = this;\n var visuals = new Group();\n var scaleElements = that.scale.render();\n var pointers = that.pointers;\n var current;\n visuals.append(that.gaugeArea);\n visuals.append(scaleElements);\n for (var i = 0; i < pointers.length; i++) {\n current = pointers[i];\n visuals.append(current.render());\n current.value(current.options.value);\n }\n that._visuals = visuals;\n },\n _createModel: function () {\n var that = this;\n var options = that.options;\n var pointers = options.pointer;\n var scale = that.scale = new LinearScale(options.scale);\n var current, currentOptions;\n that.pointers = [];\n pointers = $.isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointers.length; i++) {\n currentOptions = deepExtend({}, pointers[i], { animation: { transitions: options.transitions } });\n if (currentOptions.shape === ARROW) {\n current = new ArrowLinearPointer(scale, currentOptions);\n } else {\n current = new BarLinearPointer(scale, currentOptions);\n }\n that.pointers.push(current);\n }\n },\n _getSize: function () {\n var gauge = this;\n var element = gauge.element;\n var width = element.width();\n var height = element.height();\n var vertical = gauge.options.scale.vertical;\n if (!width) {\n width = vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH;\n }\n if (!height) {\n height = vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT;\n }\n return {\n width: width,\n height: height\n };\n },\n _getBox: function (box) {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var boxCenter = box.center();\n var plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n var size;\n for (var i = 0; i < pointers.length; i++) {\n plotAreaBox.wrap(pointers[i].box.clone());\n }\n if (scale.options.vertical) {\n size = plotAreaBox.width() / 2;\n plotAreaBox = new Box2D(boxCenter.x - size, box.y1, boxCenter.x + size, box.y2);\n } else {\n size = plotAreaBox.height() / 2;\n plotAreaBox = new Box2D(box.x1, boxCenter.y - size, box.x2, boxCenter.y + size);\n }\n return plotAreaBox;\n },\n _alignElements: function () {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var scaleBox = scale.box;\n var box = pointers[0].box.clone().wrap(scale.box);\n var plotAreaBox = that.bbox;\n var diff, i;\n for (i = 0; i < pointers.length; i++) {\n box.wrap(pointers[i].box.clone());\n }\n if (scale.options.vertical) {\n diff = plotAreaBox.center().x - box.center().x;\n scale.reflow(new Box2D(scaleBox.x1 + diff, plotAreaBox.y1, scaleBox.x2 + diff, plotAreaBox.y2));\n } else {\n diff = plotAreaBox.center().y - box.center().y;\n scale.reflow(new Box2D(plotAreaBox.x1, scaleBox.y1 + diff, plotAreaBox.x2, scaleBox.y2 + diff));\n }\n for (i = 0; i < pointers.length; i++) {\n pointers[i].reflow(that.bbox);\n }\n },\n _shrinkElements: function () {\n var that = this;\n var scale = that.scale;\n var pointers = that.pointers;\n var scaleBox = scale.box.clone();\n var pos = scale.options.vertical ? 'y' : 'x';\n var pointerBox = pointers[0].box;\n var i;\n for (i = 0; i < pointers.length; i++) {\n pointerBox.wrap(pointers[i].box.clone());\n }\n scaleBox[pos + 1] += math.max(scaleBox[pos + 1] - pointerBox[pos + 1], 0);\n scaleBox[pos + 2] -= math.max(pointerBox[pos + 2] - scaleBox[pos + 2], 0);\n scale.reflow(scaleBox);\n for (i = 0; i < pointers.length; i++) {\n pointers[i].reflow(that.bbox);\n }\n }\n });\n var LinearScale = NumericAxis.extend({\n init: function (options) {\n var scale = this;\n scale.options = deepExtend({}, scale.options, options);\n scale.options = deepExtend({}, scale.options, { labels: { mirror: scale.options.mirror } });\n scale.options.majorUnit = scale.options.majorUnit || autoMajorUnit(scale.options.min, scale.options.max);\n Axis.fn.init.call(scale, scale.options);\n scale.options.minorUnit = scale.options.minorUnit || scale.options.majorUnit / 10;\n },\n options: {\n min: 0,\n max: 50,\n majorTicks: {\n size: 15,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n minorTicks: {\n size: 10,\n align: INSIDE,\n color: BLACK,\n width: DEFAULT_LINE_WIDTH,\n visible: true\n },\n line: { width: DEFAULT_LINE_WIDTH },\n labels: {\n position: INSIDE,\n padding: 2\n },\n mirror: false,\n _alignLines: false\n },\n render: function () {\n var that = this;\n var elements = that.elements = new Group();\n var labels = that.renderLabels();\n var scaleLine = that.renderLine();\n var scaleTicks = that.renderTicks();\n var ranges = that.renderRanges();\n elements.append(scaleLine, labels, scaleTicks, ranges);\n return elements;\n },\n renderRanges: function () {\n var that = this;\n var options = that.options;\n var min = options.min;\n var max = options.max;\n var ranges = options.ranges || [];\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var elements = new Group();\n var count = ranges.length;\n var rangeSize = options.rangeSize || options.minorTicks.size / 2;\n var range, slot, slotX, slotY, i;\n if (count) {\n for (i = 0; i < count; i++) {\n range = getRange(ranges[i], min, max);\n slot = that.getSlot(range.from, range.to);\n slotX = vertical ? that.lineBox() : slot;\n slotY = vertical ? slot : that.lineBox();\n if (vertical) {\n slotX.x1 -= rangeSize * (mirror ? -1 : 1);\n } else {\n slotY.y2 += rangeSize * (mirror ? -1 : 1);\n }\n elements.append(Path.fromRect(new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.x2 - slotX.x1,\n slotY.y2 - slotY.y1\n ]), {\n fill: {\n color: range.color,\n opacity: range.opacity\n },\n stroke: {}\n }));\n }\n }\n return elements;\n },\n renderLabels: function () {\n var that = this;\n var options = that.options;\n var labels = that.labels;\n var elements = new Group();\n for (var i = 0; i < labels.length; i++) {\n elements.append(_buildLabel(labels[i], options.labels));\n }\n return elements;\n },\n renderLine: function () {\n var that = this;\n var options = that.options;\n var line = options.line;\n var lineBox = that.lineBox();\n var linePath;\n var elements = new Group();\n if (line.width > 0 && line.visible) {\n linePath = new Path({\n stroke: {\n color: line.color,\n dashType: line.dashType,\n width: line.width\n }\n });\n linePath.moveTo(lineBox.x1, lineBox.y1).lineTo(lineBox.x2, lineBox.y2);\n elements.append(linePath);\n }\n return elements;\n },\n renderTicks: function () {\n var that = this;\n var ticks = new Group();\n var options = that.options;\n var lineBox = that.lineBox();\n var mirror = options.labels.mirror;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickLineOptions = {\n _alignLines: options._alignLines,\n vertical: options.vertical\n };\n function render(tickPositions, tickOptions) {\n var i, count = tickPositions.length;\n if (tickOptions.visible) {\n for (i = tickOptions.skip; i < count; i += tickOptions.step) {\n if (i % tickOptions.skipUnit === 0) {\n continue;\n }\n tickLineOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickLineOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickLineOptions.position = tickPositions[i];\n ticks.append(that.renderAxisTick(tickLineOptions, tickOptions));\n }\n }\n }\n render(that.getMajorTickPositions(), options.majorTicks);\n render(that.getMinorTickPositions(), deepExtend({}, { skipUnit: majorUnit / options.minorUnit }, options.minorTicks));\n return ticks;\n },\n renderAxisTick: function (options, tickOptions) {\n var tickX = options.tickX;\n var tickY = options.tickY;\n var position = options.position;\n var start, end, tickPath;\n if (options.vertical) {\n start = new Point(tickX, position);\n end = new Point(tickX + tickOptions.size, position);\n } else {\n start = new Point(position, tickY);\n end = new Point(position, tickY + tickOptions.size);\n }\n tickPath = new Path({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(start).lineTo(end);\n return tickPath;\n }\n });\n var LinearPointer = Pointer.extend({\n init: function (scale, options) {\n var pointer = this;\n Pointer.fn.init.call(pointer, scale, options);\n pointer.options = deepExtend({ track: { visible: defined(options.track) } }, pointer.options);\n },\n options: {\n shape: BAR_POINTER,\n track: { border: { width: 1 } },\n color: BLACK,\n border: { width: 1 },\n opacity: 1,\n margin: getSpacing(3),\n animation: { type: BAR_POINTER },\n visible: true\n },\n reflow: function () {\n var pointer = this;\n var options = pointer.options;\n var scale = pointer.scale;\n var scaleLine = scale.lineBox();\n var trackSize = options.track.size || options.size;\n var pointerHalfSize = options.size / 2;\n var mirror = scale.options.mirror;\n var margin = getSpacing(options.margin);\n var vertical = scale.options.vertical;\n var space = vertical ? margin[mirror ? 'left' : 'right'] : margin[mirror ? 'bottom' : 'top'];\n var pointerBox, pointerRangeBox, trackBox;\n space = mirror ? -space : space;\n if (vertical) {\n trackBox = new Box2D(scaleLine.x1 + space, scaleLine.y1, scaleLine.x1 + space, scaleLine.y2);\n if (mirror) {\n trackBox.x1 -= trackSize;\n } else {\n trackBox.x2 += trackSize;\n }\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box2D(scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize, scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize);\n pointerBox = pointerRangeBox;\n }\n } else {\n trackBox = new Box2D(scaleLine.x1, scaleLine.y1 - space, scaleLine.x2, scaleLine.y1 - space);\n if (mirror) {\n trackBox.y2 += trackSize;\n } else {\n trackBox.y1 -= trackSize;\n }\n if (options.shape !== BAR_POINTER) {\n pointerRangeBox = new Box2D(scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space, scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space);\n pointerBox = pointerRangeBox;\n }\n }\n pointer.trackBox = trackBox;\n pointer.pointerRangeBox = pointerRangeBox;\n pointer.box = pointerBox || trackBox.clone().pad(options.border.width);\n },\n getElementOptions: function () {\n var options = this.options;\n return {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: defined(options.border) ? {\n color: options.border.width ? options.border.color || options.color : '',\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: options.opacity\n } : null\n };\n },\n _margin: function () {\n var pointer = this;\n var options = pointer.options;\n var scale = pointer.scale;\n var mirror = scale.options.mirror;\n var margin = getSpacing(options.margin);\n var vertical = scale.options.vertical;\n var space = vertical ? margin[mirror ? 'left' : 'right'] : margin[mirror ? 'bottom' : 'top'];\n return space;\n }\n });\n var ArrowLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (this.options.size === undefined) {\n this.options.size = this.scale.options.majorTicks.size * 0.6;\n }\n },\n pointerShape: function () {\n var that = this;\n var options = that.options;\n var scale = that.scale;\n var size = options.size;\n var vertical = scale.options.vertical;\n var halfSize = size / 2;\n var sign = scale.options.mirror ? -1 : 1;\n var reverse = scale.options.reverse;\n var pos, shape;\n if (vertical) {\n pos = reverse ? 'y2' : 'y1';\n shape = [\n new Point(0, 0 - halfSize),\n new Point(0 - sign * size, 0),\n new Point(0, 0 + halfSize)\n ];\n } else {\n pos = reverse ? 'x1' : 'x2';\n shape = [\n new Point(0 - halfSize, 0),\n new Point(0, 0 + sign * size),\n new Point(0 + halfSize, 0)\n ];\n }\n return shape;\n },\n repaint: function () {\n var that = this;\n var scale = that.scale;\n var options = that.options;\n var animation = new ArrowLinearPointerAnimation(that.elements, deepExtend(options.animation, {\n vertical: scale.options.vertical,\n mirror: scale.options.mirror,\n margin: that._margin(options.margin),\n from: scale.getSlot(options._oldValue),\n to: scale.getSlot(options.value)\n }));\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n animation.setup();\n animation.play();\n },\n render: function () {\n var that = this;\n var options = that.options;\n var elements = new Group();\n var scale = that.scale;\n var elementOptions = that.getElementOptions();\n var shape = that.pointerShape(options.value);\n options.animation.type = ARROW_POINTER;\n elements = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n }).moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).close();\n var slot = scale.getSlot(options.value);\n elements.transform(geo.transform().translate(slot.x1, slot.y1));\n that.elements = elements;\n return elements;\n }\n });\n var BarLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (this.options.size === undefined) {\n this.options.size = this.scale.options.majorTicks.size * 0.3;\n }\n },\n pointerShape: function (value) {\n var that = this;\n var options = that.options;\n var scale = that.scale;\n var vertical = scale.options.vertical;\n var mirror = scale.options.mirror;\n var dir = mirror == vertical ? -1 : 1;\n var size = options.size * dir;\n var minSlot = scale.getSlot(scale.options.min);\n var slot = scale.getSlot(value);\n var axis = vertical ? Y : X;\n var sizeAxis = vertical ? X : Y;\n var margin = that._margin() * dir;\n var p1 = new Point();\n p1[axis] = minSlot[axis + '1'];\n p1[sizeAxis] = minSlot[sizeAxis + '1'];\n var p2 = new Point();\n p2[axis] = slot[axis + '1'];\n p2[sizeAxis] = slot[sizeAxis + '1'];\n if (vertical) {\n p1.translate(margin, 0);\n p2.translate(margin, 0);\n } else {\n p1.translate(0, margin);\n p2.translate(0, margin);\n }\n var p3 = p2.clone();\n var p4 = p1.clone();\n if (vertical) {\n p3.translate(size, 0);\n p4.translate(size, 0);\n } else {\n p3.translate(0, size);\n p4.translate(0, size);\n }\n return [\n p1,\n p2,\n p3,\n p4\n ];\n },\n repaint: function () {\n var that = this;\n var scale = that.scale;\n var options = that.options;\n var shape = that.pointerShape(options.value);\n var pointerPath = that.elements.children[0];\n var oldShape = that.pointerShape(options._oldValue);\n pointerPath.moveTo(shape[0]).lineTo(shape[1]).lineTo(shape[2]).lineTo(shape[3]).close();\n var animation = new BarLinearPointerAnimation(pointerPath, deepExtend(options.animation, {\n reverse: scale.options.reverse,\n vertical: scale.options.vertical,\n oldPoints: [\n oldShape[1],\n oldShape[2]\n ],\n newPoints: [\n shape[1],\n shape[2]\n ]\n }));\n if (options.animation.transitions === false) {\n animation.options.duration = 0;\n }\n animation.setup();\n animation.play();\n },\n render: function () {\n var that = this;\n var group = new Group();\n var elementOptions = that.getElementOptions();\n var pointer = new Path({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n });\n group.append(pointer);\n that.elements = group;\n return group;\n }\n });\n var RadialPointerAnimation = draw.Animation.extend({\n init: function (element, options) {\n draw.Animation.fn.init.call(this, element, options);\n options = this.options;\n options.duration = math.max(math.abs(options.newAngle - options.oldAngle) / options.duration * 1000, 1);\n },\n options: {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n },\n step: function (pos) {\n var anim = this;\n var options = anim.options;\n var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n anim.element.transform(geo.transform().rotate(angle, options.center));\n }\n });\n draw.AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n var ArrowLinearPointerAnimation = draw.Animation.extend({\n options: {\n easing: LINEAR,\n duration: LINEAR_SPEED\n },\n setup: function () {\n var options = this.options;\n var margin = options.margin;\n var from = options.from;\n var to = options.to;\n var axis = options.vertical ? 'x1' : 'y1';\n if (options.mirror == options.vertical) {\n from[axis] -= margin;\n to[axis] -= margin;\n } else {\n from[axis] += margin;\n to[axis] += margin;\n }\n var fromScale = this.fromScale = new Point(from.x1, from.y1);\n var toScale = this.toScale = new Point(to.x1, to.y1);\n if (options.duration !== 0) {\n options.duration = math.max(fromScale.distanceTo(toScale) / options.duration * 1000, 1);\n }\n },\n step: function (pos) {\n var translateX = interpolateValue(this.fromScale.x, this.toScale.x, pos);\n var translateY = interpolateValue(this.fromScale.y, this.toScale.y, pos);\n this.element.transform(geo.transform().translate(translateX, translateY));\n }\n });\n draw.AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n var BarLinearPointerAnimation = draw.Animation.extend({\n options: {\n easing: LINEAR,\n speed: LINEAR_SPEED\n },\n setup: function () {\n var options = this.options;\n var newPoints = options.newPoints;\n var oldPoints = options.oldPoints;\n var axis = this.axis = options.vertical ? Y : X;\n var to = this.to = newPoints[0][axis];\n var from = this.from = oldPoints[0][axis];\n if (options.duration !== 0) {\n options.duration = math.max(math.abs(to - from) / options.speed * 1000, 1);\n }\n this._set(from);\n },\n step: function (pos) {\n var value = interpolateValue(this.from, this.to, pos);\n this._set(value);\n },\n _set: function (value) {\n var setter = 'set' + this.axis.toUpperCase();\n var points = this.options.newPoints;\n points[0][setter](value);\n points[1][setter](value);\n }\n });\n draw.AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n function _buildLabel(label, options) {\n var labelBox = label.box;\n var textBox = label.children[0].box;\n var border = options.border || {};\n var background = options.background || '';\n var elements = new Group();\n var styleBox, styleGeometry, wrapper;\n wrapper = Path.fromRect(new Rect([\n labelBox.x1,\n labelBox.y1\n ], [\n labelBox.width(),\n labelBox.height()\n ]), { stroke: {} });\n var text = new Text(label.text, new Point(textBox.x1, textBox.y1), {\n font: options.font,\n fill: { color: options.color }\n });\n styleGeometry = _pad(text.bbox().clone(), options.padding);\n styleBox = Path.fromRect(styleGeometry, {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType,\n lineJoin: 'round',\n lineCap: 'round'\n },\n fill: { color: background }\n });\n elements.append(wrapper);\n elements.append(styleBox);\n elements.append(text);\n return elements;\n }\n function getRange(range, min, max) {\n var from = defined(range.from) ? range.from : MIN_VALUE;\n var to = defined(range.to) ? range.to : MAX_VALUE;\n range.from = math.max(math.min(to, from), min);\n range.to = math.min(math.max(to, from), max);\n return range;\n }\n function _pad(bbox, value) {\n var origin = bbox.getOrigin();\n var size = bbox.getSize();\n var spacing = getSpacing(value);\n bbox.setOrigin([\n origin.x - spacing.left,\n origin.y - spacing.top\n ]);\n bbox.setSize([\n size.width + (spacing.left + spacing.right),\n size.height + (spacing.top + spacing.bottom)\n ]);\n return bbox;\n }\n function _unpad(bbox, value) {\n var spacing = getSpacing(value);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return _pad(bbox, spacing);\n }\n dataviz.ui.plugin(RadialGauge);\n dataviz.ui.plugin(LinearGauge);\n dataviz.ExportMixin.extend(Gauge.fn);\n deepExtend(dataviz, {\n Gauge: Gauge,\n RadialPointer: RadialPointer,\n LinearPointer: LinearPointer,\n ArrowLinearPointer: ArrowLinearPointer,\n BarLinearPointer: BarLinearPointer,\n LinearScale: LinearScale,\n RadialScale: RadialScale,\n LinearGauge: LinearGauge,\n RadialGauge: RadialGauge\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.barcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.barcode',\n name: 'Barcode',\n category: 'dataviz',\n description: 'Barcode widget',\n depends: ['dataviz.core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, extend = $.extend, deepExtend = kendo.deepExtend, inArray = $.inArray, isPlainObject = $.isPlainObject, draw = kendo.drawing, geom = kendo.geometry, util = kendo.drawing.util, defined = util.defined, dataviz = kendo.dataviz, Box2D = dataviz.Box2D, TextBox = dataviz.TextBox, DEFAULT_WIDTH = 300, DEFAULT_HEIGHT = 100, DEFAULT_QUIETZONE_LENGTH = 10, numberRegex = /^\\d+$/, alphanumericRegex = /^[a-z0-9]+$/i, InvalidCharacterErrorTemplate = 'Character \\'{0}\\' is not valid for symbology {1}';\n function getNext(value, index, count) {\n return value.substring(index, index + count);\n }\n var Encoding = kendo.Class.extend({\n init: function (options) {\n this.setOptions(options);\n },\n setOptions: function (options) {\n var that = this;\n that.options = extend({}, that.options, options);\n that.quietZoneLength = that.options.addQuietZone ? 2 * that.options.quietZoneLength : 0;\n },\n encode: function (value, width, height) {\n var that = this;\n if (defined(value)) {\n value += '';\n }\n that.initValue(value, width, height);\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\n that.addData();\n if (that.options.addQuietZone) {\n that.addQuietZone();\n }\n return {\n baseUnit: that.baseUnit,\n pattern: that.pattern\n };\n },\n options: {\n quietZoneLength: DEFAULT_QUIETZONE_LENGTH,\n addQuietZone: true,\n addCheckSum: true\n },\n initValue: function () {\n },\n addQuietZone: function () {\n this.pattern.push(this.options.quietZoneLength || DEFAULT_QUIETZONE_LENGTH);\n },\n addData: function () {\n },\n invalidCharacterError: function (character) {\n throw new Error(kendo.format(InvalidCharacterErrorTemplate, character, this.name));\n }\n });\n var encodings = {};\n var code39Base = Encoding.extend({\n minBaseUnitLength: 0.7,\n addData: function () {\n var that = this, value = that.value;\n that.addStart();\n for (var idx = 0; idx < value.length; idx++) {\n that.addCharacter(value.charAt(idx));\n }\n if (that.options.addCheckSum) {\n that.pushCheckSum();\n }\n that.addStop();\n that.prepareValues();\n },\n addCharacter: function (character) {\n var that = this, charData = that.characterMap[character];\n if (!charData) {\n that.invalidCharacterError(character);\n }\n that.addBase(charData);\n },\n addBase: function () {\n }\n });\n var code39ExtendedBase = {\n addCharacter: function (character) {\n var that = this;\n if (that.characterMap[character]) {\n that.addBase(that.characterMap[character]);\n } else if (character.charCodeAt(0) > 127) {\n that.invalidCharacterError(character);\n } else {\n that.addExtended(character.charCodeAt(0));\n }\n },\n addExtended: function (code) {\n var that = this, patterns;\n for (var i = 0; i < that.extendedMappings.length; i++) {\n if (patterns = that.extendedMappings[i].call(that, code)) {\n for (var j = 0; j < patterns.length; j++) {\n that.addBase(patterns[j]);\n }\n that.dataLength += patterns.length - 1;\n return;\n }\n }\n },\n extendedMappings: [\n function (code) {\n if (97 <= code && code <= 122) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[0]],\n that.characterMap[String.fromCharCode(code - 32)]\n ];\n }\n },\n function (code) {\n if (33 <= code && code <= 58) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[1]],\n that.characterMap[String.fromCharCode(code + 32)]\n ];\n }\n },\n function (code) {\n if (1 <= code && code <= 26) {\n var that = this;\n return [\n that.characterMap[that.shiftCharacters[2]],\n that.characterMap[String.fromCharCode(code + 64)]\n ];\n }\n },\n function (code) {\n var that = this, result, dataCharacter;\n if (!that.specialAsciiCodes[code]) {\n dataCharacter = Math.floor(code / 32) * 6 + (code - 27) % 32 + 64;\n result = [\n that.characterMap[that.shiftCharacters[3]],\n that.characterMap[String.fromCharCode(dataCharacter)]\n ];\n } else {\n result = [];\n for (var i = 0; i < that.specialAsciiCodes[code].length; i++) {\n result.push(that.characterMap[that.shiftCharacters[3]]);\n result.push(that.characterMap[that.specialAsciiCodes[code][i]]);\n }\n }\n return result;\n }\n ],\n specialAsciiCodes: {\n '0': ['U'],\n '64': ['V'],\n '96': ['W'],\n '127': [\n 'T',\n 'X',\n 'Y',\n 'Z'\n ]\n },\n shiftValuesAsciiCodes: {\n '39': 36,\n '40': 47,\n '41': 43,\n '42': 37\n },\n characterMap: {\n '+': false,\n '/': false,\n '$': false,\n '%': false\n },\n shiftCharacters: [\n 'SHIFT0',\n 'SHIFT1',\n 'SHIFT2',\n 'SHIFT3'\n ]\n };\n encodings.code39 = code39Base.extend({\n name: 'Code 39',\n checkSumMod: 43,\n minRatio: 2.5,\n maxRatio: 3,\n gapWidth: 1,\n splitCharacter: '|',\n initValue: function (value, width, height) {\n var that = this;\n that.width = width;\n that.height = height;\n that.value = value;\n that.dataLength = value.length;\n that.pattern = [];\n that.patternString = '';\n },\n prepareValues: function () {\n var that = this, baseUnit, minBaseUnit = that.minBaseUnitLength, ratio = that.maxRatio, minRatio = that.minRatio, minHeight = Math.max(0.15 * that.width, 24);\n if (that.height < minHeight) {\n throw new Error('Insufficient Height. The minimum height for value: ' + that.value + ' is: ' + minHeight);\n }\n while ((baseUnit = that.getBaseUnit(ratio)) < minBaseUnit && ratio > minRatio) {\n ratio = parseFloat((ratio - 0.1).toFixed(1));\n }\n if (baseUnit < minBaseUnit) {\n var minWidth = Math.ceil(that.getBaseWidth(minRatio) * minBaseUnit);\n throw new Error('Insufficient width. The minimum width for value: ' + that.value + ' is: ' + minWidth);\n }\n that.ratio = ratio;\n that.baseUnit = baseUnit;\n that.patternString = that.patternString.substring(0, that.patternString.length - 1);\n that.pattern = that.pattern.concat(that.patternString.replace(/ratio/g, ratio).split(that.splitCharacter));\n },\n getBaseUnit: function (ratio) {\n return this.width / this.getBaseWidth(ratio);\n },\n getBaseWidth: function (ratio) {\n var that = this, characterLength = 3 * (ratio + 2);\n return that.quietZoneLength + characterLength * (that.dataLength + 2) + that.gapWidth * (that.dataLength + 1);\n },\n addStart: function () {\n var that = this;\n that.addPattern(that.characterMap.START.pattern);\n that.addCharacterGap();\n },\n addBase: function (character) {\n this.addPattern(character.pattern);\n this.addCharacterGap();\n },\n addStop: function () {\n this.addPattern(this.characterMap.START.pattern);\n },\n addPattern: function (pattern) {\n for (var i = 0; i < pattern.length; i++) {\n this.patternString += this.patternMappings[pattern.charAt(i)];\n }\n },\n addCharacterGap: function () {\n var that = this;\n that.patternString += that.gapWidth + that.splitCharacter;\n },\n patternMappings: {\n 'b': '1|',\n 'w': '1|',\n 'B': 'ratio|',\n 'W': 'ratio|'\n },\n characterMap: {\n '0': {\n 'pattern': 'bwbWBwBwb',\n 'value': 0\n },\n '1': {\n 'pattern': 'BwbWbwbwB',\n 'value': 1\n },\n '2': {\n 'pattern': 'bwBWbwbwB',\n 'value': 2\n },\n '3': {\n 'pattern': 'BwBWbwbwb',\n 'value': 3\n },\n '4': {\n 'pattern': 'bwbWBwbwB',\n 'value': 4\n },\n '5': {\n 'pattern': 'BwbWBwbwb',\n 'value': 5\n },\n '6': {\n 'pattern': 'bwBWBwbwb',\n 'value': 6\n },\n '7': {\n 'pattern': 'bwbWbwBwB',\n 'value': 7\n },\n '8': {\n 'pattern': 'BwbWbwBwb',\n 'value': 8\n },\n '9': {\n 'pattern': 'bwBWbwBwb',\n 'value': 9\n },\n 'A': {\n 'pattern': 'BwbwbWbwB',\n 'value': 10\n },\n 'B': {\n 'pattern': 'bwBwbWbwB',\n 'value': 11\n },\n 'C': {\n 'pattern': 'BwBwbWbwb',\n 'value': 12\n },\n 'D': {\n 'pattern': 'bwbwBWbwB',\n 'value': 13\n },\n 'E': {\n 'pattern': 'BwbwBWbwb',\n 'value': 14\n },\n 'F': {\n 'pattern': 'bwBwBWbwb',\n 'value': 15\n },\n 'G': {\n 'pattern': 'bwbwbWBwB',\n 'value': 16\n },\n 'H': {\n 'pattern': 'BwbwbWBwb',\n 'value': 17\n },\n 'I': {\n 'pattern': 'bwBwbWBwb',\n 'value': 18\n },\n 'J': {\n 'pattern': 'bwbwBWBwb',\n 'value': 19\n },\n 'K': {\n 'pattern': 'BwbwbwbWB',\n 'value': 20\n },\n 'L': {\n 'pattern': 'bwBwbwbWB',\n 'value': 21\n },\n 'M': {\n 'pattern': 'BwBwbwbWb',\n 'value': 22\n },\n 'N': {\n 'pattern': 'bwbwBwbWB',\n 'value': 23\n },\n 'O': {\n 'pattern': 'BwbwBwbWb',\n 'value': 24\n },\n 'P': {\n 'pattern': 'bwBwBwbWb',\n 'value': 25\n },\n 'Q': {\n 'pattern': 'bwbwbwBWB',\n 'value': 26\n },\n 'R': {\n 'pattern': 'BwbwbwBWb',\n 'value': 27\n },\n 'S': {\n 'pattern': 'bwBwbwBWb',\n 'value': 28\n },\n 'T': {\n 'pattern': 'bwbwBwBWb',\n 'value': 29\n },\n 'U': {\n 'pattern': 'BWbwbwbwB',\n 'value': 30\n },\n 'V': {\n 'pattern': 'bWBwbwbwB',\n 'value': 31\n },\n 'W': {\n 'pattern': 'BWBwbwbwb',\n 'value': 32\n },\n 'X': {\n 'pattern': 'bWbwBwbwB',\n 'value': 33\n },\n 'Y': {\n 'pattern': 'BWbwBwbwb',\n 'value': 34\n },\n 'Z': {\n 'pattern': 'bWBwBwbwb',\n 'value': 35\n },\n '-': {\n 'pattern': 'bWbwbwBwB',\n 'value': 36\n },\n '.': {\n 'pattern': 'BWbwbwBwb',\n 'value': 37\n },\n ' ': {\n 'pattern': 'bWBwbwBwb',\n 'value': 38\n },\n '$': {\n 'pattern': 'bWbWbWbwb',\n 'value': 39\n },\n '/': {\n 'pattern': 'bWbWbwbWb',\n 'value': 40\n },\n '+': {\n 'pattern': 'bWbwbWbWb',\n 'value': 41\n },\n '%': {\n 'pattern': 'bwbWbWbWb',\n 'value': 42\n },\n START: { pattern: 'bWbwBwBwb' }\n },\n options: { addCheckSum: false }\n });\n encodings.code39extended = encodings.code39.extend(deepExtend({}, code39ExtendedBase, {\n name: 'Code 39 extended',\n characterMap: {\n SHIFT0: {\n 'pattern': 'bWbwbWbWb',\n 'value': 41\n },\n SHIFT1: {\n 'pattern': 'bWbWbwbWb',\n 'value': 40\n },\n SHIFT2: {\n 'pattern': 'bWbWbWbwb',\n 'value': 39\n },\n SHIFT3: {\n 'pattern': 'bwbWbWbWb',\n 'value': 42\n }\n }\n }));\n encodings.code93 = code39Base.extend({\n name: 'Code 93',\n cCheckSumTotal: 20,\n kCheckSumTotal: 15,\n checkSumMod: 47,\n initValue: function (value, width, height) {\n var that = this;\n that.value = value;\n that.width = width;\n that.height = height;\n that.pattern = [];\n that.values = [];\n that.dataLength = value.length;\n },\n prepareValues: function () {\n var that = this, minHeight = Math.max(0.15 * that.width, 24);\n if (that.height < minHeight) {\n throw new Error('Insufficient Height');\n }\n that.setBaseUnit();\n if (that.baseUnit < that.minBaseUnitLength) {\n throw new Error('Insufficient Width');\n }\n },\n setBaseUnit: function () {\n var that = this, checkSumLength = 2;\n that.baseUnit = that.width / (9 * (that.dataLength + 2 + checkSumLength) + that.quietZoneLength + 1);\n },\n addStart: function () {\n var pattern = this.characterMap.START.pattern;\n this.addPattern(pattern);\n },\n addStop: function () {\n var that = this;\n that.addStart();\n that.pattern.push(that.characterMap.TERMINATION_BAR);\n },\n addBase: function (charData) {\n this.addPattern(charData.pattern);\n this.values.push(charData.value);\n },\n pushCheckSum: function () {\n var that = this, checkValues = that._getCheckValues(), charData;\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n charData = that.characterMap[that._findCharacterByValue(checkValues[i])];\n that.addPattern(charData.pattern);\n }\n },\n _getCheckValues: function () {\n var that = this, values = that.values, length = values.length, wightedSum = 0, cValue, kValue, idx;\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += that.weightedValue(values[idx], length - idx, that.cCheckSumTotal);\n }\n cValue = wightedSum % that.checkSumMod;\n wightedSum = that.weightedValue(cValue, 1, that.kCheckSumTotal);\n for (idx = length - 1; idx >= 0; idx--) {\n wightedSum += that.weightedValue(values[idx], length - idx + 1, that.kCheckSumTotal);\n }\n kValue = wightedSum % that.checkSumMod;\n return [\n cValue,\n kValue\n ];\n },\n _findCharacterByValue: function (value) {\n for (var character in this.characterMap) {\n if (this.characterMap[character].value === value) {\n return character;\n }\n }\n },\n weightedValue: function (value, index, total) {\n return (index % total || total) * value;\n },\n addPattern: function (pattern) {\n var value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n }\n },\n characterMap: {\n '0': {\n 'pattern': '131112',\n 'value': 0\n },\n '1': {\n 'pattern': '111213',\n 'value': 1\n },\n '2': {\n 'pattern': '111312',\n 'value': 2\n },\n '3': {\n 'pattern': '111411',\n 'value': 3\n },\n '4': {\n 'pattern': '121113',\n 'value': 4\n },\n '5': {\n 'pattern': '121212',\n 'value': 5\n },\n '6': {\n 'pattern': '121311',\n 'value': 6\n },\n '7': {\n 'pattern': '111114',\n 'value': 7\n },\n '8': {\n 'pattern': '131211',\n 'value': 8\n },\n '9': {\n 'pattern': '141111',\n 'value': 9\n },\n 'A': {\n 'pattern': '211113',\n 'value': 10\n },\n 'B': {\n 'pattern': '211212',\n 'value': 11\n },\n 'C': {\n 'pattern': '211311',\n 'value': 12\n },\n 'D': {\n 'pattern': '221112',\n 'value': 13\n },\n 'E': {\n 'pattern': '221211',\n 'value': 14\n },\n 'F': {\n 'pattern': '231111',\n 'value': 15\n },\n 'G': {\n 'pattern': '112113',\n 'value': 16\n },\n 'H': {\n 'pattern': '112212',\n 'value': 17\n },\n 'I': {\n 'pattern': '112311',\n 'value': 18\n },\n 'J': {\n 'pattern': '122112',\n 'value': 19\n },\n 'K': {\n 'pattern': '132111',\n 'value': 20\n },\n 'L': {\n 'pattern': '111123',\n 'value': 21\n },\n 'M': {\n 'pattern': '111222',\n 'value': 22\n },\n 'N': {\n 'pattern': '111321',\n 'value': 23\n },\n 'O': {\n 'pattern': '121122',\n 'value': 24\n },\n 'P': {\n 'pattern': '131121',\n 'value': 25\n },\n 'Q': {\n 'pattern': '212112',\n 'value': 26\n },\n 'R': {\n 'pattern': '212211',\n 'value': 27\n },\n 'S': {\n 'pattern': '211122',\n 'value': 28\n },\n 'T': {\n 'pattern': '211221',\n 'value': 29\n },\n 'U': {\n 'pattern': '221121',\n 'value': 30\n },\n 'V': {\n 'pattern': '222111',\n 'value': 31\n },\n 'W': {\n 'pattern': '112122',\n 'value': 32\n },\n 'X': {\n 'pattern': '112221',\n 'value': 33\n },\n 'Y': {\n 'pattern': '122121',\n 'value': 34\n },\n 'Z': {\n 'pattern': '123111',\n 'value': 35\n },\n '-': {\n 'pattern': '121131',\n 'value': 36\n },\n '.': {\n 'pattern': '311112',\n 'value': 37\n },\n ' ': {\n 'pattern': '311211',\n 'value': 38\n },\n '$': {\n 'pattern': '321111',\n 'value': 39\n },\n '/': {\n 'pattern': '112131',\n 'value': 40\n },\n '+': {\n 'pattern': '113121',\n 'value': 41\n },\n '%': {\n 'pattern': '211131',\n 'value': 42\n },\n SHIFT0: {\n 'pattern': '122211',\n 'value': 46\n },\n SHIFT1: {\n 'pattern': '311121',\n 'value': 45\n },\n SHIFT2: {\n 'pattern': '121221',\n 'value': 43\n },\n SHIFT3: {\n 'pattern': '312111',\n 'value': 44\n },\n START: { 'pattern': '111141' },\n TERMINATION_BAR: '1'\n }\n });\n encodings.code93extended = encodings.code93.extend(deepExtend({}, code39ExtendedBase, {\n name: 'Code 93 extended',\n pushCheckSum: function () {\n var that = this, checkValues = that._getCheckValues(), value;\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n value = checkValues[i];\n if (that.shiftValuesAsciiCodes[value]) {\n that.addExtended(that.shiftValuesAsciiCodes[value]);\n } else {\n that.addPattern(that.characterMap[that._findCharacterByValue(value)].pattern);\n }\n }\n }\n }));\n var state128 = kendo.Class.extend({\n init: function (encoding) {\n this.encoding = encoding;\n },\n addStart: function () {\n },\n is: function () {\n },\n move: function () {\n },\n pushState: function () {\n }\n });\n var state128AB = state128.extend({\n FNC4: 'FNC4',\n init: function (encoding, states) {\n var that = this;\n that.encoding = encoding;\n that.states = states;\n that._initMoves(states);\n },\n addStart: function () {\n this.encoding.addPattern(this.START);\n },\n is: function (value, index) {\n var code = value.charCodeAt(index);\n return this.isCode(code);\n },\n move: function (encodingState) {\n var that = this, idx = 0;\n while (!that._moves[idx].call(that, encodingState) && idx < that._moves.length) {\n idx++;\n }\n },\n pushState: function (encodingState) {\n var that = this, states = that.states, value = encodingState.value, maxLength = value.length, code;\n if (inArray('C', states) >= 0) {\n var numberMatch = value.substr(encodingState.index).match(/\\d{4,}/g);\n if (numberMatch) {\n maxLength = value.indexOf(numberMatch[0], encodingState.index);\n }\n }\n while ((code = encodingState.value.charCodeAt(encodingState.index)) >= 0 && that.isCode(code) && encodingState.index < maxLength) {\n that.encoding.addPattern(that.getValue(code));\n encodingState.index++;\n }\n },\n _initMoves: function (states) {\n var that = this;\n that._moves = [];\n if (inArray(that.FNC4, states) >= 0) {\n that._moves.push(that._moveFNC);\n }\n if (inArray(that.shiftKey, states) >= 0) {\n that._moves.push(that._shiftState);\n }\n that._moves.push(that._moveState);\n },\n _moveFNC: function (encodingState) {\n if (encodingState.fnc) {\n encodingState.fnc = false;\n return encodingState.previousState == this.key;\n }\n },\n _shiftState: function (encodingState) {\n var that = this;\n if (encodingState.previousState == that.shiftKey && (encodingState.index + 1 >= encodingState.value.length || that.encoding[that.shiftKey].is(encodingState.value, encodingState.index + 1))) {\n that.encoding.addPattern(that.SHIFT);\n encodingState.shifted = true;\n return true;\n }\n },\n _moveState: function () {\n this.encoding.addPattern(this.MOVE);\n return true;\n },\n SHIFT: 98\n });\n var states128 = {};\n states128.A = state128AB.extend({\n key: 'A',\n shiftKey: 'B',\n isCode: function (code) {\n return 0 <= code && code < 96;\n },\n getValue: function (code) {\n if (code < 32) {\n return code + 64;\n }\n return code - 32;\n },\n MOVE: 101,\n START: 103\n });\n states128.B = state128AB.extend({\n key: 'B',\n shiftKey: 'A',\n isCode: function (code) {\n return 32 <= code && code < 128;\n },\n getValue: function (code) {\n return code - 32;\n },\n MOVE: 100,\n START: 104\n });\n states128.C = state128.extend({\n key: 'C',\n addStart: function () {\n this.encoding.addPattern(this.START);\n },\n is: function (value, index) {\n var next4 = getNext(value, index, 4);\n return (index + 4 <= value.length || value.length == 2) && numberRegex.test(next4);\n },\n move: function () {\n this.encoding.addPattern(this.MOVE);\n },\n pushState: function (encodingState) {\n var code;\n while ((code = getNext(encodingState.value, encodingState.index, 2)) && numberRegex.test(code) && code.length == 2) {\n this.encoding.addPattern(parseInt(code, 10));\n encodingState.index += 2;\n }\n },\n getValue: function (code) {\n return code;\n },\n MOVE: 99,\n START: 105\n });\n states128.FNC4 = state128.extend({\n key: 'FNC4',\n dependentStates: [\n 'A',\n 'B'\n ],\n init: function (encoding, states) {\n this.encoding = encoding;\n this._initSubStates(states);\n },\n addStart: function (encodingState) {\n var code = encodingState.value.charCodeAt(0) - 128, subState = this._getSubState(code);\n this.encoding[subState].addStart();\n },\n is: function (value, index) {\n var code = value.charCodeAt(index);\n return this.isCode(code);\n },\n isCode: function (code) {\n return 128 <= code && code < 256;\n },\n pushState: function (encodingState) {\n var that = this, subState = that._initSubState(encodingState), encoding = that.encoding, length = subState.value.length;\n encodingState.index += length;\n if (length < 3) {\n var code;\n for (; subState.index < length; subState.index++) {\n code = subState.value.charCodeAt(subState.index);\n subState.state = that._getSubState(code);\n if (subState.previousState != subState.state) {\n subState.previousState = subState.state;\n encoding[subState.state].move(subState);\n }\n encoding.addPattern(encoding[subState.state].MOVE);\n encoding.addPattern(encoding[subState.state].getValue(code));\n }\n } else {\n if (subState.state != subState.previousState) {\n encoding[subState.state].move(subState);\n }\n that._pushStart(subState);\n encoding.pushData(subState, that.subStates);\n if (encodingState.index < encodingState.value.length) {\n that._pushStart(subState);\n }\n }\n encodingState.fnc = true;\n encodingState.state = subState.state;\n },\n _pushStart: function (subState) {\n var that = this;\n that.encoding.addPattern(that.encoding[subState.state].MOVE);\n that.encoding.addPattern(that.encoding[subState.state].MOVE);\n },\n _initSubState: function (encodingState) {\n var that = this, subState = {\n value: that._getAll(encodingState.value, encodingState.index),\n index: 0\n };\n subState.state = that._getSubState(subState.value.charCodeAt(0));\n subState.previousState = encodingState.previousState == that.key ? subState.state : encodingState.previousState;\n return subState;\n },\n _initSubStates: function (states) {\n var that = this;\n that.subStates = [];\n for (var i = 0; i < states.length; i++) {\n if (inArray(states[i], that.dependentStates) >= 0) {\n that.subStates.push(states[i]);\n }\n }\n },\n _getSubState: function (code) {\n var that = this;\n for (var i = 0; i < that.subStates.length; i++) {\n if (that.encoding[that.subStates[i]].isCode(code)) {\n return that.subStates[i];\n }\n }\n },\n _getAll: function (value, index) {\n var code, result = '';\n while ((code = value.charCodeAt(index++)) && this.isCode(code)) {\n result += String.fromCharCode(code - 128);\n }\n return result;\n }\n });\n states128.FNC1 = state128.extend({\n key: 'FNC1',\n startState: 'C',\n dependentStates: [\n 'C',\n 'B'\n ],\n startAI: '(',\n endAI: ')',\n init: function (encoding, states) {\n this.encoding = encoding;\n this.states = states;\n },\n addStart: function () {\n this.encoding[this.startState].addStart();\n },\n is: function () {\n return inArray(this.key, this.states) >= 0;\n },\n pushState: function (encodingState) {\n var that = this, encoding = that.encoding, value = encodingState.value.replace(/\\s/g, ''), regexSeparators = new RegExp('[' + that.startAI + that.endAI + ']', 'g'), index = encodingState.index, subState = { state: that.startState }, current, nextStart, separatorLength;\n encoding.addPattern(that.START);\n while (true) {\n subState.index = 0;\n separatorLength = value.charAt(index) === that.startAI ? 2 : 0;\n current = separatorLength > 0 ? that.getBySeparator(value, index) : that.getByLength(value, index);\n if (current.ai.length) {\n nextStart = index + separatorLength + current.id.length + current.ai.length;\n } else {\n nextStart = value.indexOf(that.startAI, index + 1);\n if (nextStart < 0) {\n if (index + current.ai.max + current.id.length + separatorLength < value.length) {\n throw new Error('Separators are required after variable length identifiers');\n }\n nextStart = value.length;\n }\n }\n subState.value = value.substring(index, nextStart).replace(regexSeparators, '');\n that.validate(current, subState.value);\n encoding.pushData(subState, that.dependentStates);\n if (nextStart >= value.length) {\n break;\n }\n index = nextStart;\n if (subState.state != that.startState) {\n encoding[that.startState].move(subState);\n subState.state = that.startState;\n }\n if (!current.ai.length) {\n encoding.addPattern(that.START);\n }\n }\n encodingState.index = encodingState.value.length;\n },\n validate: function (current, value) {\n var code = value.substr(current.id.length), ai = current.ai;\n if (!ai.type && !numberRegex.test(code)) {\n throw new Error('Application identifier ' + current.id + ' is numeric only but contains non numeric character(s).');\n }\n if (ai.type == 'alphanumeric' && !alphanumericRegex.test(code)) {\n throw new Error('Application identifier ' + current.id + ' is alphanumeric only but contains non alphanumeric character(s).');\n }\n if (ai.length && ai.length !== code.length) {\n throw new Error('Application identifier ' + current.id + ' must be ' + ai.length + ' characters long.');\n }\n if (ai.min && ai.min > code.length) {\n throw new Error('Application identifier ' + current.id + ' must be at least ' + ai.min + ' characters long.');\n }\n if (ai.max && ai.max < code.length) {\n throw new Error('Application identifier ' + current.id + ' must be at most ' + ai.max + ' characters long.');\n }\n },\n getByLength: function (value, index) {\n var that = this, id, ai;\n for (var i = 2; i <= 4; i++) {\n id = getNext(value, index, i);\n ai = that.getAI(id) || that.getAI(id.substring(0, id.length - 1));\n if (ai) {\n return {\n id: id,\n ai: ai\n };\n }\n }\n that.unsupportedAIError(id);\n },\n unsupportedAIError: function (id) {\n throw new Error(kendo.format('\\'{0}\\' is not a supported Application Identifier'), id);\n },\n getBySeparator: function (value, index) {\n var that = this, start = value.indexOf(that.startAI, index), end = value.indexOf(that.endAI, start), id = value.substring(start + 1, end), ai = that.getAI(id) || that.getAI(id.substr(id.length - 1));\n if (!ai) {\n that.unsupportedAIError(id);\n }\n return {\n ai: ai,\n id: id\n };\n },\n getAI: function (id) {\n var ai = this.applicationIdentifiers, multiKey = ai.multiKey;\n if (ai[id]) {\n return ai[id];\n }\n for (var i = 0; i < multiKey.length; i++) {\n if (multiKey[i].ids && inArray(id, multiKey[i].ids) >= 0) {\n return multiKey[i].type;\n } else if (multiKey[i].ranges) {\n var ranges = multiKey[i].ranges;\n for (var j = 0; j < ranges.length; j++) {\n if (ranges[j][0] <= id && id <= ranges[j][1]) {\n return multiKey[i].type;\n }\n }\n }\n }\n },\n applicationIdentifiers: {\n '22': {\n max: 29,\n type: 'alphanumeric'\n },\n '402': { length: 17 },\n '7004': {\n max: 4,\n type: 'alphanumeric'\n },\n '242': {\n max: 6,\n type: 'alphanumeric'\n },\n '8020': {\n max: 25,\n type: 'alphanumeric'\n },\n '703': {\n min: 3,\n max: 30,\n type: 'alphanumeric'\n },\n '8008': {\n min: 8,\n max: 12,\n type: 'alphanumeric'\n },\n '253': {\n min: 13,\n max: 17,\n type: 'alphanumeric'\n },\n '8003': {\n min: 14,\n max: 30,\n type: 'alphanumeric'\n },\n multiKey: [\n {\n ids: [\n '15',\n '17',\n '8005',\n '8100'\n ],\n ranges: [\n [\n 11,\n 13\n ],\n [\n 310,\n 316\n ],\n [\n 320,\n 336\n ],\n [\n 340,\n 369\n ]\n ],\n type: { length: 6 }\n },\n {\n ids: [\n '240',\n '241',\n '250',\n '251',\n '400',\n '401',\n '403',\n '7002',\n '8004',\n '8007',\n '8110'\n ],\n ranges: [[90 - 99]],\n type: {\n max: 30,\n type: 'alphanumeric'\n }\n },\n {\n ids: ['7001'],\n ranges: [[\n 410,\n 414\n ]],\n type: { length: 13 }\n },\n {\n ids: [\n '10',\n '21',\n '254',\n '420',\n '8002'\n ],\n type: {\n max: 20,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '00',\n '8006',\n '8017',\n '8018'\n ],\n type: { length: 18 }\n },\n {\n ids: [\n '01',\n '02',\n '8001'\n ],\n type: { length: 14 }\n },\n {\n ids: ['422'],\n ranges: [[\n 424,\n 426\n ]],\n type: { length: 3 }\n },\n {\n ids: [\n '20',\n '8102'\n ],\n type: { length: 2 }\n },\n {\n ids: [\n '30',\n '37'\n ],\n type: {\n max: 8,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '390',\n '392'\n ],\n type: {\n max: 15,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '421',\n '423'\n ],\n type: {\n min: 3,\n max: 15,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '391',\n '393'\n ],\n type: {\n min: 3,\n max: 18,\n type: 'alphanumeric'\n }\n },\n {\n ids: [\n '7003',\n '8101'\n ],\n type: { length: 10 }\n }\n ]\n },\n START: 102\n });\n var code128Base = Encoding.extend({\n init: function (options) {\n Encoding.fn.init.call(this, options);\n this._initStates();\n },\n _initStates: function () {\n var that = this;\n for (var i = 0; i < that.states.length; i++) {\n that[that.states[i]] = new states128[that.states[i]](that, that.states);\n }\n },\n initValue: function (value, width, height) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.width = width;\n that.height = height;\n that.checkSum = 0;\n that.totalUnits = 0;\n that.index = 0;\n that.position = 1;\n },\n addData: function () {\n var that = this, encodingState = {\n value: that.value,\n index: 0,\n state: ''\n };\n if (that.value.length === 0) {\n return;\n }\n encodingState.state = encodingState.previousState = that.getNextState(encodingState, that.states);\n that.addStart(encodingState);\n that.pushData(encodingState, that.states);\n that.addCheckSum();\n that.addStop();\n that.setBaseUnit();\n },\n pushData: function (encodingState, states) {\n var that = this;\n while (true) {\n that[encodingState.state].pushState(encodingState);\n if (encodingState.index >= encodingState.value.length) {\n break;\n }\n if (!encodingState.shifted) {\n encodingState.previousState = encodingState.state;\n encodingState.state = that.getNextState(encodingState, states);\n that[encodingState.state].move(encodingState);\n } else {\n var temp = encodingState.state;\n encodingState.state = encodingState.previousState;\n encodingState.previousState = temp;\n encodingState.shifted = false;\n }\n }\n },\n addStart: function (encodingState) {\n this[encodingState.state].addStart(encodingState);\n this.position = 1;\n },\n addCheckSum: function () {\n var that = this;\n that.checksum = that.checkSum % 103;\n that.addPattern(that.checksum);\n },\n addStop: function () {\n this.addPattern(this.STOP);\n },\n setBaseUnit: function () {\n var that = this;\n that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n },\n addPattern: function (code) {\n var that = this, pattern = that.characterMap[code].toString(), value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n that.pattern.push(value);\n that.totalUnits += value;\n }\n that.checkSum += code * that.position++;\n },\n getNextState: function (encodingState, states) {\n for (var i = 0; i < states.length; i++) {\n if (this[states[i]].is(encodingState.value, encodingState.index)) {\n return states[i];\n }\n }\n this.invalidCharacterError(encodingState.value.charAt(encodingState.index));\n },\n characterMap: [\n 212222,\n 222122,\n 222221,\n 121223,\n 121322,\n 131222,\n 122213,\n 122312,\n 132212,\n 221213,\n 221312,\n 231212,\n 112232,\n 122132,\n 122231,\n 113222,\n 123122,\n 123221,\n 223211,\n 221132,\n 221231,\n 213212,\n 223112,\n 312131,\n 311222,\n 321122,\n 321221,\n 312212,\n 322112,\n 322211,\n 212123,\n 212321,\n 232121,\n 111323,\n 131123,\n 131321,\n 112313,\n 132113,\n 132311,\n 211313,\n 231113,\n 231311,\n 112133,\n 112331,\n 132131,\n 113123,\n 113321,\n 133121,\n 313121,\n 211331,\n 231131,\n 213113,\n 213311,\n 213131,\n 311123,\n 311321,\n 331121,\n 312113,\n 312311,\n 332111,\n 314111,\n 221411,\n 431111,\n 111224,\n 111422,\n 121124,\n 121421,\n 141122,\n 141221,\n 112214,\n 112412,\n 122114,\n 122411,\n 142112,\n 142211,\n 241211,\n 221114,\n 413111,\n 241112,\n 134111,\n 111242,\n 121142,\n 121241,\n 114212,\n 124112,\n 124211,\n 411212,\n 421112,\n 421211,\n 212141,\n 214121,\n 412121,\n 111143,\n 111341,\n 131141,\n 114113,\n 114311,\n 411113,\n 411311,\n 113141,\n 114131,\n 311141,\n 411131,\n 211412,\n 211214,\n 211232,\n 2331112\n ],\n STOP: 106\n });\n encodings.code128a = code128Base.extend({\n name: 'Code 128 A',\n states: ['A']\n });\n encodings.code128b = code128Base.extend({\n name: 'Code 128 B',\n states: ['B']\n });\n encodings.code128c = code128Base.extend({\n name: 'Code 128 C',\n states: ['C']\n });\n encodings.code128 = code128Base.extend({\n name: 'Code 128',\n states: [\n 'C',\n 'B',\n 'A',\n 'FNC4'\n ]\n });\n encodings['gs1-128'] = code128Base.extend({\n name: 'Code GS1-128',\n states: [\n 'FNC1',\n 'C',\n 'B'\n ]\n });\n var msiBase = Encoding.extend({\n initValue: function (value, width) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.checkSumLength = 0;\n that.width = width;\n },\n setBaseUnit: function () {\n var that = this, startStopLength = 7;\n that.baseUnit = that.width / (12 * (that.value.length + that.checkSumLength) + that.quietZoneLength + startStopLength);\n },\n addData: function () {\n var that = this, value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.STOP);\n that.setBaseUnit();\n },\n addCharacter: function (character) {\n var that = this, pattern = that.characterMap[character];\n if (!pattern) {\n that.invalidCharacterError(character);\n }\n that.addPattern(pattern);\n },\n addPattern: function (pattern) {\n for (var i = 0; i < pattern.length; i++) {\n this.pattern.push(parseInt(pattern.charAt(i), 10));\n }\n },\n addCheckSum: function () {\n var that = this, checkSumFunction = that.checkSums[that.checkSumType], checkValues;\n checkValues = checkSumFunction.call(that.checkSums, that.value);\n that.checksum = checkValues.join('');\n for (var i = 0; i < checkValues.length; i++) {\n that.checkSumLength++;\n that.addPattern(that.characterMap[checkValues[i]]);\n }\n },\n checkSums: {\n Modulo10: function (value) {\n var checkValues = [\n 0,\n ''\n ], odd = value.length % 2, idx, evenSum, oddSum;\n for (idx = 0; idx < value.length; idx++) {\n checkValues[(idx + odd) % 2] += parseInt(value.charAt(idx), 10);\n }\n oddSum = checkValues[0];\n evenSum = (checkValues[1] * 2).toString();\n for (idx = 0; idx < evenSum.length; idx++) {\n oddSum += parseInt(evenSum.charAt(idx), 10);\n }\n return [(10 - oddSum % 10) % 10];\n },\n Modulo11: function (value) {\n var weightedSum = 0, mod = 11, length = value.length, weight, checkValue;\n for (var i = 0; i < length; i++) {\n weight = ((length - i) % 6 || 6) + 1;\n weightedSum += weight * value.charAt(i);\n }\n checkValue = (mod - weightedSum % mod) % mod;\n if (checkValue != 10) {\n return [checkValue];\n }\n return [\n 1,\n 0\n ];\n },\n Modulo11Modulo10: function (value) {\n var checkValues = this.Modulo11(value), mod11Value;\n mod11Value = value + checkValues[0];\n return checkValues.concat(this.Modulo10(mod11Value));\n },\n Modulo10Modulo10: function (value) {\n var checkValues = this.Modulo10(value), mod10Value;\n mod10Value = value + checkValues[0];\n return checkValues.concat(this.Modulo10(mod10Value));\n }\n },\n characterMap: [\n '12121212',\n '12121221',\n '12122112',\n '12122121',\n '12211212',\n '12211221',\n '12212112',\n '12212121',\n '21121212',\n '21121221'\n ],\n START: '21',\n STOP: '121',\n checkSumType: ''\n });\n encodings.msimod10 = msiBase.extend({\n name: 'MSI Modulo10',\n checkSumType: 'Modulo10'\n });\n encodings.msimod11 = msiBase.extend({\n name: 'MSI Modulo11',\n checkSumType: 'Modulo11'\n });\n encodings.msimod1110 = msiBase.extend({\n name: 'MSI Modulo11 Modulo10',\n checkSumType: 'Modulo11Modulo10'\n });\n encodings.msimod1010 = msiBase.extend({\n name: 'MSI Modulo10 Modulo10',\n checkSumType: 'Modulo10Modulo10'\n });\n encodings.code11 = Encoding.extend({\n name: 'Code 11',\n cCheckSumTotal: 10,\n kCheckSumTotal: 9,\n kCheckSumMinLength: 10,\n checkSumMod: 11,\n DASH_VALUE: 10,\n DASH: '-',\n START: '112211',\n STOP: '11221',\n initValue: function (value, width) {\n var that = this;\n that.pattern = [];\n that.value = value;\n that.width = width;\n that.totalUnits = 0;\n },\n addData: function () {\n var that = this;\n var value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.STOP);\n that.setBaseUnit();\n },\n setBaseUnit: function () {\n var that = this;\n that.baseUnit = that.width / (that.totalUnits + that.quietZoneLength);\n },\n addCheckSum: function () {\n var that = this, value = that.value, length = value.length, cValue;\n cValue = that.getWeightedSum(value, length, that.cCheckSumTotal) % that.checkSumMod;\n that.checksum = cValue + '';\n that.addPattern(that.characterMap[cValue]);\n length++;\n if (length >= that.kCheckSumMinLength) {\n var kValue = (cValue + that.getWeightedSum(value, length, that.kCheckSumTotal)) % that.checkSumMod;\n that.checksum += kValue;\n that.addPattern(that.characterMap[kValue]);\n }\n },\n getWeightedSum: function (value, length, total) {\n var weightedSum = 0;\n for (var i = 0; i < value.length; i++) {\n weightedSum += this.weightedValue(this.getValue(value.charAt(i)), length, i, total);\n }\n return weightedSum;\n },\n weightedValue: function (value, length, index, total) {\n var weight = (length - index) % total || total;\n return weight * value;\n },\n getValue: function (character) {\n var that = this;\n if (!isNaN(character)) {\n return parseInt(character, 10);\n } else if (character !== that.DASH) {\n that.invalidCharacterError(character);\n }\n return that.DASH_VALUE;\n },\n addCharacter: function (character) {\n var that = this, value = that.getValue(character), pattern = that.characterMap[value];\n that.addPattern(pattern);\n },\n addPattern: function (pattern) {\n var value;\n for (var i = 0; i < pattern.length; i++) {\n value = parseInt(pattern.charAt(i), 10);\n this.pattern.push(value);\n this.totalUnits += value;\n }\n },\n characterMap: [\n '111121',\n '211121',\n '121121',\n '221111',\n '112121',\n '212111',\n '122111',\n '111221',\n '211211',\n '211111',\n '112111'\n ],\n options: { addCheckSum: true }\n });\n encodings.postnet = Encoding.extend({\n name: 'Postnet',\n START: '2',\n VALID_CODE_LENGTHS: [\n 5,\n 9,\n 11\n ],\n DIGIT_SEPARATOR: '-',\n initValue: function (value, width, height) {\n var that = this;\n that.height = height;\n that.width = width;\n that.baseHeight = height / 2;\n that.value = value.replace(new RegExp(that.DIGIT_SEPARATOR, 'g'), '');\n that.pattern = [];\n that.validate(that.value);\n that.checkSum = 0;\n that.setBaseUnit();\n },\n addData: function () {\n var that = this, value = that.value;\n that.addPattern(that.START);\n for (var i = 0; i < value.length; i++) {\n that.addCharacter(value.charAt(i));\n }\n if (that.options.addCheckSum) {\n that.addCheckSum();\n }\n that.addPattern(that.START);\n that.pattern.pop();\n },\n addCharacter: function (character) {\n var that = this, pattern = that.characterMap[character];\n that.checkSum += parseInt(character, 10);\n that.addPattern(pattern);\n },\n addCheckSum: function () {\n var that = this;\n that.checksum = (10 - that.checkSum % 10) % 10;\n that.addCharacter(that.checksum);\n },\n setBaseUnit: function () {\n var that = this, startStopLength = 3;\n that.baseUnit = that.width / ((that.value.length + 1) * 10 + startStopLength + that.quietZoneLength);\n },\n validate: function (value) {\n var that = this;\n if (!numberRegex.test(value)) {\n that.invalidCharacterError(value.match(/[^0-9]/)[0]);\n }\n if (inArray(value.length, that.VALID_CODE_LENGTHS) < 0) {\n throw new Error('Invalid value length. Valid lengths for the Postnet symbology are ' + that.VALID_CODE_LENGTHS.join(','));\n }\n },\n addPattern: function (pattern) {\n var that = this, y1;\n for (var i = 0; i < pattern.length; i++) {\n y1 = that.height - that.baseHeight * pattern.charAt(i);\n that.pattern.push({\n width: 1,\n y1: y1,\n y2: that.height\n });\n that.pattern.push(1);\n }\n },\n characterMap: [\n '22111',\n '11122',\n '11212',\n '11221',\n '12112',\n '12121',\n '12211',\n '21112',\n '21121',\n '21211'\n ]\n });\n encodings.ean13 = Encoding.extend({\n initValue: function (value, width, height) {\n value += '';\n if (value.length != 12 || /\\D/.test(value)) {\n throw new Error('The value of the \"EAN13\" encoding should be 12 symbols');\n }\n var that = this;\n that.pattern = [];\n that.options.height = height;\n that.baseUnit = width / (95 + that.quietZoneLength);\n that.value = value;\n that.checksum = that.calculateChecksum();\n that.leftKey = value[0];\n that.leftPart = value.substr(1, 6);\n that.rightPart = value.substr(7) + that.checksum;\n },\n addData: function () {\n var that = this;\n that.addPieces(that.characterMap.start);\n that.addSide(that.leftPart, that.leftKey);\n that.addPieces(that.characterMap.middle);\n that.addSide(that.rightPart);\n that.addPieces(that.characterMap.start);\n },\n addSide: function (leftPart, key) {\n var that = this;\n for (var i = 0; i < leftPart.length; i++) {\n if (key && parseInt(that.keyTable[key].charAt(i), 10)) {\n that.addPieces(Array.prototype.slice.call(that.characterMap.digits[leftPart.charAt(i)]).reverse(), true);\n } else {\n that.addPieces(that.characterMap.digits[leftPart.charAt(i)], true);\n }\n }\n },\n addPieces: function (arrToAdd, limitedHeight) {\n var that = this;\n for (var i = 0; i < arrToAdd.length; i++) {\n if (limitedHeight) {\n that.pattern.push({\n y1: 0,\n y2: that.options.height * 0.95,\n width: arrToAdd[i]\n });\n } else {\n that.pattern.push(arrToAdd[i]);\n }\n }\n },\n calculateChecksum: function () {\n var odd = 0, even = 0, value = this.value.split('').reverse().join('');\n for (var i = 0; i < value.length; i++) {\n if (i % 2) {\n even += parseInt(value.charAt(i), 10);\n } else {\n odd += parseInt(value.charAt(i), 10);\n }\n }\n var checksum = (10 - (3 * odd + even) % 10) % 10;\n return checksum;\n },\n keyTable: [\n '000000',\n '001011',\n '001101',\n '001110',\n '010011',\n '011001',\n '011100',\n '010101',\n '010110',\n '011010'\n ],\n characterMap: {\n digits: [\n [\n 3,\n 2,\n 1,\n 1\n ],\n [\n 2,\n 2,\n 2,\n 1\n ],\n [\n 2,\n 1,\n 2,\n 2\n ],\n [\n 1,\n 4,\n 1,\n 1\n ],\n [\n 1,\n 1,\n 3,\n 2\n ],\n [\n 1,\n 2,\n 3,\n 1\n ],\n [\n 1,\n 1,\n 1,\n 4\n ],\n [\n 1,\n 3,\n 1,\n 2\n ],\n [\n 1,\n 2,\n 1,\n 3\n ],\n [\n 3,\n 1,\n 1,\n 2\n ]\n ],\n start: [\n 1,\n 1,\n 1\n ],\n middle: [\n 1,\n 1,\n 1,\n 1,\n 1\n ]\n }\n });\n encodings.ean8 = encodings.ean13.extend({\n initValue: function (value, width, height) {\n var that = this;\n if (value.length != 7 || /\\D/.test(value)) {\n throw new Error('Invalid value provided');\n }\n that.value = value;\n that.options.height = height;\n that.checksum = that.calculateChecksum(that.value);\n that.leftPart = that.value.substr(0, 4);\n that.rightPart = that.value.substr(4) + that.checksum;\n that.pattern = [];\n that.baseUnit = width / (67 + that.quietZoneLength);\n }\n });\n var Barcode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-barcode').css('display', 'block');\n that.surfaceWrap = $('
    ').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that._setOptions(options);\n if (options && defined(options.value)) {\n that.redraw();\n }\n },\n setOptions: function (options) {\n this._setOptions(options);\n this.redraw();\n },\n redraw: function () {\n var size = this._getSize();\n this.surface.clear();\n this.surface.setSize({\n width: size.width,\n height: size.height\n });\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n _render: function () {\n var that = this, options = that.options, value = options.value, textOptions = options.text, textMargin = dataviz.getSpacing(textOptions.margin), size = that._getSize(), border = options.border || {}, encoding = that.encoding, contentBox = new Box2D(0, 0, size.width, size.height).unpad(border.width).unpad(options.padding), barHeight = contentBox.height(), result, textToDisplay, textHeight;\n var visual = new draw.Group();\n that.contentBox = contentBox;\n visual.append(that._getBackground(size));\n if (textOptions.visible) {\n textHeight = draw.util.measureText(value, { font: textOptions.font }).height;\n barHeight -= textHeight + textMargin.top + textMargin.bottom;\n }\n result = encoding.encode(value, contentBox.width(), barHeight);\n if (textOptions.visible) {\n textToDisplay = value;\n if (options.checksum && defined(encoding.checksum)) {\n textToDisplay += ' ' + encoding.checksum;\n }\n visual.append(that._getText(textToDisplay));\n }\n that.barHeight = barHeight;\n this._bandsGroup = this._getBands(result.pattern, result.baseUnit);\n visual.append(this._bandsGroup);\n return visual;\n },\n exportVisual: function () {\n return this._render();\n },\n _getSize: function () {\n var that = this, element = that.element, size = new geom.Size(DEFAULT_WIDTH, DEFAULT_HEIGHT);\n if (element.width() > 0) {\n size.width = element.width();\n }\n if (element.height() > 0) {\n size.height = element.height();\n }\n if (that.options.width) {\n size.width = that.options.width;\n }\n if (that.options.height) {\n size.height = that.options.height;\n }\n return size;\n },\n value: function (value) {\n var that = this;\n if (!defined(value)) {\n return that.options.value;\n }\n that.options.value = value + '';\n that.redraw();\n },\n _getBands: function (pattern, baseUnit) {\n var that = this, contentBox = that.contentBox, position = contentBox.x1, step, item;\n var group = new draw.Group();\n for (var i = 0; i < pattern.length; i++) {\n item = isPlainObject(pattern[i]) ? pattern[i] : {\n width: pattern[i],\n y1: 0,\n y2: that.barHeight\n };\n step = item.width * baseUnit;\n if (i % 2) {\n var rect = geom.Rect.fromPoints(new geom.Point(position, item.y1 + contentBox.y1), new geom.Point(position + step, item.y2 + contentBox.y1));\n var path = draw.Path.fromRect(rect, {\n fill: { color: that.options.color },\n stroke: null\n });\n group.append(path);\n }\n position += step;\n }\n return group;\n },\n _getBackground: function (size) {\n var that = this, options = that.options, border = options.border || {};\n var box = new Box2D(0, 0, size.width, size.height).unpad(border.width / 2);\n var path = draw.Path.fromRect(box.toRect(), {\n fill: { color: options.background },\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n }\n });\n return path;\n },\n _getText: function (value) {\n var that = this, textOptions = that.options.text, text = that._textbox = new TextBox(value, {\n font: textOptions.font,\n color: textOptions.color,\n align: 'center',\n vAlign: 'bottom',\n margin: textOptions.margin\n });\n text.reflow(that.contentBox);\n text.renderVisual();\n return text.visual;\n },\n _setOptions: function (options) {\n var that = this;\n that.type = (options.type || that.options.type).toLowerCase();\n if (that.type == 'upca') {\n that.type = 'ean13';\n options.value = '0' + options.value;\n }\n if (that.type == 'upce') {\n that.type = 'ean8';\n options.value = '0' + options.value;\n }\n if (!encodings[that.type]) {\n throw new Error('Encoding ' + that.type + 'is not supported.');\n }\n that.encoding = new encodings[that.type]();\n that.options = extend(true, that.options, options);\n },\n options: {\n name: 'Barcode',\n renderAs: 'svg',\n value: '',\n type: 'code39',\n checksum: false,\n width: 0,\n height: 0,\n color: 'black',\n background: 'white',\n text: {\n visible: true,\n font: '16px Consolas, Monaco, Sans Mono, monospace, sans-serif',\n color: 'black',\n margin: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n },\n border: {\n width: 0,\n dashType: 'solid',\n color: 'black'\n },\n padding: {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0\n }\n }\n });\n dataviz.ExportMixin.extend(Barcode.fn);\n dataviz.ui.plugin(Barcode);\n kendo.deepExtend(dataviz, {\n encodings: encodings,\n Encoding: Encoding\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.qrcode', [\n 'kendo.dataviz.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.qrcode',\n name: 'QRCode',\n category: 'dataviz',\n description: 'QRCode widget.',\n depends: [\n 'dataviz.core',\n 'drawing'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, draw = kendo.drawing, dataviz = kendo.dataviz, Widget = kendo.ui.Widget, Box2D = dataviz.Box2D, terminator = '0000', NUMERIC = 'numeric', ALPHA_NUMERIC = 'alphanumeric', BYTE = 'byte', powersOfTwo = { '1': 0 }, powersOfTwoResult = { '0': 1 }, generatorPolynomials = [\n [\n 1,\n 0\n ],\n [\n 1,\n 25,\n 0\n ]\n ], irregularAlignmentPatternsStartDistance = {\n 15: 20,\n 16: 20,\n 18: 24,\n 19: 24,\n 22: 20,\n 24: 22,\n 26: 24,\n 28: 20,\n 30: 20,\n 31: 24,\n 32: 28,\n 33: 24,\n 36: 18,\n 37: 22,\n 39: 20,\n 40: 24\n }, versionsCodewordsInformation = [\n {\n L: {\n groups: [[\n 1,\n 19\n ]],\n totalDataCodewords: 19,\n errorCodewordsPerBlock: 7\n },\n M: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 10\n },\n Q: {\n groups: [[\n 1,\n 13\n ]],\n totalDataCodewords: 13,\n errorCodewordsPerBlock: 13\n },\n H: {\n groups: [[\n 1,\n 9\n ]],\n totalDataCodewords: 9,\n errorCodewordsPerBlock: 17\n }\n },\n {\n L: {\n groups: [[\n 1,\n 34\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 10\n },\n M: {\n groups: [[\n 1,\n 28\n ]],\n totalDataCodewords: 28,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 1,\n 22\n ]],\n totalDataCodewords: 22,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [[\n 1,\n 16\n ]],\n totalDataCodewords: 16,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 1,\n 55\n ]],\n totalDataCodewords: 55,\n errorCodewordsPerBlock: 15\n },\n M: {\n groups: [[\n 1,\n 44\n ]],\n totalDataCodewords: 44,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [[\n 2,\n 17\n ]],\n totalDataCodewords: 34,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [[\n 2,\n 13\n ]],\n totalDataCodewords: 26,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 1,\n 80\n ]],\n totalDataCodewords: 80,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 2,\n 32\n ]],\n totalDataCodewords: 64,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [[\n 2,\n 24\n ]],\n totalDataCodewords: 48,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [[\n 4,\n 9\n ]],\n totalDataCodewords: 36,\n errorCodewordsPerBlock: 16\n }\n },\n {\n L: {\n groups: [[\n 1,\n 108\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [[\n 2,\n 43\n ]],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 62,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 2,\n 11\n ],\n [\n 2,\n 12\n ]\n ],\n totalDataCodewords: 46,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [[\n 2,\n 68\n ]],\n totalDataCodewords: 136,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [[\n 4,\n 27\n ]],\n totalDataCodewords: 108,\n errorCodewordsPerBlock: 16\n },\n Q: {\n groups: [[\n 4,\n 19\n ]],\n totalDataCodewords: 76,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [[\n 4,\n 15\n ]],\n totalDataCodewords: 60,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 2,\n 78\n ]],\n totalDataCodewords: 156,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [[\n 4,\n 31\n ]],\n totalDataCodewords: 124,\n errorCodewordsPerBlock: 18\n },\n Q: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 88,\n errorCodewordsPerBlock: 18\n },\n H: {\n groups: [\n [\n 4,\n 13\n ],\n [\n 1,\n 14\n ]\n ],\n totalDataCodewords: 66,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 97\n ]],\n totalDataCodewords: 194,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 2,\n 38\n ],\n [\n 2,\n 39\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 18\n ],\n [\n 2,\n 19\n ]\n ],\n totalDataCodewords: 110,\n errorCodewordsPerBlock: 22\n },\n H: {\n groups: [\n [\n 4,\n 14\n ],\n [\n 2,\n 15\n ]\n ],\n totalDataCodewords: 86,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [[\n 2,\n 116\n ]],\n totalDataCodewords: 232,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 182,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 132,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 4,\n 12\n ],\n [\n 4,\n 13\n ]\n ],\n totalDataCodewords: 100,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 68\n ],\n [\n 2,\n 69\n ]\n ],\n totalDataCodewords: 274,\n errorCodewordsPerBlock: 18\n },\n M: {\n groups: [\n [\n 4,\n 43\n ],\n [\n 1,\n 44\n ]\n ],\n totalDataCodewords: 216,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 6,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 154,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 6,\n 15\n ],\n [\n 2,\n 16\n ]\n ],\n totalDataCodewords: 122,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 81\n ]],\n totalDataCodewords: 324,\n errorCodewordsPerBlock: 20\n },\n M: {\n groups: [\n [\n 1,\n 50\n ],\n [\n 4,\n 51\n ]\n ],\n totalDataCodewords: 254,\n errorCodewordsPerBlock: 30\n },\n Q: {\n groups: [\n [\n 4,\n 22\n ],\n [\n 4,\n 23\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 3,\n 12\n ],\n [\n 8,\n 13\n ]\n ],\n totalDataCodewords: 140,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 92\n ],\n [\n 2,\n 93\n ]\n ],\n totalDataCodewords: 370,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 6,\n 36\n ],\n [\n 2,\n 37\n ]\n ],\n totalDataCodewords: 290,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 4,\n 20\n ],\n [\n 6,\n 21\n ]\n ],\n totalDataCodewords: 206,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 7,\n 14\n ],\n [\n 4,\n 15\n ]\n ],\n totalDataCodewords: 158,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [[\n 4,\n 107\n ]],\n totalDataCodewords: 428,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 37\n ],\n [\n 1,\n 38\n ]\n ],\n totalDataCodewords: 334,\n errorCodewordsPerBlock: 22\n },\n Q: {\n groups: [\n [\n 8,\n 20\n ],\n [\n 4,\n 21\n ]\n ],\n totalDataCodewords: 244,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 12,\n 11\n ],\n [\n 4,\n 12\n ]\n ],\n totalDataCodewords: 180,\n errorCodewordsPerBlock: 22\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 461,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 40\n ],\n [\n 5,\n 41\n ]\n ],\n totalDataCodewords: 365,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 11,\n 16\n ],\n [\n 5,\n 17\n ]\n ],\n totalDataCodewords: 261,\n errorCodewordsPerBlock: 20\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 5,\n 13\n ]\n ],\n totalDataCodewords: 197,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 87\n ],\n [\n 1,\n 88\n ]\n ],\n totalDataCodewords: 523,\n errorCodewordsPerBlock: 22\n },\n M: {\n groups: [\n [\n 5,\n 41\n ],\n [\n 5,\n 42\n ]\n ],\n totalDataCodewords: 415,\n errorCodewordsPerBlock: 24\n },\n Q: {\n groups: [\n [\n 5,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 295,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 12\n ],\n [\n 7,\n 13\n ]\n ],\n totalDataCodewords: 223,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 98\n ],\n [\n 1,\n 99\n ]\n ],\n totalDataCodewords: 589,\n errorCodewordsPerBlock: 24\n },\n M: {\n groups: [\n [\n 7,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 453,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 19\n ],\n [\n 2,\n 20\n ]\n ],\n totalDataCodewords: 325,\n errorCodewordsPerBlock: 24\n },\n H: {\n groups: [\n [\n 3,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 253,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 1,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 647,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 1,\n 47\n ]\n ],\n totalDataCodewords: 507,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 22\n ],\n [\n 15,\n 23\n ]\n ],\n totalDataCodewords: 367,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 17,\n 15\n ]\n ],\n totalDataCodewords: 283,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 120\n ],\n [\n 1,\n 121\n ]\n ],\n totalDataCodewords: 721,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 9,\n 43\n ],\n [\n 4,\n 44\n ]\n ],\n totalDataCodewords: 563,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 1,\n 23\n ]\n ],\n totalDataCodewords: 397,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 2,\n 14\n ],\n [\n 19,\n 15\n ]\n ],\n totalDataCodewords: 313,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 113\n ],\n [\n 4,\n 114\n ]\n ],\n totalDataCodewords: 795,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 44\n ],\n [\n 11,\n 45\n ]\n ],\n totalDataCodewords: 627,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 21\n ],\n [\n 4,\n 22\n ]\n ],\n totalDataCodewords: 445,\n errorCodewordsPerBlock: 26\n },\n H: {\n groups: [\n [\n 9,\n 13\n ],\n [\n 16,\n 14\n ]\n ],\n totalDataCodewords: 341,\n errorCodewordsPerBlock: 26\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 107\n ],\n [\n 5,\n 108\n ]\n ],\n totalDataCodewords: 861,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 3,\n 41\n ],\n [\n 13,\n 42\n ]\n ],\n totalDataCodewords: 669,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 5,\n 25\n ]\n ],\n totalDataCodewords: 485,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 15,\n 15\n ],\n [\n 10,\n 16\n ]\n ],\n totalDataCodewords: 385,\n errorCodewordsPerBlock: 28\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 116\n ],\n [\n 4,\n 117\n ]\n ],\n totalDataCodewords: 932,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 42\n ]],\n totalDataCodewords: 714,\n errorCodewordsPerBlock: 26\n },\n Q: {\n groups: [\n [\n 17,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 512,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 19,\n 16\n ],\n [\n 6,\n 17\n ]\n ],\n totalDataCodewords: 406,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 2,\n 111\n ],\n [\n 7,\n 112\n ]\n ],\n totalDataCodewords: 1006,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [[\n 17,\n 46\n ]],\n totalDataCodewords: 782,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 568,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [[\n 34,\n 13\n ]],\n totalDataCodewords: 442,\n errorCodewordsPerBlock: 24\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 121\n ],\n [\n 5,\n 122\n ]\n ],\n totalDataCodewords: 1094,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 4,\n 47\n ],\n [\n 14,\n 48\n ]\n ],\n totalDataCodewords: 860,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 614,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 16,\n 15\n ],\n [\n 14,\n 16\n ]\n ],\n totalDataCodewords: 464,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 1174,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 45\n ],\n [\n 14,\n 46\n ]\n ],\n totalDataCodewords: 914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 11,\n 24\n ],\n [\n 16,\n 25\n ]\n ],\n totalDataCodewords: 664,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 30,\n 16\n ],\n [\n 2,\n 17\n ]\n ],\n totalDataCodewords: 514,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 106\n ],\n [\n 4,\n 107\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 26\n },\n M: {\n groups: [\n [\n 8,\n 47\n ],\n [\n 13,\n 48\n ]\n ],\n totalDataCodewords: 1000,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 7,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 718,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 13,\n 16\n ]\n ],\n totalDataCodewords: 538,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 10,\n 114\n ],\n [\n 2,\n 115\n ]\n ],\n totalDataCodewords: 1370,\n errorCodewordsPerBlock: 28\n },\n M: {\n groups: [\n [\n 19,\n 46\n ],\n [\n 4,\n 47\n ]\n ],\n totalDataCodewords: 1062,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 28,\n 22\n ],\n [\n 6,\n 23\n ]\n ],\n totalDataCodewords: 754,\n errorCodewordsPerBlock: 28\n },\n H: {\n groups: [\n [\n 33,\n 16\n ],\n [\n 4,\n 17\n ]\n ],\n totalDataCodewords: 596,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 8,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 1468,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 22,\n 45\n ],\n [\n 3,\n 46\n ]\n ],\n totalDataCodewords: 1128,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 8,\n 23\n ],\n [\n 26,\n 24\n ]\n ],\n totalDataCodewords: 808,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 12,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 628,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 3,\n 117\n ],\n [\n 10,\n 118\n ]\n ],\n totalDataCodewords: 1531,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 3,\n 45\n ],\n [\n 23,\n 46\n ]\n ],\n totalDataCodewords: 1193,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 4,\n 24\n ],\n [\n 31,\n 25\n ]\n ],\n totalDataCodewords: 871,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 31,\n 16\n ]\n ],\n totalDataCodewords: 661,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 7,\n 116\n ],\n [\n 7,\n 117\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 21,\n 45\n ],\n [\n 7,\n 46\n ]\n ],\n totalDataCodewords: 1267,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 1,\n 23\n ],\n [\n 37,\n 24\n ]\n ],\n totalDataCodewords: 911,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 26,\n 16\n ]\n ],\n totalDataCodewords: 701,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 5,\n 115\n ],\n [\n 10,\n 116\n ]\n ],\n totalDataCodewords: 1735,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 19,\n 47\n ],\n [\n 10,\n 48\n ]\n ],\n totalDataCodewords: 1373,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 15,\n 24\n ],\n [\n 25,\n 25\n ]\n ],\n totalDataCodewords: 985,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 25,\n 16\n ]\n ],\n totalDataCodewords: 745,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 3,\n 116\n ]\n ],\n totalDataCodewords: 1843,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 2,\n 46\n ],\n [\n 29,\n 47\n ]\n ],\n totalDataCodewords: 1455,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 42,\n 24\n ],\n [\n 1,\n 25\n ]\n ],\n totalDataCodewords: 1033,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 23,\n 15\n ],\n [\n 28,\n 16\n ]\n ],\n totalDataCodewords: 793,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [[\n 17,\n 115\n ]],\n totalDataCodewords: 1955,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 10,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1541,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 10,\n 24\n ],\n [\n 35,\n 25\n ]\n ],\n totalDataCodewords: 1115,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 19,\n 15\n ],\n [\n 35,\n 16\n ]\n ],\n totalDataCodewords: 845,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 115\n ],\n [\n 1,\n 116\n ]\n ],\n totalDataCodewords: 2071,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 21,\n 47\n ]\n ],\n totalDataCodewords: 1631,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 29,\n 24\n ],\n [\n 19,\n 25\n ]\n ],\n totalDataCodewords: 1171,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 11,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 901,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 13,\n 115\n ],\n [\n 6,\n 116\n ]\n ],\n totalDataCodewords: 2191,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 14,\n 46\n ],\n [\n 23,\n 47\n ]\n ],\n totalDataCodewords: 1725,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 44,\n 24\n ],\n [\n 7,\n 25\n ]\n ],\n totalDataCodewords: 1231,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 59,\n 16\n ],\n [\n 1,\n 17\n ]\n ],\n totalDataCodewords: 961,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 12,\n 121\n ],\n [\n 7,\n 122\n ]\n ],\n totalDataCodewords: 2306,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 12,\n 47\n ],\n [\n 26,\n 48\n ]\n ],\n totalDataCodewords: 1812,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 39,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1286,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 22,\n 15\n ],\n [\n 41,\n 16\n ]\n ],\n totalDataCodewords: 986,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 6,\n 121\n ],\n [\n 14,\n 122\n ]\n ],\n totalDataCodewords: 2434,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 6,\n 47\n ],\n [\n 34,\n 48\n ]\n ],\n totalDataCodewords: 1914,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 46,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1354,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 2,\n 15\n ],\n [\n 64,\n 16\n ]\n ],\n totalDataCodewords: 1054,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 17,\n 122\n ],\n [\n 4,\n 123\n ]\n ],\n totalDataCodewords: 2566,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 29,\n 46\n ],\n [\n 14,\n 47\n ]\n ],\n totalDataCodewords: 1992,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 49,\n 24\n ],\n [\n 10,\n 25\n ]\n ],\n totalDataCodewords: 1426,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 24,\n 15\n ],\n [\n 46,\n 16\n ]\n ],\n totalDataCodewords: 1096,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 4,\n 122\n ],\n [\n 18,\n 123\n ]\n ],\n totalDataCodewords: 2702,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 13,\n 46\n ],\n [\n 32,\n 47\n ]\n ],\n totalDataCodewords: 2102,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 48,\n 24\n ],\n [\n 14,\n 25\n ]\n ],\n totalDataCodewords: 1502,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 42,\n 15\n ],\n [\n 32,\n 16\n ]\n ],\n totalDataCodewords: 1142,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 20,\n 117\n ],\n [\n 4,\n 118\n ]\n ],\n totalDataCodewords: 2812,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 40,\n 47\n ],\n [\n 7,\n 48\n ]\n ],\n totalDataCodewords: 2216,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 43,\n 24\n ],\n [\n 22,\n 25\n ]\n ],\n totalDataCodewords: 1582,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 10,\n 15\n ],\n [\n 67,\n 16\n ]\n ],\n totalDataCodewords: 1222,\n errorCodewordsPerBlock: 30\n }\n },\n {\n L: {\n groups: [\n [\n 19,\n 118\n ],\n [\n 6,\n 119\n ]\n ],\n totalDataCodewords: 2956,\n errorCodewordsPerBlock: 30\n },\n M: {\n groups: [\n [\n 18,\n 47\n ],\n [\n 31,\n 48\n ]\n ],\n totalDataCodewords: 2334,\n errorCodewordsPerBlock: 28\n },\n Q: {\n groups: [\n [\n 34,\n 24\n ],\n [\n 34,\n 25\n ]\n ],\n totalDataCodewords: 1666,\n errorCodewordsPerBlock: 30\n },\n H: {\n groups: [\n [\n 20,\n 15\n ],\n [\n 61,\n 16\n ]\n ],\n totalDataCodewords: 1276,\n errorCodewordsPerBlock: 30\n }\n }\n ], finderPattern = [\n 1,\n 0,\n 1,\n 1,\n 1\n ], alignmentPattern = [\n 1,\n 0,\n 1\n ], errorCorrectionPatterns = {\n L: '01',\n M: '00',\n Q: '11',\n H: '10'\n }, formatMaskPattern = '101010000010010', formatGeneratorPolynomial = '10100110111', versionGeneratorPolynomial = '1111100100101', paddingCodewords = [\n '11101100',\n '00010001'\n ], finderPatternValue = 93, maskPatternConditions = [\n function (row, column) {\n return (row + column) % 2 === 0;\n },\n function (row) {\n return row % 2 === 0;\n },\n function (row, column) {\n return column % 3 === 0;\n },\n function (row, column) {\n return (row + column) % 3 === 0;\n },\n function (row, column) {\n return (Math.floor(row / 2) + Math.floor(column / 3)) % 2 === 0;\n },\n function (row, column) {\n return row * column % 2 + row * column % 3 === 0;\n },\n function (row, column) {\n return (row * column % 2 + row * column % 3) % 2 === 0;\n },\n function (row, column) {\n return ((row + column) % 2 + row * column % 3) % 2 === 0;\n }\n ], numberRegex = /^\\d+/, alphaPattern = 'A-Z0-9 $%*+./:-', alphaExclusiveSet = 'A-Z $%*+./:-', alphaRegex = new RegExp('^[' + alphaExclusiveSet + ']+'), alphaNumericRegex = new RegExp('^[' + alphaPattern + ']+'), byteRegex = new RegExp('^[^' + alphaPattern + ']+'), initMinNumericBeforeAlpha = 8, initMinNumericBeforeByte = 5, initMinAlphaBeforeByte = 8, minNumericBeforeAlpha = 17, minNumericBeforeByte = 9, minAlphaBeforeByte = 16, round = Math.round;\n function toDecimal(value) {\n return parseInt(value, 2);\n }\n function toBitsString(value, length) {\n var result = Number(value).toString(2);\n if (result.length < length) {\n result = new Array(length - result.length + 1).join(0) + result;\n }\n return result;\n }\n function splitInto(str, n) {\n var result = [], idx = 0;\n while (idx < str.length) {\n result.push(str.substring(idx, idx + n));\n idx += n;\n }\n return result;\n }\n var QRDataMode = kendo.Class.extend({\n getVersionIndex: function (version) {\n if (version < 10) {\n return 0;\n } else if (version > 26) {\n return 2;\n }\n return 1;\n },\n getBitsCharacterCount: function (version) {\n var mode = this;\n return mode.bitsInCharacterCount[mode.getVersionIndex(version || 40)];\n },\n getModeCountString: function (length, version) {\n var mode = this;\n return mode.modeIndicator + toBitsString(length, mode.getBitsCharacterCount(version));\n },\n encode: function () {\n },\n getStringBitsLength: function () {\n },\n getValue: function () {\n },\n modeIndicator: '',\n bitsInCharacterCount: []\n });\n var modes = {};\n modes[NUMERIC] = QRDataMode.extend({\n bitsInCharacterCount: [\n 10,\n 12,\n 14\n ],\n modeIndicator: '0001',\n getValue: function (character) {\n return parseInt(character, 10);\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 3), result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < parts.length - 1; i++) {\n result += toBitsString(parts[i], 10);\n }\n return result + toBitsString(parts[i], 1 + 3 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n var mod3 = inputLength % 3;\n return 4 + this.getBitsCharacterCount(version) + 10 * Math.floor(inputLength / 3) + 3 * mod3 + (mod3 === 0 ? 0 : 1);\n }\n });\n modes[ALPHA_NUMERIC] = QRDataMode.extend({\n characters: {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n 'A': 10,\n 'B': 11,\n 'C': 12,\n 'D': 13,\n 'E': 14,\n 'F': 15,\n 'G': 16,\n 'H': 17,\n 'I': 18,\n 'J': 19,\n 'K': 20,\n 'L': 21,\n 'M': 22,\n 'N': 23,\n 'O': 24,\n 'P': 25,\n 'Q': 26,\n 'R': 27,\n 'S': 28,\n 'T': 29,\n 'U': 30,\n 'V': 31,\n 'W': 32,\n 'X': 33,\n 'Y': 34,\n 'Z': 35,\n ' ': 36,\n '$': 37,\n '%': 38,\n '*': 39,\n '+': 40,\n '-': 41,\n '.': 42,\n '/': 43,\n ':': 44\n },\n bitsInCharacterCount: [\n 9,\n 11,\n 13\n ],\n modeIndicator: '0010',\n getValue: function (character) {\n return this.characters[character];\n },\n encode: function (str, version) {\n var mode = this, parts = splitInto(str, 2), result = mode.getModeCountString(str.length, version), value;\n for (var i = 0; i < parts.length - 1; i++) {\n value = 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1));\n result += toBitsString(value, 11);\n }\n value = parts[i].length == 2 ? 45 * mode.getValue(parts[i].charAt(0)) + mode.getValue(parts[i].charAt(1)) : mode.getValue(parts[i].charAt(0));\n return result + toBitsString(value, 1 + 5 * parts[i].length);\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 11 * Math.floor(inputLength / 2) + 6 * (inputLength % 2);\n }\n });\n modes[BYTE] = QRDataMode.extend({\n bitsInCharacterCount: [\n 8,\n 16,\n 16\n ],\n modeIndicator: '0100',\n getValue: function (character) {\n var code = character.charCodeAt(0);\n if (code <= 127 || 160 <= code && code <= 255) {\n return code;\n } else {\n throw new Error('Unsupported character: ' + character);\n }\n },\n encode: function (str, version) {\n var mode = this, result = mode.getModeCountString(str.length, version);\n for (var i = 0; i < str.length; i++) {\n result += toBitsString(mode.getValue(str.charAt(i)), 8);\n }\n return result;\n },\n getStringBitsLength: function (inputLength, version) {\n return 4 + this.getBitsCharacterCount(version) + 8 * inputLength;\n }\n });\n var modeInstances = {};\n for (var mode in modes) {\n modeInstances[mode] = new modes[mode]();\n }\n var FreeCellVisitor = function (matrix) {\n var that = this, row = matrix.length - 1, column = matrix.length - 1, startColumn = column, dir = -1, c = 0;\n that.move = function () {\n row += dir * c;\n c ^= 1;\n column = startColumn - c;\n };\n that.getNextCell = function () {\n while (matrix[row][column] !== undefined) {\n that.move();\n if (row < 0 || row >= matrix.length) {\n dir = -dir;\n startColumn -= startColumn != 8 ? 2 : 3;\n column = startColumn;\n row = dir < 0 ? matrix.length - 1 : 0;\n }\n }\n return {\n row: row,\n column: column\n };\n };\n that.getNextRemainderCell = function () {\n that.move();\n if (matrix[row][column] === undefined) {\n return {\n row: row,\n column: column\n };\n }\n };\n };\n function fillFunctionCell(matrices, bit, x, y) {\n for (var i = 0; i < matrices.length; i++) {\n matrices[i][x][y] = bit;\n }\n }\n function fillDataCell(matrices, bit, x, y) {\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i][x][y] = maskPatternConditions[i](x, y) ? bit ^ 1 : parseInt(bit, 10);\n }\n }\n var fillData = function (matrices, blocks) {\n var cellVisitor = new FreeCellVisitor(matrices[0]), block, codewordIdx, cell;\n for (var blockIdx = 0; blockIdx < blocks.length; blockIdx++) {\n block = blocks[blockIdx];\n codewordIdx = 0;\n while (block.length > 0) {\n for (var i = 0; i < block.length; i++) {\n for (var j = 0; j < 8; j++) {\n cell = cellVisitor.getNextCell();\n fillDataCell(matrices, block[i][codewordIdx].charAt(j), cell.row, cell.column);\n }\n }\n codewordIdx++;\n while (block[0] && codewordIdx == block[0].length) {\n block.splice(0, 1);\n }\n }\n }\n while (cell = cellVisitor.getNextRemainderCell()) {\n fillDataCell(matrices, 0, cell.row, cell.column);\n }\n };\n var padDataString = function (dataString, totalDataCodewords) {\n var dataBitsCount = totalDataCodewords * 8, terminatorIndex = 0, paddingCodewordIndex = 0;\n while (dataString.length < dataBitsCount && terminatorIndex < terminator.length) {\n dataString += terminator.charAt(terminatorIndex++);\n }\n if (dataString.length % 8 !== 0) {\n dataString += new Array(9 - dataString.length % 8).join('0');\n }\n while (dataString.length < dataBitsCount) {\n dataString += paddingCodewords[paddingCodewordIndex];\n paddingCodewordIndex ^= 1;\n }\n return dataString;\n };\n function generatePowersOfTwo() {\n var result;\n for (var power = 1; power < 255; power++) {\n result = powersOfTwoResult[power - 1] * 2;\n if (result > 255) {\n result = result ^ 285;\n }\n powersOfTwoResult[power] = result;\n powersOfTwo[result] = power;\n }\n result = powersOfTwoResult[power - 1] * 2 ^ 285;\n powersOfTwoResult[power] = result;\n powersOfTwoResult[-1] = 0;\n }\n var xorPolynomials = function (x, y) {\n var result = [], idx = x.length - 2;\n for (var i = idx; i >= 0; i--) {\n result[i] = x[i] ^ y[i];\n }\n return result;\n };\n var multiplyPolynomials = function (x, y) {\n var result = [];\n for (var i = 0; i < x.length; i++) {\n for (var j = 0; j < y.length; j++) {\n if (result[i + j] === undefined) {\n result[i + j] = (x[i] + (y[j] >= 0 ? y[j] : 0)) % 255;\n } else {\n result[i + j] = powersOfTwo[powersOfTwoResult[result[i + j]] ^ powersOfTwoResult[(x[i] + y[j]) % 255]];\n }\n }\n }\n return result;\n };\n function generateGeneratorPolynomials() {\n var maxErrorCorrectionCodeWordsCount = 68;\n for (var idx = 2; idx <= maxErrorCorrectionCodeWordsCount; idx++) {\n var firstPolynomial = generatorPolynomials[idx - 1], secondPolynomial = [\n idx,\n 0\n ];\n generatorPolynomials[idx] = multiplyPolynomials(firstPolynomial, secondPolynomial);\n }\n }\n generatePowersOfTwo();\n generateGeneratorPolynomials();\n function multiplyByConstant(polynomial, power) {\n var result = [], idx = polynomial.length - 1;\n do {\n result[idx] = powersOfTwoResult[(polynomial[idx] + power) % 255];\n idx--;\n } while (polynomial[idx] !== undefined);\n return result;\n }\n var generateErrorCodewords = function (data, errorCodewordsCount) {\n var generator = generatorPolynomials[errorCodewordsCount - 1], result = new Array(errorCodewordsCount).concat(data), generatorPolynomial = new Array(result.length - generator.length).concat(generator), steps = data.length, errorCodewords = [], divisor, idx;\n for (idx = 0; idx < steps; idx++) {\n divisor = multiplyByConstant(generatorPolynomial, powersOfTwo[result[result.length - 1]]);\n generatorPolynomial.splice(0, 1);\n result = xorPolynomials(divisor, result);\n }\n for (idx = result.length - 1; idx >= 0; idx--) {\n errorCodewords[errorCodewordsCount - 1 - idx] = toBitsString(result[idx], 8);\n }\n return errorCodewords;\n };\n var getBlocks = function (dataStream, versionCodewordsInformation) {\n var codewordStart = 0, dataBlocks = [], errorBlocks = [], dataBlock, versionGroups = versionCodewordsInformation.groups, blockCodewordsCount, groupBlocksCount, messagePolynomial, codeword;\n for (var groupIdx = 0; groupIdx < versionGroups.length; groupIdx++) {\n groupBlocksCount = versionGroups[groupIdx][0];\n for (var blockIdx = 0; blockIdx < groupBlocksCount; blockIdx++) {\n blockCodewordsCount = versionGroups[groupIdx][1];\n dataBlock = [];\n messagePolynomial = [];\n for (var codewordIdx = 1; codewordIdx <= blockCodewordsCount; codewordIdx++) {\n codeword = dataStream.substring(codewordStart, codewordStart + 8);\n dataBlock.push(codeword);\n messagePolynomial[blockCodewordsCount - codewordIdx] = toDecimal(codeword);\n codewordStart += 8;\n }\n dataBlocks.push(dataBlock);\n errorBlocks.push(generateErrorCodewords(messagePolynomial, versionCodewordsInformation.errorCodewordsPerBlock));\n }\n }\n return [\n dataBlocks,\n errorBlocks\n ];\n };\n var chooseMode = function (str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode) {\n var numeric = numberRegex.exec(str), numericMatch = numeric ? numeric[0] : '', alpha = alphaRegex.exec(str), alphaMatch = alpha ? alpha[0] : '', alphaNumeric = alphaNumericRegex.exec(str), alphaNumericMatch = alphaNumeric ? alphaNumeric[0] : '', mode, modeString;\n if (numericMatch && (numericMatch.length >= minNumericBeforeAlpha || str.length == numericMatch.length || numericMatch.length >= minNumericBeforeByte && !alphaNumericRegex.test(str.charAt(numericMatch.length)))) {\n mode = NUMERIC;\n modeString = numericMatch;\n } else if (alphaNumericMatch && (str.length == alphaNumericMatch.length || alphaNumericMatch.length >= minAlphaBeforeByte || previousMode == ALPHA_NUMERIC)) {\n mode = ALPHA_NUMERIC;\n modeString = numericMatch || alphaMatch;\n } else {\n mode = BYTE;\n if (alphaNumericMatch) {\n modeString = alphaNumericMatch + byteRegex.exec(str.substring(alphaNumericMatch.length))[0];\n } else {\n modeString = byteRegex.exec(str)[0];\n }\n }\n return {\n mode: mode,\n modeString: modeString\n };\n };\n var getModes = function (str) {\n var modes = [], previousMode, idx = 0;\n modes.push(chooseMode(str, initMinNumericBeforeAlpha, initMinNumericBeforeByte, initMinAlphaBeforeByte, previousMode));\n previousMode = modes[0].mode;\n str = str.substr(modes[0].modeString.length);\n while (str.length > 0) {\n var nextMode = chooseMode(str, minNumericBeforeAlpha, minNumericBeforeByte, minAlphaBeforeByte, previousMode);\n if (nextMode.mode != previousMode) {\n previousMode = nextMode.mode;\n modes.push(nextMode);\n idx++;\n } else {\n modes[idx].modeString += nextMode.modeString;\n }\n str = str.substr(nextMode.modeString.length);\n }\n return modes;\n };\n var getDataCodewordsCount = function (modes) {\n var length = 0, mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n length += mode.getStringBitsLength(modes[i].modeString.length);\n }\n return Math.ceil(length / 8);\n };\n var getVersion = function (dataCodewordsCount, errorCorrectionLevel) {\n var x = 0, y = versionsCodewordsInformation.length - 1, version = Math.floor(versionsCodewordsInformation.length / 2);\n do {\n if (dataCodewordsCount < versionsCodewordsInformation[version][errorCorrectionLevel].totalDataCodewords) {\n y = version;\n } else {\n x = version;\n }\n version = x + Math.floor((y - x) / 2);\n } while (y - x > 1);\n if (dataCodewordsCount <= versionsCodewordsInformation[x][errorCorrectionLevel].totalDataCodewords) {\n return version + 1;\n }\n return y + 1;\n };\n var getDataString = function (modes, version) {\n var dataString = '', mode;\n for (var i = 0; i < modes.length; i++) {\n mode = modeInstances[modes[i].mode];\n dataString += mode.encode(modes[i].modeString, version);\n }\n return dataString;\n };\n var encodeFormatInformation = function (format) {\n var formatNumber = toDecimal(format), encodedString, result = '';\n if (formatNumber === 0) {\n return '101010000010010';\n } else {\n encodedString = encodeBCH(toDecimal(format), formatGeneratorPolynomial, 15);\n }\n for (var i = 0; i < encodedString.length; i++) {\n result += encodedString.charAt(i) ^ formatMaskPattern.charAt(i);\n }\n return result;\n };\n var encodeBCH = function (value, generatorPolynomial, codeLength) {\n var generatorNumber = toDecimal(generatorPolynomial), polynomialLength = generatorPolynomial.length - 1, valueNumber = value << polynomialLength, length = codeLength - polynomialLength, valueString = toBitsString(value, length), result = dividePolynomials(valueNumber, generatorNumber);\n result = valueString + toBitsString(result, polynomialLength);\n return result;\n };\n var dividePolynomials = function (numberX, numberY) {\n var yLength = numberY.toString(2).length, xLength = numberX.toString(2).length;\n do {\n numberX ^= numberY << xLength - yLength;\n xLength = numberX.toString(2).length;\n } while (xLength >= yLength);\n return numberX;\n };\n function getNumberAt(str, idx) {\n return parseInt(str.charAt(idx), 10);\n }\n var initMatrices = function (version) {\n var matrices = [], modules = 17 + 4 * version;\n for (var i = 0; i < maskPatternConditions.length; i++) {\n matrices[i] = new Array(modules);\n for (var j = 0; j < modules; j++) {\n matrices[i][j] = new Array(modules);\n }\n }\n return matrices;\n };\n var addFormatInformation = function (matrices, formatString) {\n var matrix = matrices[0], x, y, idx = 0, length = formatString.length;\n for (x = 0, y = 8; x <= 8; x++) {\n if (x !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n for (x = 8, y = 7; y >= 0; y--) {\n if (y !== 6) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n }\n idx = 0;\n for (y = matrix.length - 1, x = 8; y >= matrix.length - 8; y--) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n fillFunctionCell(matrices, 1, matrix.length - 8, 8);\n for (x = matrix.length - 7, y = 8; x < matrix.length; x++) {\n fillFunctionCell(matrices, getNumberAt(formatString, length - 1 - idx++), x, y);\n }\n };\n var encodeVersionInformation = function (version) {\n return encodeBCH(version, versionGeneratorPolynomial, 18);\n };\n var addVersionInformation = function (matrices, dataString) {\n var matrix = matrices[0], modules = matrix.length, x1 = 0, y1 = modules - 11, x2 = modules - 11, y2 = 0, quotient, mod, value;\n for (var idx = 0; idx < dataString.length; idx++) {\n quotient = Math.floor(idx / 3);\n mod = idx % 3;\n value = getNumberAt(dataString, dataString.length - idx - 1);\n fillFunctionCell(matrices, value, x1 + quotient, y1 + mod);\n fillFunctionCell(matrices, value, x2 + mod, y2 + quotient);\n }\n };\n var addCentricPattern = function (matrices, pattern, x, y) {\n var size = pattern.length + 2, length = pattern.length + 1, value;\n for (var i = 0; i < pattern.length; i++) {\n for (var j = i; j < size - i; j++) {\n value = pattern[i];\n fillFunctionCell(matrices, value, x + j, y + i);\n fillFunctionCell(matrices, value, x + i, y + j);\n fillFunctionCell(matrices, value, x + length - j, y + length - i);\n fillFunctionCell(matrices, value, x + length - i, y + length - j);\n }\n }\n };\n var addFinderSeparator = function (matrices, direction, x, y) {\n var nextX = x, nextY = y, matrix = matrices[0];\n do {\n fillFunctionCell(matrices, 0, nextX, y);\n fillFunctionCell(matrices, 0, x, nextY);\n nextX += direction[0];\n nextY += direction[1];\n } while (nextX >= 0 && nextX < matrix.length);\n };\n var addFinderPatterns = function (matrices) {\n var modules = matrices[0].length;\n addCentricPattern(matrices, finderPattern, 0, 0);\n addFinderSeparator(matrices, [\n -1,\n -1\n ], 7, 7);\n addCentricPattern(matrices, finderPattern, modules - 7, 0);\n addFinderSeparator(matrices, [\n 1,\n -1\n ], modules - 8, 7);\n addCentricPattern(matrices, finderPattern, 0, modules - 7);\n addFinderSeparator(matrices, [\n -1,\n 1\n ], 7, modules - 8);\n };\n var addAlignmentPatterns = function (matrices, version) {\n if (version < 2) {\n return;\n }\n var matrix = matrices[0], modules = matrix.length, pointsCount = Math.floor(version / 7), points = [6], startDistance, distance, idx = 0;\n if (startDistance = irregularAlignmentPatternsStartDistance[version]) {\n distance = (modules - 13 - startDistance) / pointsCount;\n } else {\n startDistance = distance = (modules - 13) / (pointsCount + 1);\n }\n points.push(points[idx++] + startDistance);\n while (points[idx] + distance < modules) {\n points.push(points[idx++] + distance);\n }\n for (var i = 0; i < points.length; i++) {\n for (var j = 0; j < points.length; j++) {\n if (matrix[points[i]][points[j]] === undefined) {\n addCentricPattern(matrices, alignmentPattern, points[i] - 2, points[j] - 2);\n }\n }\n }\n };\n var addTimingFunctions = function (matrices) {\n var row = 6, column = 6, value = 1, modules = matrices[0].length;\n for (var i = 8; i < modules - 8; i++) {\n fillFunctionCell(matrices, value, row, i);\n fillFunctionCell(matrices, value, i, column);\n value ^= 1;\n }\n };\n var scoreMaskMatrixes = function (matrices) {\n var scores = [], previousBits = [], darkModules = [], patterns = [], adjacentSameBits = [], matrix, i, row = 0, column = 1, modules = matrices[0].length;\n for (i = 0; i < matrices.length; i++) {\n scores[i] = 0;\n darkModules[i] = 0;\n adjacentSameBits[i] = [\n 0,\n 0\n ];\n patterns[i] = [\n 0,\n 0\n ];\n previousBits[i] = [];\n }\n for (i = 0; i < modules; i++) {\n for (var j = 0; j < modules; j++) {\n for (var k = 0; k < matrices.length; k++) {\n matrix = matrices[k];\n darkModules[k] += parseInt(matrix[i][j], 10);\n if (previousBits[k][row] === matrix[i][j] && i + 1 < modules && j - 1 >= 0 && matrix[i + 1][j] == previousBits[k][row] && matrix[i + 1][j - 1] == previousBits[k][row]) {\n scores[k] += 3;\n }\n scoreFinderPatternOccurance(k, patterns, scores, row, matrix[i][j]);\n scoreFinderPatternOccurance(k, patterns, scores, column, matrix[j][i]);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[i][j], adjacentSameBits, row);\n scoreAdjacentSameBits(k, scores, previousBits, matrix[j][i], adjacentSameBits, column);\n }\n }\n }\n var total = modules * modules, minIdx, min = Number.MAX_VALUE;\n for (i = 0; i < scores.length; i++) {\n scores[i] += calculateDarkModulesRatioScore(darkModules[i], total);\n if (scores[i] < min) {\n min = scores[i];\n minIdx = i;\n }\n }\n return minIdx;\n };\n function scoreFinderPatternOccurance(idx, patterns, scores, rowColumn, bit) {\n patterns[idx][rowColumn] = (patterns[idx][rowColumn] << 1 ^ bit) % 128;\n if (patterns[idx][rowColumn] == finderPatternValue) {\n scores[idx] += 40;\n }\n }\n function scoreAdjacentSameBits(idx, scores, previousBits, bit, adjacentBits, rowColumn) {\n if (previousBits[idx][rowColumn] == bit) {\n adjacentBits[idx][rowColumn]++;\n } else {\n previousBits[idx][rowColumn] = bit;\n if (adjacentBits[idx][rowColumn] >= 5) {\n scores[idx] += 3 + adjacentBits[idx][rowColumn] - 5;\n }\n adjacentBits[idx][rowColumn] = 1;\n }\n }\n function calculateDarkModulesRatioScore(darkModules, total) {\n var percent = Math.floor(darkModules / total * 100), mod5 = percent % 5, previous = Math.abs(percent - mod5 - 50), next = Math.abs(percent + 5 - mod5 - 50), score = 10 * Math.min(previous / 5, next / 5);\n return score;\n }\n var EncodingResult = function (dataString, version) {\n this.dataString = dataString;\n this.version = version;\n };\n var IsoEncoder = function () {\n this.getEncodingResult = function (inputString, errorCorrectionLevel) {\n var modes = getModes(inputString), dataCodewordsCount = getDataCodewordsCount(modes), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = getDataString(modes, version);\n return new EncodingResult(dataString, version);\n };\n };\n var UTF8Encoder = function () {\n this.mode = modeInstances[this.encodingMode];\n };\n UTF8Encoder.fn = UTF8Encoder.prototype = {\n encodingMode: BYTE,\n utfBOM: '111011111011101110111111',\n initialModeCountStringLength: 20,\n getEncodingResult: function (inputString, errorCorrectionLevel) {\n var that = this, data = that.encode(inputString), dataCodewordsCount = that.getDataCodewordsCount(data), version = getVersion(dataCodewordsCount, errorCorrectionLevel), dataString = that.mode.getModeCountString(data.length / 8, version) + data;\n return new EncodingResult(dataString, version);\n },\n getDataCodewordsCount: function (data) {\n var that = this, dataLength = data.length, dataCodewordsCount = Math.ceil((that.initialModeCountStringLength + dataLength) / 8);\n return dataCodewordsCount;\n },\n encode: function (str) {\n var that = this, result = that.utfBOM;\n for (var i = 0; i < str.length; i++) {\n result += that.encodeCharacter(str.charCodeAt(i));\n }\n return result;\n },\n encodeCharacter: function (code) {\n var bytesCount = this.getBytesCount(code), bc = bytesCount - 1, result = '';\n if (bytesCount == 1) {\n result = toBitsString(code, 8);\n } else {\n var significantOnes = 8 - bytesCount;\n for (var i = 0; i < bc; i++) {\n result = toBitsString(code >> i * 6 & 63 | 128, 8) + result;\n }\n result = (code >> bc * 6 | 255 >> significantOnes << significantOnes).toString(2) + result;\n }\n return result;\n },\n getBytesCount: function (code) {\n var ranges = this.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (code < ranges[i]) {\n return i + 1;\n }\n }\n },\n ranges: [\n 128,\n 2048,\n 65536,\n 2097152,\n 67108864\n ]\n };\n var QRCodeDataEncoder = function (encoding) {\n if (encoding && encoding.toLowerCase().indexOf('utf_8') >= 0) {\n return new UTF8Encoder();\n } else {\n return new IsoEncoder();\n }\n };\n var encodeData = function (inputString, errorCorrectionLevel, encoding) {\n var encoder = new QRCodeDataEncoder(encoding), encodingResult = encoder.getEncodingResult(inputString, errorCorrectionLevel), version = encodingResult.version, versionInformation = versionsCodewordsInformation[version - 1][errorCorrectionLevel], dataString = padDataString(encodingResult.dataString, versionInformation.totalDataCodewords), blocks = getBlocks(dataString, versionInformation), matrices = initMatrices(version);\n addFinderPatterns(matrices);\n addAlignmentPatterns(matrices, version);\n addTimingFunctions(matrices);\n if (version >= 7) {\n addVersionInformation(matrices, toBitsString(0, 18));\n }\n addFormatInformation(matrices, toBitsString(0, 15));\n fillData(matrices, blocks);\n var minIdx = scoreMaskMatrixes(matrices), optimalMatrix = matrices[minIdx];\n if (version >= 7) {\n addVersionInformation([optimalMatrix], encodeVersionInformation(version));\n }\n var formatString = errorCorrectionPatterns[errorCorrectionLevel] + toBitsString(minIdx, 3);\n addFormatInformation([optimalMatrix], encodeFormatInformation(formatString));\n return optimalMatrix;\n };\n var QRCodeDefaults = {\n DEFAULT_SIZE: 200,\n QUIET_ZONE_LENGTH: 4,\n DEFAULT_ERROR_CORRECTION_LEVEL: 'L',\n DEFAULT_BACKGROUND: '#fff',\n DEFAULT_DARK_MODULE_COLOR: '#000',\n MIN_BASE_UNIT_SIZE: 1\n };\n var QRCode = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that.element = $(element);\n that.wrapper = that.element;\n that.element.addClass('k-qrcode');\n that.surfaceWrap = $('
    ').css('position', 'relative').appendTo(this.element);\n that.surface = draw.Surface.create(that.surfaceWrap, { type: that.options.renderAs });\n that.setOptions(options);\n },\n redraw: function () {\n var size = this._getSize();\n this.surfaceWrap.css({\n width: size,\n height: size\n });\n this.surface.clear();\n this.createVisual();\n this.surface.draw(this.visual);\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n this.redraw();\n },\n createVisual: function () {\n this.visual = this._render();\n },\n exportVisual: function () {\n return this._render();\n },\n _render: function () {\n var that = this, value = that._value, baseUnit, border = that.options.border || {}, padding = that.options.padding || 0, borderWidth = border.width || 0, quietZoneSize, matrix, size, dataSize, contentSize;\n border.width = borderWidth;\n var visual = new draw.Group();\n if (value) {\n matrix = encodeData(value, that.options.errorCorrection, that.options.encoding);\n size = that._getSize();\n contentSize = size - 2 * (borderWidth + padding);\n baseUnit = that._calculateBaseUnit(contentSize, matrix.length);\n dataSize = matrix.length * baseUnit;\n quietZoneSize = borderWidth + padding + (contentSize - dataSize) / 2;\n visual.append(that._renderBackground(size, border));\n visual.append(that._renderMatrix(matrix, baseUnit, quietZoneSize));\n }\n return visual;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = new Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n }\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInformation: encodeFormatInformation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInformation: addFormatInformation,\n encodeVersionInformation: encodeVersionInformation,\n addVersionInformation: addVersionInformation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/kendo-stock-chart', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var elementStyles = dataviz.elementStyles;\n var deepExtend = dataviz.deepExtend;\n var toTime = dataviz.toTime;\n var datavizConstants = dataviz.constants;\n var Chart = dataviz.Chart;\n var drawing = kendo.drawing;\n var FadeOutAnimation = drawing.Animation.extend({\n setup: function () {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n },\n step: function (pos) {\n elementStyles(this.element, { opacity: String(dataviz.interpolateValue(this._initialOpacity, 0, pos)) });\n },\n abort: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, {\n display: 'none',\n opacity: String(this._initialOpacity)\n });\n },\n cancel: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, { opacity: String(this._initialOpacity) });\n }\n });\n function createDiv(className, style) {\n var div = document.createElement('div');\n div.className = className;\n if (style) {\n div.style.cssText = style;\n }\n return div;\n }\n var NavigatorHint = dataviz.Class.extend({\n init: function (container, chartService, options) {\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n var padding = elementStyles(container, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n this.createElements();\n container.appendChild(this.element);\n },\n createElements: function () {\n var element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n var tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n var scroll = this.scroll = createDiv('k-scroll');\n tooltip.innerHTML = ' ';\n element.appendChild(tooltip);\n element.appendChild(scroll);\n },\n show: function (from, to, bbox) {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var scroll = ref.scroll;\n var tooltip = ref.tooltip;\n var middle = dataviz.toDate(toTime(from) + toTime(to - from) / 2);\n var scrollWidth = bbox.width() * 0.4;\n var minPos = bbox.center().x - scrollWidth;\n var maxPos = bbox.center().x;\n var posRange = maxPos - minPos;\n var range = options.max - options.min;\n var scale = posRange / range;\n var offset = middle - options.min;\n var text = this.chartService.intl.format(options.format, from, to);\n var template = dataviz.getTemplate(options);\n this.clearHideTimeout();\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n var tooltipStyle = elementStyles(tooltip, [\n 'marginTop',\n 'borderTopWidth',\n 'height'\n ]);\n elementStyles(scroll, {\n width: scrollWidth,\n left: minPos + offset * scale,\n top: bbox.y1 + tooltipStyle.marginTop + tooltipStyle.borderTopWidth + tooltipStyle.height / 2\n });\n elementStyles(element, { visibility: 'visible' });\n },\n clearHideTimeout: function () {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n },\n hide: function () {\n var this$1 = this;\n this.clearHideTimeout();\n this._hideTimeout = setTimeout(function () {\n this$1._visible = false;\n this$1._hideAnimation = new FadeOutAnimation(this$1.element);\n this$1._hideAnimation.setup();\n this$1._hideAnimation.play();\n }, this.options.hideDelay);\n },\n destroy: function () {\n this.clearHideTimeout();\n if (this.container) {\n this.container.removeChild(this.element);\n }\n delete this.container;\n delete this.chartService;\n delete this.element;\n delete this.tooltip;\n delete this.scroll;\n }\n });\n dataviz.setDefaultOptions(NavigatorHint, {\n format: '{0:d} - {1:d}',\n hideDelay: 500\n });\n var NAVIGATOR_PANE = '_navigator';\n var NAVIGATOR_AXIS = NAVIGATOR_PANE;\n var constants = {\n NAVIGATOR_AXIS: NAVIGATOR_AXIS,\n NAVIGATOR_PANE: NAVIGATOR_PANE\n };\n var ZOOM_ACCELERATION = 3;\n var Navigator = dataviz.Class.extend({\n init: function (chart) {\n this.chart = chart;\n var options = this.options = deepExtend({}, this.options, chart.options.navigator);\n var select = options.select;\n if (select) {\n select.from = this.parseDate(select.from);\n select.to = this.parseDate(select.to);\n }\n if (!dataviz.defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\n var obj;\n this.chartObserver = new dataviz.InstanceObserver(this, (obj = {}, obj[datavizConstants.DRAG] = '_drag', obj[datavizConstants.DRAG_END] = '_dragEnd', obj[datavizConstants.ZOOM] = '_zoom', obj[datavizConstants.ZOOM_END] = '_zoomEnd', obj));\n chart.addObserver(this.chartObserver);\n },\n parseDate: function (value) {\n return dataviz.parseDate(this.chart.chartService.intl, value);\n },\n destroy: function () {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n if (this.selection) {\n this.selection.destroy();\n delete this.selection;\n }\n if (this.hint) {\n this.hint.destroy();\n delete this.hint;\n }\n },\n redraw: function () {\n this._redrawSelf();\n this.initSelection();\n },\n initSelection: function () {\n var ref = this;\n var chart = ref.chart;\n var options = ref.options;\n var axis = this.mainAxis();\n var ref$1 = axis.range();\n var min = ref$1.min;\n var max = ref$1.max;\n var ref$2 = options.select;\n var from = ref$2.from;\n var to = ref$2.to;\n var mousewheel = ref$2.mousewheel;\n var axisClone = clone(axis);\n var groups = axis.options.categories;\n var selection = this.selection;\n if (groups.length === 0) {\n return;\n }\n if (selection) {\n selection.destroy();\n }\n axisClone.box = axis.box;\n selection = this.selection = new dataviz.Selection(chart, axisClone, {\n min: min,\n max: max,\n from: from || min,\n to: to || max,\n mousewheel: dataviz.valueOrDefault(mousewheel, { zoom: 'left' }),\n visible: options.visible\n }, new dataviz.InstanceObserver(this, {\n selectStart: '_selectStart',\n select: '_select',\n selectEnd: '_selectEnd'\n }));\n if (this.hint) {\n this.hint.destroy();\n }\n if (options.hint.visible) {\n this.hint = new NavigatorHint(chart.element, chart.chartService, {\n min: min,\n max: max,\n template: dataviz.getTemplate(options.hint),\n format: options.hint.format\n });\n }\n },\n setRange: function () {\n var plotArea = this.chart._createPlotArea(true);\n var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n var ref = axis.range();\n var min = ref.min;\n var max = ref.max;\n var select = this.options.select || {};\n var from = select.from || min;\n if (from < min) {\n from = min;\n }\n var to = select.to || max;\n if (to > max) {\n to = max;\n }\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n this.filterAxes();\n },\n _redrawSelf: function (silent) {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n plotArea.redraw(dataviz.last(plotArea.panes), silent);\n }\n },\n redrawSlaves: function () {\n var chart = this.chart;\n var plotArea = chart._plotArea;\n var slavePanes = plotArea.panes.slice(0, -1);\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.redraw(slavePanes);\n },\n _drag: function (e) {\n var ref = this;\n var chart = ref.chart;\n var selection = ref.selection;\n var coords = chart._eventCoordinates(e.originalEvent);\n var navigatorAxis = this.mainAxis();\n var naviRange = navigatorAxis.datesRange();\n var inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n var axis = chart._plotArea.categoryAxis;\n var range = e.axisRanges[axis.options.name];\n var select = this.options.select;\n var duration;\n if (!range || inNavigator || !selection) {\n return;\n }\n if (select.from && select.to) {\n duration = toTime(select.to) - toTime(select.from);\n } else {\n duration = toTime(selection.options.to) - toTime(selection.options.from);\n }\n var from = dataviz.toDate(dataviz.limitValue(toTime(range.min), naviRange.min, toTime(naviRange.max) - duration));\n var to = dataviz.toDate(dataviz.limitValue(toTime(from) + duration, toTime(naviRange.min) + duration, naviRange.max));\n this.options.select = {\n from: from,\n to: to\n };\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(from, to);\n this.showHint(from, to);\n },\n _dragEnd: function () {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n if (this.hint) {\n this.hint.hide();\n }\n },\n readSelection: function () {\n var ref = this;\n var ref_selection_options = ref.selection.options;\n var from = ref_selection_options.from;\n var to = ref_selection_options.to;\n var select = ref.options.select;\n select.from = from;\n select.to = to;\n },\n filterAxes: function () {\n var ref = this;\n var select = ref.options.select;\n if (select === void 0) {\n select = {};\n }\n var chart = ref.chart;\n var allAxes = chart.options.categoryAxis;\n var from = select.from;\n var to = select.to;\n for (var idx = 0; idx < allAxes.length; idx++) {\n var axis = allAxes[idx];\n if (axis.pane !== NAVIGATOR_PANE) {\n axis.min = from;\n axis.max = to;\n }\n }\n },\n filter: function () {\n var ref = this;\n var chart = ref.chart;\n var select = ref.options.select;\n if (chart.requiresHandlers(['navigatorFilter'])) {\n var axisOptions = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, chart.options.categoryAxis[0], {\n categories: [\n select.from,\n select.to\n ]\n }), chart.chartService).options;\n this.chart.trigger('navigatorFilter', {\n from: dataviz.addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit),\n to: dataviz.addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit)\n });\n }\n },\n _zoom: function (e) {\n var ref = this;\n var axis = ref.chart._plotArea.categoryAxis;\n var selection = ref.selection;\n var ref_options = ref.options;\n var select = ref_options.select;\n var liveDrag = ref_options.liveDrag;\n var categories = this.mainAxis().options.categories;\n var delta = e.delta;\n if (!selection) {\n return;\n }\n var fromIx = dataviz.lteDateIndex(selection.options.from, categories);\n var toIx = dataviz.lteDateIndex(selection.options.to, categories);\n e.originalEvent.preventDefault();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (toIx - fromIx > 1) {\n selection.expand(delta);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta).min;\n }\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(select.from, select.to);\n this.showHint(this.options.select.from, this.options.select.to);\n },\n _zoomEnd: function (e) {\n this._dragEnd(e);\n },\n showHint: function (from, to) {\n var plotArea = this.chart._plotArea;\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n },\n _selectStart: function (e) {\n return this.chart._selectStart(e);\n },\n _select: function (e) {\n this.showHint(e.from, e.to);\n return this.chart._select(e);\n },\n _selectEnd: function (e) {\n if (this.hint) {\n this.hint.hide();\n }\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n return this.chart._selectEnd(e);\n },\n mainAxis: function () {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n },\n select: function (from, to) {\n var select = this.options.select;\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n this.selection.set(from, to);\n }\n return {\n from: select.from,\n to: select.to\n };\n }\n });\n Navigator.setup = function (options, themeOptions) {\n if (options === void 0) {\n options = {};\n }\n if (themeOptions === void 0) {\n themeOptions = {};\n }\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n var naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n var panes = options.panes = [].concat(options.panes);\n var paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n panes.push(paneOptions);\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n };\n Navigator.attachAxes = function (options, naviOptions) {\n var series = naviOptions.series || [];\n var categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n var valueAxes = options.valueAxis = [].concat(options.valueAxis);\n var equallySpacedSeries = dataviz.filterSeriesByType(series, datavizConstants.EQUALLY_SPACED_SERIES);\n var justifyAxis = equallySpacedSeries.length === 0;\n var base = deepExtend({\n type: 'date',\n pane: NAVIGATOR_PANE,\n roundToBaseUnit: !justifyAxis,\n justified: justifyAxis,\n _collapse: false,\n majorTicks: { visible: true },\n tooltip: { visible: false },\n labels: { step: 1 },\n autoBind: naviOptions.autoBindElements,\n autoBaseUnitSteps: {\n minutes: [1],\n hours: [\n 1,\n 2\n ],\n days: [\n 1,\n 2\n ],\n weeks: [],\n months: [1],\n years: [1]\n }\n });\n var user = naviOptions.categoryAxis;\n categoryAxes.push(deepExtend({}, base, { maxDateGroups: 200 }, user, {\n name: NAVIGATOR_AXIS,\n title: null,\n baseUnit: 'fit',\n baseUnitStep: 'auto',\n labels: { visible: false },\n majorTicks: { visible: false }\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_labels',\n maxDateGroups: 20,\n baseUnitStep: 'auto',\n plotBands: [],\n autoBaseUnitSteps: { minutes: [] },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_ticks',\n maxDateGroups: 200,\n majorTicks: { width: 0.5 },\n plotBands: [],\n title: null,\n labels: {\n visible: false,\n mirror: true\n },\n _overlap: true\n }));\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: { visible: false },\n visible: false\n }, naviOptions.valueAxis));\n };\n Navigator.attachSeries = function (options, naviOptions, themeOptions) {\n var series = options.series = options.series || [];\n var navigatorSeries = [].concat(naviOptions.series || []);\n var seriesColors = themeOptions.seriesColors;\n var defaults = naviOptions.seriesDefaults;\n for (var idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: { visible: false }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n }));\n }\n };\n function ClonedObject() {\n }\n function clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n }\n var AUTO_CATEGORY_WIDTH = 28;\n var StockChart = Chart.extend({\n applyDefaults: function (options, themeOptions) {\n var width = dataviz.elementSize(this.element).width || datavizConstants.DEFAULT_WIDTH;\n var theme = themeOptions;\n var stockDefaults = {\n seriesDefaults: { categoryField: options.dateField },\n axisDefaults: {\n categoryAxis: {\n name: 'default',\n majorGridLines: { visible: false },\n labels: { step: 2 },\n majorTicks: { visible: false },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n Navigator.setup(options, theme);\n Chart.fn.applyDefaults.call(this, options, theme);\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart k-stockchart');\n },\n setOptions: function (options) {\n this.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n _resize: function () {\n var transitions = this.options.transitions;\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n },\n _redraw: function () {\n var navigator = this.navigator;\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\n },\n _dirty: function () {\n var options = this.options;\n var series = [].concat(options.series, options.navigator.series);\n var seriesCount = dataviz.grep(series, function (s) {\n return s && s.visible;\n }).length;\n var dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n return dirty;\n },\n _fullRedraw: function () {\n var navigator = this.navigator;\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger('navigatorCreated', { navigator: navigator });\n }\n navigator.setRange();\n Chart.fn._redraw.call(this);\n navigator.initSelection();\n },\n _trackSharedTooltip: function (coords) {\n var plotArea = this._plotArea;\n var pane = plotArea.paneByPoint(coords);\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n Chart.fn._trackSharedTooltip.call(this, coords);\n }\n },\n bindCategories: function () {\n Chart.fn.bindCategories.call(this);\n this.copyNavigatorCategories();\n },\n copyNavigatorCategories: function () {\n var definitions = [].concat(this.options.categoryAxis);\n var categories;\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.name === NAVIGATOR_AXIS) {\n categories = axis.categories;\n } else if (categories && axis.pane === NAVIGATOR_PANE) {\n axis.categories = categories;\n }\n }\n },\n destroyNavigator: function () {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n },\n destroy: function () {\n this.destroyNavigator();\n Chart.fn.destroy.call(this);\n },\n _stopDragEvent: function (e) {\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n return Chart.fn._stopDragEvent.call(this, e) || pane && pane.options.name === NAVIGATOR_PANE;\n }\n });\n dataviz.setDefaultOptions(StockChart, {\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: { visible: true },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false }\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Navigator: Navigator,\n NavigatorHint: NavigatorHint,\n StockChart: StockChart\n });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/stock-chart', ['dataviz/stock/kendo-stock-chart'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var dataviz = kendo.dataviz;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var Chart = dataviz.ui.Chart;\n var KendoStockChart = dataviz.StockChart;\n var constants = dataviz.constants;\n var NAVIGATOR_AXIS = constants.NAVIGATOR_AXIS;\n var NAVIGATOR_PANE = constants.NAVIGATOR_PANE;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var proxy = $.proxy;\n var CHANGE = 'change';\n var StockInstanceObserver = ChartInstanceObserver.extend({\n handlerMap: {\n navigatorFilter: '_onNavigatorFilter',\n navigatorCreated: '_onNavigatorCreated'\n }\n });\n var StockChart = Chart.extend({\n options: {\n name: 'StockChart',\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: {\n visible: true,\n template: '#= kendo.toString(category, \\'d\\') #'\n },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false },\n persistSeriesVisibility: true\n },\n _createChart: function (options, themeOptions) {\n this._initNavigatorOptions(options);\n this._instance = new KendoStockChart(this.element[0], options, themeOptions, {\n observer: new StockInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _initNavigatorOptions: function (options) {\n var navigatorOptions = options.navigator || {};\n var support = kendo.support;\n var isTouch = support.touch;\n var isFirefox = support.browser.mozilla;\n deepExtend(navigatorOptions, {\n autoBindElements: !navigatorOptions.dataSource,\n partialRedraw: navigatorOptions.dataSource,\n liveDrag: !isTouch && !isFirefox\n });\n },\n _initDataSource: function (userOptions) {\n var options = userOptions || {}, dataSource = options.dataSource, hasServerFiltering = dataSource && dataSource.serverFiltering, mainAxis = [].concat(options.categoryAxis)[0], naviOptions = options.navigator || {}, select = naviOptions.select, hasSelect = select && select.from && select.to;\n if (hasServerFiltering && hasSelect) {\n var filter = [].concat(dataSource.filter || []);\n var from = kendo.parseDate(select.from);\n var to = kendo.parseDate(select.to);\n var dummyAxis = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, mainAxis, {\n categories: [\n from,\n to\n ]\n }), kendo);\n dataSource.filter = buildFilter(dummyAxis.range().min, to).concat(filter);\n }\n Chart.fn._initDataSource.call(this, userOptions);\n },\n _onNavigatorCreated: function (e) {\n this._instance = e.sender;\n this.options = e.sender.options;\n this._navigator = this.navigator = e.navigator;\n this._initNavigatorDataSource();\n },\n _initNavigatorDataSource: function () {\n var navigatorOptions = this.options.navigator;\n var autoBind = navigatorOptions.autoBind;\n var dsOptions = navigatorOptions.dataSource;\n if (dsOptions) {\n this._navigatorDataChangedHandler = this._navigatorDataChangedHandler || proxy(this._onNavigatorDataChanged, this);\n this._navigatorDataSource = kendo.data.DataSource.create(dsOptions).bind(CHANGE, this._navigatorDataChangedHandler);\n if (!defined(autoBind)) {\n autoBind = this.options.autoBind;\n }\n if (autoBind) {\n this._navigatorDataSource.fetch();\n }\n }\n },\n _bindNavigatorSeries: function (series, data) {\n var seriesIx, currentSeries, seriesLength = series.length;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (currentSeries.axis == NAVIGATOR_AXIS && this._isBindable(currentSeries)) {\n currentSeries.data = data;\n }\n }\n },\n _onNavigatorDataChanged: function () {\n var chart = this, instance = chart._instance, categoryAxes = chart.options.categoryAxis, axisIx, axesLength = categoryAxes.length, data = chart._navigatorDataSource.view(), currentAxis, naviCategories;\n this._bindNavigatorSeries(chart.options.series, data);\n if (chart._sourceSeries) {\n this._bindNavigatorSeries(chart._sourceSeries, data);\n }\n for (axisIx = 0; axisIx < axesLength; axisIx++) {\n currentAxis = categoryAxes[axisIx];\n if (currentAxis.pane == NAVIGATOR_PANE) {\n if (currentAxis.name == NAVIGATOR_AXIS) {\n chart._bindCategoryAxis(currentAxis, data, axisIx);\n naviCategories = currentAxis.categories;\n } else {\n currentAxis.categories = naviCategories;\n }\n }\n }\n if (instance._model) {\n var navigator = this.navigator;\n navigator.redraw();\n navigator.setRange();\n if (!chart.options.dataSource || chart.options.dataSource && chart._dataBound) {\n navigator.redrawSlaves();\n }\n }\n },\n _bindCategories: function () {\n Chart.fn._bindCategories.call(this);\n if (this._instance) {\n this._instance.copyNavigatorCategories();\n }\n },\n _onDataChanged: function () {\n Chart.fn._onDataChanged.call(this);\n this._dataBound = true;\n },\n setOptions: function (options) {\n this._removeNavigatorDataSource();\n this._initNavigatorOptions(options);\n this._instance.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n _onNavigatorFilter: function (e) {\n this.dataSource.filter(buildFilter(e.from, e.to));\n },\n requiresHandlers: function (names) {\n if (dataviz.inArray('navigatorFilter', names)) {\n var dataSource = this.dataSource;\n var hasServerFiltering = dataSource && dataSource.options.serverFiltering;\n return hasServerFiltering && this.options.navigator.dataSource;\n }\n return Chart.fn.requiresHandlers.call(this, names);\n },\n _removeNavigatorDataSource: function () {\n var navigatorDataSource = this._navigatorDataSource;\n if (navigatorDataSource) {\n navigatorDataSource.unbind(CHANGE, this._navigatorDataChangedHandler);\n delete this._navigatorDataSource;\n }\n },\n destroy: function () {\n Chart.fn.destroy.call(this);\n this._removeNavigatorDataSource();\n }\n });\n dataviz.ui.plugin(StockChart);\n function buildFilter(from, to) {\n return [\n {\n field: 'Date',\n operator: 'gte',\n value: from\n },\n {\n field: 'Date',\n operator: 'lt',\n value: to\n }\n ];\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.stock', [\n 'dataviz/stock/kendo-stock-chart',\n 'dataviz/stock/stock-chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.stockchart',\n name: 'StockChart',\n category: 'dataviz',\n description: 'StockChart widget and associated financial series.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/kendo-sparkline', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var Chart = dataviz.Chart;\n var elementSize = dataviz.elementSize;\n var deepExtend = dataviz.deepExtend;\n var TOP_OFFSET = -2;\n var SharedTooltip$1 = dataviz.SharedTooltip.extend({\n _slotAnchor: function (coords, slot) {\n var axis = this.plotArea.categoryAxis;\n var vertical = axis.options.vertical;\n var align = vertical ? {\n horizontal: 'left',\n vertical: 'center'\n } : {\n horizontal: 'center',\n vertical: 'bottom'\n };\n var point;\n if (vertical) {\n point = new dataviz.Point(this.plotArea.box.x2, slot.center().y);\n } else {\n point = new dataviz.Point(slot.center().x, TOP_OFFSET);\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n return this._slotAnchor({}, slot);\n }\n });\n var DEAULT_BAR_WIDTH = 150;\n var DEAULT_BULLET_WIDTH = 150;\n var NO_CROSSHAIR = [\n constants.BAR,\n constants.BULLET\n ];\n function hide(children) {\n var state = [];\n for (var idx = 0; idx < children.length; idx++) {\n var child = children[idx];\n state[idx] = child.style.display;\n child.style.display = 'none';\n }\n return state;\n }\n function show(children, state) {\n for (var idx = 0; idx < children.length; idx++) {\n children[idx].style.display = state[idx];\n }\n }\n function wrapNumber(value) {\n return dataviz.isNumber(value) ? [value] : value;\n }\n var Sparkline = Chart.extend({\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-sparkline');\n },\n _initElement: function (element) {\n Chart.fn._initElement.call(this, element);\n this._initialWidth = Math.floor(elementSize(element).width);\n },\n _resize: function () {\n var element = this.element;\n var state = hide(element.childNodes);\n this._initialWidth = Math.floor(elementSize(element).width);\n show(element.childNodes, state);\n Chart.fn._resize.call(this);\n },\n _modelOptions: function () {\n var chartOptions = this.options;\n var stage = this._surfaceWrap();\n var displayState = hide(stage.childNodes);\n var space = document.createElement('span');\n space.innerHTML = ' ';\n stage.appendChild(space);\n var options = deepExtend({\n width: this._autoWidth,\n height: elementSize(stage).height,\n transitions: chartOptions.transitions\n }, chartOptions.chartArea, {\n inline: true,\n align: false\n });\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n stage.removeChild(space);\n show(stage.childNodes, displayState);\n this.surface.resize();\n return options;\n },\n _surfaceWrap: function () {\n if (!this.stage) {\n var stage = this.stage = document.createElement('span');\n this.element.appendChild(stage);\n }\n return this.stage;\n },\n _createPlotArea: function (skipSeries) {\n var plotArea = Chart.fn._createPlotArea.call(this, skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n return plotArea;\n },\n _calculateWidth: function (plotArea) {\n var options = this.options;\n var margin = dataviz.getSpacing(options.chartArea.margin);\n var charts = plotArea.charts;\n var stage = this._surfaceWrap();\n var total = 0;\n for (var i = 0; i < charts.length; i++) {\n var currentChart = charts[i];\n var firstSeries = (currentChart.options.series || [])[0];\n if (!firstSeries) {\n continue;\n }\n if (firstSeries.type === constants.BAR) {\n return DEAULT_BAR_WIDTH;\n }\n if (firstSeries.type === constants.BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n if (firstSeries.type === constants.PIE) {\n return elementSize(stage).height;\n }\n var categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n var pointsCount = categoryAxis.options.categories.length * (!currentChart.options.isStacked && dataviz.inArray(firstSeries.type, [\n constants.COLUMN,\n constants.VERTICAL_BULLET\n ]) ? currentChart.seriesOptions.length : 1);\n total = Math.max(total, pointsCount);\n }\n }\n var size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n return size;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip$1(this._plotArea, options);\n }\n });\n Sparkline.normalizeOptions = function (userOptions) {\n var options = wrapNumber(userOptions);\n if (dataviz.isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n if (!options.series) {\n options.series = [{ data: wrapNumber(options.data) }];\n }\n deepExtend(options, { seriesDefaults: { type: options.type } });\n if (dataviz.inArray(options.series[0].type, NO_CROSSHAIR) || dataviz.inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, { categoryAxis: { crosshair: { visible: false } } }, options);\n }\n return options;\n };\n dataviz.setDefaultOptions(Sparkline, {\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n });\n kendo.deepExtend(kendo.dataviz, { Sparkline: Sparkline });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/sparkline', ['dataviz/sparkline/kendo-sparkline'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var Chart = dataviz.ui.Chart;\n var KendoSparkline = dataviz.Sparkline;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var extend = $.extend;\n var Sparkline = Chart.extend({\n init: function (element, userOptions) {\n var options = userOptions;\n if (options instanceof kendo.data.ObservableArray) {\n options = { seriesDefaults: { data: options } };\n }\n Chart.fn.init.call(this, element, KendoSparkline.normalizeOptions(options));\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoSparkline(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _createTooltip: function () {\n return new SparklineTooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n options: {\n name: 'Sparkline',\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n }\n });\n dataviz.ui.plugin(Sparkline);\n var SparklineTooltip = dataviz.Tooltip.extend({\n options: { animation: { duration: 0 } },\n _hideElement: function () {\n if (this.element) {\n this.element.hide().remove();\n }\n }\n });\n dataviz.SparklineTooltip = SparklineTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.sparkline', [\n 'dataviz/sparkline/kendo-sparkline',\n 'dataviz/sparkline/sparkline'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.sparkline',\n name: 'Sparkline',\n category: 'dataviz',\n description: 'Sparkline widgets.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend;\n function sqr(value) {\n return value * value;\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function isUnicodeLetter(ch) {\n return RX_UNICODE_LETTER.test(ch);\n }\n function withExit(f, obj) {\n try {\n return f.call(obj, function (value) {\n throw new Return(value);\n });\n } catch (ex) {\n if (ex instanceof Return) {\n return ex.value;\n }\n throw ex;\n }\n function Return(value) {\n this.value = value;\n }\n }\n deepExtend(kendo, {\n util: {\n now: now,\n renderPos: renderPos,\n renderSize: renderSize,\n sqr: sqr,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n isUnicodeLetter: isUnicodeLetter,\n withExit: withExit\n }\n });\n var RX_UNICODE_LETTER = new RegExp('[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/location', [\n 'kendo.drawing',\n 'util/main'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, abs = math.abs, atan = math.atan, atan2 = math.atan2, cos = math.cos, max = math.max, min = math.min, sin = math.sin, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, util = kendo.drawing.util, defined = util.defined, deg = util.deg, rad = util.rad, round = util.round, valueOrDefault = util.valueOrDefault, sqr = kendo.util.sqr;\n var Location = Class.extend({\n init: function (lat, lng) {\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n },\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6},{1:N6}',\n toArray: function () {\n return [\n this.lat,\n this.lng\n ];\n },\n equals: function (loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n clone: function () {\n return new Location(this.lat, this.lng);\n },\n round: function (precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n wrap: function () {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n distanceTo: function (dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n destination: function (distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n var lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n return new Location(deg(lat), deg(lng));\n },\n greatCircleTo: function (dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n var L = rad(dest.lng - this.lng);\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n var lambda = L;\n var prevLambda;\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n var sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - sqr(sinA);\n cos2om = 0;\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n var deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))));\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n Location.fn.toString = function () {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n Location.fromLngLat = function (ll) {\n return new Location(ll[1], ll[0]);\n };\n Location.fromLatLng = function (ll) {\n return new Location(ll[0], ll[1]);\n };\n Location.create = function (a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n } else {\n return new Location(a, b);\n }\n }\n };\n var Extent = Class.extend({\n init: function (nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n },\n contains: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n return loc && lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 && lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n },\n center: function () {\n var nw = this.nw;\n var se = this.se;\n var lng = nw.lng + (se.lng - nw.lng) / 2;\n var lat = nw.lat + (se.lat - nw.lat) / 2;\n return new Location(lat, lng);\n },\n containsAny: function (locs) {\n var result = false;\n for (var i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n return result;\n },\n include: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n includeAll: function (locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n edges: function () {\n var nw = this.nw, se = this.se;\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n },\n toArray: function () {\n var nw = this.nw, se = this.se;\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n },\n overlaps: function (extent) {\n return this.containsAny(extent.toArray()) || extent.containsAny(this.toArray());\n }\n });\n Extent.World = new Extent([\n 90,\n -180\n ], [\n -90,\n 180\n ]);\n Extent.create = function (a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n };\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/attribution', ['kendo.drawing'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, Widget = kendo.ui.Widget, template = kendo.template, util = kendo.drawing.util, valueOrDefault = util.valueOrDefault, defined = util.defined;\n var Attribution = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.items = [];\n this.element.addClass('k-widget k-attribution');\n },\n options: {\n name: 'Attribution',\n separator: ' | ',\n itemTemplate: '#= text #'\n },\n filter: function (extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n add: function (item) {\n if (defined(item)) {\n if (typeof item === 'string') {\n item = { text: item };\n }\n this.items.push(item);\n this._render();\n }\n },\n remove: function (text) {\n var result = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.text !== text) {\n result.push(item);\n }\n }\n this.items = result;\n this._render();\n },\n clear: function () {\n this.items = [];\n this.element.empty();\n },\n _render: function () {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var text = this._itemText(item);\n if (text !== '') {\n result.push(itemTemplate({ text: text }));\n }\n }\n if (result.length > 0) {\n this.element.empty().append(result.join(this.options.separator)).show();\n } else {\n this.element.hide();\n }\n },\n _itemText: function (item) {\n var text = '';\n var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n var inArea = this._inArea(item.extent);\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n return text;\n },\n _inZoomLevel: function (min, max) {\n var result = true;\n min = valueOrDefault(min, -Number.MAX_VALUE);\n max = valueOrDefault(max, Number.MAX_VALUE);\n result = this._zoom > min && this._zoom < max;\n return result;\n },\n _inArea: function (area) {\n var result = true;\n if (area) {\n result = area.contains(this._extent);\n }\n return result;\n }\n });\n kendo.dataviz.ui.plugin(Attribution);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/navigator', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n var NS = '.kendoNavigator';\n function button(dir) {\n return kendo.format('', dir);\n }\n var BUTTONS = button('up') + button('right') + button('down') + button('left');\n var Navigator = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-header k-shadow k-navigator').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'Navigator',\n panStep: 1\n },\n events: ['pan'],\n dispose: function () {\n this._keyroot.off('keydown', this._keydown);\n },\n _pan: function (x, y) {\n var panStep = this.options.panStep;\n this.trigger('pan', {\n x: x * panStep,\n y: y * panStep\n });\n },\n _click: function (e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n if (button.is('.k-navigator-up')) {\n y = 1;\n } else if (button.is('.k-navigator-down')) {\n y = -1;\n } else if (button.is('.k-navigator-right')) {\n x = 1;\n } else if (button.is('.k-navigator-left')) {\n x = -1;\n }\n this._pan(x, y);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(Navigator);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/zoom', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n function button(dir, iconClass) {\n return kendo.format('', dir, iconClass);\n }\n var NS = '.kendoZoomControl';\n var BUTTONS = button('in', 'k-i-plus') + button('out', 'k-i-minus');\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n var ZoomControl = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-zoom-control k-button-wrap k-buttons-horizontal k-button-group k-group-horizontal').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'ZoomControl',\n zoomStep: 1\n },\n events: ['change'],\n _change: function (dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger('change', { delta: dir * zoomStep });\n },\n _click: function (e) {\n var button = $(e.currentTarget);\n var dir = 1;\n if (button.is('.k-zoom-out')) {\n dir = -1;\n }\n this._change(dir);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(ZoomControl);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/crs', [\n 'dataviz/map/location',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, atan = math.atan, exp = math.exp, pow = math.pow, sin = math.sin, log = math.log, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, map = dataviz.map, Location = map.Location, util = kendo.drawing.util, rad = util.rad, deg = util.deg, limit = util.limitValue;\n var PI = math.PI, PI_DIV_2 = PI / 2, PI_DIV_4 = PI / 4, DEG_TO_RAD = PI / 180;\n var WGS84 = {\n a: 6378137,\n b: 6356752.314245179,\n f: 0.0033528106647474805,\n e: 0.08181919084262149\n };\n var Mercator = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n forward: function (loc, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT), lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng, x = rad(lng - lng0) * r, y = proj._projectLat(lat);\n return new Point(x, y);\n },\n _projectLat: function (lat) {\n var datum = this.options.datum, ecc = datum.e, r = datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2), con = ecc * sin(y), p = pow((1 - con) / (1 + con), ecc / 2);\n return r * log(ts * p);\n },\n inverse: function (point, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lng = point.x / (DEG_TO_RAD * r) + lng0, lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n },\n _inverseY: function (y) {\n var proj = this, datum = proj.options.datum, r = datum.a, ecc = datum.e, ecch = ecc / 2, ts = exp(-y / r), phi = PI_DIV_2 - 2 * atan(ts), i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi), p = pow((1 - con) / (1 + con), ecch), dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n });\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n _projectLat: function (lat) {\n var r = this.options.datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n },\n _inverseY: function (y) {\n var r = this.options.datum.a, ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n });\n var Equirectangular = Class.extend({\n forward: function (loc) {\n return new Point(loc.lng, loc.lat);\n },\n inverse: function (point) {\n return new Location(point.y, point.x);\n }\n });\n var EPSG3857 = Class.extend({\n init: function () {\n var crs = this, proj = crs._proj = new SphericalMercator();\n var c = this.c = 2 * PI * proj.options.datum.a;\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n toPoint: function (loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n },\n toLocation: function (point, scale, clamp) {\n point = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(point, clamp);\n }\n });\n var EPSG3395 = Class.extend({\n init: function () {\n this._proj = new Mercator();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n var EPSG4326 = Class.extend({\n init: function () {\n this._proj = new Equirectangular();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: { WGS84: WGS84 },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/base', [\n 'kendo.core',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, Extent = dataviz.map.Extent, util = kendo.drawing.util, defined = util.defined;\n var Layer = Class.extend({\n init: function (map, options) {\n this._initOptions(options);\n this.map = map;\n this.element = $('
    ').css({\n 'zIndex': this.options.zIndex,\n 'opacity': this.options.opacity\n }).appendTo(map.scrollElement);\n this._beforeReset = proxy(this._beforeReset, this);\n this._reset = proxy(this._reset, this);\n this._resize = proxy(this._resize, this);\n this._panEnd = proxy(this._panEnd, this);\n this._activate();\n this._updateAttribution();\n },\n destroy: function () {\n this._deactivate();\n },\n show: function () {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n hide: function () {\n this._deactivate();\n this._setVisibility(false);\n },\n reset: function () {\n this._beforeReset();\n this._reset();\n },\n _reset: function () {\n this._applyExtent();\n },\n _beforeReset: $.noop,\n _resize: $.noop,\n _panEnd: function () {\n this._applyExtent();\n },\n _applyExtent: function () {\n var options = this.options;\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n _setVisibility: function (visible) {\n this.element.css('display', visible ? '' : 'none');\n },\n _activate: function () {\n var map = this.map;\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _deactivate: function () {\n var map = this.map;\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n },\n _updateAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n deepExtend(dataviz, { map: { layers: { Layer: Layer } } });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/shape', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, Group = d.Group, last = d.util.last, defined = d.util.defined, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var ShapeLayer = Layer.extend({\n init: function (map, options) {\n this._pan = proxy(this._pan, this);\n Layer.fn.init.call(this, map, options);\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n this._initRoot();\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this._initDataSource();\n },\n options: { autoBind: true },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.surface.destroy();\n this.dataSource.unbind('change', this._dataChange);\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._translateSurface();\n if (this._data) {\n this._load(this._data);\n }\n },\n _initRoot: function () {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n _beforeReset: function () {\n this.surface.clear();\n this._initRoot();\n },\n _resize: function () {\n this.surface.size(this.map.size());\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n _load: function (data) {\n this._clearMarkers();\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n this._root.clear();\n this._root.append(container);\n },\n shapeCreated: function (shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n if (!cancelled) {\n var args = {\n layer: this,\n shape: shape\n };\n cancelled = this.map.trigger('shapeCreated', args);\n }\n return cancelled;\n },\n featureCreated: function (e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n },\n _createMarker: function (shape) {\n var marker = this.map.markers.bind({ location: shape.location }, shape.dataItem);\n if (marker) {\n this._markers.push(marker);\n }\n return marker;\n },\n _clearMarkers: function () {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n _pan: function () {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n _translateSurface: function () {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n },\n _handler: function (event) {\n var layer = this;\n return function (e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n layer.map.trigger(event, args);\n }\n };\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n this.map.bind('pan', this._pan);\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n this.map.unbind('pan', this._pan);\n }\n });\n var GeoJSONLoader = Class.extend({\n init: function (locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n parse: function (item) {\n var root = new Group();\n var unwrap = true;\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n return root;\n },\n _shapeCreated: function (shape) {\n var cancelled = false;\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n return cancelled;\n },\n _featureCreated: function (group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n _loadGeometryTo: function (container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n _setLineFill: function (path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n _loadShape: function (container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n return shape;\n },\n _loadPolygon: function (container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n },\n _buildPolygon: function (rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n return path;\n },\n _loadPoint: function (container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n return this._loadShape(container, shape);\n }\n });\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: 'json',\n data: function (data) {\n if (data.type === 'FeatureCollection') {\n return data.features;\n }\n if (data.type === 'GeometryCollection') {\n return data.geometries;\n }\n return data;\n }\n }\n },\n transports: { geojson: { read: { dataType: 'json' } } }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bubble', ['dataviz/map/layers/shape'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, getter = kendo.getter, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, util = d.util, defined = util.defined, map = dataviz.map, Location = map.Location, ShapeLayer = map.layers.ShapeLayer;\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle'\n },\n _load: function (data) {\n this.surface.clear();\n if (data.length === 0) {\n return;\n }\n var opt = this.options;\n var getValue = getter(opt.valueField);\n data = data.slice(0);\n data.sort(function (a, b) {\n return getValue(b) - getValue(a);\n });\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n opt.minSize,\n opt.maxSize\n ]);\n }\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n this._drawSymbol(symbol);\n }\n }\n },\n _scaleType: function () {\n var scale = this.options.scale;\n if (kendo.isFunction(scale)) {\n return scale;\n }\n return dataviz.map.scales[scale];\n },\n _createSymbol: function (args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n return symbol(args);\n },\n _drawSymbol: function (shape) {\n var args = {\n layer: this,\n shape: shape\n };\n var cancelled = this.map.trigger('shapeCreated', args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n var SqrtScale = kendo.Class.extend({\n init: function (domain, range) {\n this._domain = domain;\n this._range = range;\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n map: function (value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n var Symbols = {\n circle: function (args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n square: function (args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: { sqrt: SqrtScale },\n symbols: Symbols\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/tile', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, template = kendo.template, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, Layer = dataviz.map.layers.Layer, util = kendo.util, renderSize = util.renderSize, drawingUtil = kendo.drawing.util, round = drawingUtil.round, limit = drawingUtil.limitValue;\n var TileLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this._view.destroy();\n this._view = null;\n },\n _beforeReset: function () {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset();\n },\n _viewType: function () {\n return TileView;\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(proxy(this._render, this), 100);\n }\n this.map.bind('pan', this._pan);\n }\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n },\n _updateView: function () {\n var view = this._view, map = this.map, extent = map.extent(), extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n _resize: function () {\n this._render();\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n _render: function () {\n this._updateView();\n this._view.render();\n }\n });\n var TileView = Class.extend({\n init: function (element, options) {\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n },\n options: {\n tileSize: 256,\n subdomains: [\n 'a',\n 'b',\n 'c'\n ],\n urlTemplate: ''\n },\n center: function (center) {\n this._center = center;\n },\n extent: function (extent) {\n this._extent = extent;\n },\n viewOrigin: function (origin) {\n this._viewOrigin = origin;\n },\n zoom: function (zoom) {\n this._zoom = zoom;\n },\n pointToTileIndex: function (point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n },\n tileCount: function () {\n var size = this.size(), firstTileIndex = this.pointToTileIndex(this._extent.nw), nw = this._extent.nw, point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n size: function () {\n var nw = this._extent.nw, se = this._extent.se, diff = se.clone().translate(-nw.x, -nw.y);\n return {\n width: diff.x,\n height: diff.y\n };\n },\n indexToPoint: function (index) {\n var x = index.x, y = index.y;\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n },\n subdomainText: function () {\n var subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n destroy: function () {\n this.element.empty();\n this.pool.empty();\n },\n reset: function () {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n render: function () {\n var size = this.tileCount(), firstTileIndex = this.pointToTileIndex(this._extent.nw), tile, x, y;\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n createTile: function (currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n return tile;\n },\n tileOptions: function (currentIndex) {\n var index = this.wrapIndex(currentIndex), point = this.indexToPoint(currentIndex), origin = this._viewOrigin, offset = point.clone().translate(-origin.x, -origin.y);\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n },\n wrapIndex: function (index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n wrapValue: function (value, boundary) {\n var remainder = math.abs(value) % boundary;\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n return value;\n }\n });\n var ImageTile = Class.extend({\n init: function (id, options) {\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n options: {\n urlTemplate: '',\n errorUrlTemplate: ''\n },\n createElement: function () {\n this.element = $('\\'\\'').css({\n width: this.options.size,\n height: this.options.size\n }).on('error', proxy(function (e) {\n if (this.errorUrl()) {\n e.target.setAttribute('src', this.errorUrl());\n } else {\n e.target.removeAttribute('src');\n }\n }, this));\n },\n show: function () {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n var url = this.url();\n if (url) {\n element.setAttribute('src', url);\n }\n element.style.visibility = 'visible';\n this.visible = true;\n },\n hide: function () {\n this.element[0].style.visibility = 'hidden';\n this.visible = false;\n },\n url: function () {\n var urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n },\n errorUrl: function () {\n var urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n },\n urlOptions: function () {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n destroy: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n var TilePool = Class.extend({\n init: function () {\n this._items = [];\n },\n options: { maxSize: 100 },\n get: function (center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n return this._create(options);\n },\n empty: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n this._items = [];\n },\n reset: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n _create: function (options) {\n var items = this._items;\n var tile;\n var id = util.hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n return tile;\n },\n _remove: function (center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bing', ['dataviz/map/layers/tile'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, defined = kendo.drawing.util.defined, Extent = dataviz.map.Extent, Location = dataviz.map.Location, TileLayer = dataviz.map.layers.TileLayer, TileView = dataviz.map.layers.TileView;\n var BingLayer = TileLayer.extend({\n init: function (map, options) {\n this.options.baseUrl = this._scheme() + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/';\n TileLayer.fn.init.call(this, map, options);\n this._onMetadata = $.proxy(this._onMetadata, this);\n this._fetchMetadata();\n },\n options: { imagerySet: 'road' },\n _fetchMetadata: function () {\n var options = this.options;\n if (!options.key) {\n throw new Error('Bing tile layer: API key is required');\n }\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: 'json',\n include: 'ImageryProviders',\n key: options.key,\n uriScheme: this._scheme()\n },\n type: 'get',\n dataType: 'jsonp',\n jsonp: 'jsonp',\n success: this._onMetadata\n });\n },\n _scheme: function (proto) {\n proto = proto || window.location.protocol;\n return proto.replace(':', '') === 'https' ? 'https' : 'http';\n },\n _onMetadata: function (data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl.replace('{subdomain}', '#= subdomain #').replace('{quadkey}', '#= quadkey #').replace('{culture}', '#= culture #'),\n subdomains: resource.imageUrlSubdomains\n });\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n this._addAttribution();\n if (this.element.css('display') !== 'none') {\n this._reset();\n }\n }\n },\n _viewType: function () {\n return BingView;\n },\n _addAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(new Location(area.bbox[2], area.bbox[1]), new Location(area.bbox[0], area.bbox[3]))\n });\n }\n }\n }\n }\n },\n imagerySet: function (value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n var BingView = TileView.extend({\n options: { culture: 'en-US' },\n tileOptions: function (currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n return options;\n },\n tileQuadKey: function (index) {\n var quadKey = '', digit, mask, i;\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << i - 1;\n if ((index.x & mask) !== 0) {\n digit++;\n }\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n quadKey += digit;\n }\n return quadKey;\n }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/marker', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location',\n 'kendo.data',\n 'kendo.tooltip'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, indexOf = $.inArray, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, Tooltip = kendo.ui.Tooltip, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var MarkerLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n this._markerClick = proxy(this._markerClick, this);\n this.element.on('click', '.k-marker', this._markerClick);\n this.items = [];\n this._initDataSource();\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.element.off('click', '.k-marker', this._markerClick);\n this.dataSource.unbind('change', this._dataChange);\n this.clear();\n },\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: 'location',\n titleField: 'title'\n },\n add: function (arg) {\n if ($.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n remove: function (marker) {\n marker.destroy();\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n clear: function () {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n this.items = [];\n },\n update: function (marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n var args = {\n marker: marker,\n layer: this\n };\n this.map.trigger('markerActivate', args);\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n bind: function (options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n var args = {\n marker: marker,\n layer: this\n };\n var cancelled = this.map.trigger('markerCreated', args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _addOne: function (arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._load(e.sender.view());\n },\n _load: function (data) {\n this._data = data;\n this.clear();\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n _markerClick: function (e) {\n var args = {\n marker: $(e.target).data('kendoMarker'),\n layer: this\n };\n this.map.trigger('markerClick', args);\n }\n });\n var Marker = Class.extend({\n init: function (options) {\n this.options = options || {};\n },\n addTo: function (parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n location: function (value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n if (this.layer) {\n this.layer.update(this);\n }\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n showAt: function (point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n },\n hide: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n destroy: function () {\n this.layer = null;\n this.hide();\n },\n render: function () {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n this.element = $(doc.createElement('span')).addClass('k-marker k-icon k-i-marker-' + kendo.toHyphens(options.shape || 'pin')).attr('title', options.title).attr(options.attributes || {}).data('kendoMarker', this).css('zIndex', options.zIndex);\n if (layer) {\n layer.element.append(this.element);\n }\n this.renderTooltip();\n }\n },\n renderTooltip: function () {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function (e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n Marker.create = function (arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n return new Marker(deepExtend({}, defaults, arg));\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/main', [\n 'dataviz/map/crs',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, min = math.min, pow = math.pow, proxy = $.proxy, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, ui = dataviz.ui, g = kendo.geometry, Point = g.Point, map = dataviz.map, Extent = map.Extent, Location = map.Location, EPSG3857 = map.crs.EPSG3857, util = kendo.util, renderPos = util.renderPos, drawingUtil = kendo.drawing.util, defined = drawingUtil.defined, limit = drawingUtil.limitValue, valueOrDefault = drawingUtil.valueOrDefault;\n var CSS_PREFIX = 'k-', FRICTION = 0.9, FRICTION_MOBILE = 0.93, MOUSEWHEEL = 'DOMMouseScroll mousewheel', VELOCITY_MULTIPLIER = 5;\n var Map = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n this._initOptions(options);\n this.bind(this.events, options);\n this.crs = new EPSG3857();\n this.element.addClass(CSS_PREFIX + this.options.name.toLowerCase()).css('position', 'relative').empty().append(doc.createElement('div'));\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n this._mousewheel = proxy(this._mousewheel, this);\n this.element.bind('click', proxy(this._click, this));\n this.element.bind(MOUSEWHEEL, this._mousewheel);\n },\n options: {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: { panStep: 100 },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: { color: '#fff' },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n }\n },\n center: [\n 0,\n 0\n ],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n },\n wraparound: true\n },\n events: [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n ],\n destroy: function () {\n this.scroller.destroy();\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n this.markers.destroy();\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n Widget.fn.destroy.call(this);\n },\n zoom: function (level) {\n var options = this.options;\n if (defined(level)) {\n level = math.round(limit(level, options.minZoom, options.maxZoom));\n if (options.zoom !== level) {\n options.zoom = level;\n this._reset();\n }\n return this;\n } else {\n return options.zoom;\n }\n },\n center: function (center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n return this;\n } else {\n return Location.create(this.options.center);\n }\n },\n extent: function (extent) {\n if (extent) {\n this._setExtent(extent);\n return this;\n } else {\n return this._getExtent();\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\n locationToLayer: function (location, zoom) {\n var clamp = !this.options.wraparound;\n location = Location.create(location);\n return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n },\n layerToLocation: function (point, zoom) {\n var clamp = !this.options.wraparound;\n point = Point.create(point);\n return this.crs.toLocation(point, this._layerSize(zoom), clamp);\n },\n locationToView: function (location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n return point.translateWith(origin.scale(-1));\n },\n viewToLocation: function (point, zoom) {\n var origin = this.locationToLayer(this._getOrigin(), zoom);\n point = Point.create(point);\n point = point.clone().translateWith(origin);\n return this.layerToLocation(point, zoom);\n },\n eventOffset: function (e) {\n var offset = this.element.offset();\n var event = e.originalEvent || e;\n var x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n var y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n return new g.Point(x, y);\n },\n eventToView: function (e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n eventToLayer: function (e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n eventToLocation: function (e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n viewSize: function () {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n return {\n width: width,\n height: min(scale, element.height())\n };\n },\n exportVisual: function () {\n this._reset();\n return false;\n },\n _setOrigin: function (origin, zoom) {\n var size = this.viewSize(), topLeft;\n origin = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(origin, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n return this;\n },\n _getOrigin: function (invalidate) {\n var size = this.viewSize(), topLeft;\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n return this._origin;\n },\n _setExtent: function (extent) {\n var raw = Extent.create(extent);\n var se = raw.se.clone();\n if (this.options.wraparound && se.lng < 0 && extent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n var width = this.element.width();\n var height = this.element.height();\n for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n var topLeft = this.locationToLayer(extent.nw, zoom);\n var bottomRight = this.locationToLayer(extent.se, zoom);\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n this.zoom(zoom);\n },\n _getExtent: function () {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n _zoomAround: function (pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n _initControls: function () {\n var controls = this.options.controls;\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n },\n _createControlElement: function (options, defaultPos) {\n var pos = options.position || defaultPos;\n var posSelector = '.' + renderPos(pos).replace(' ', '.');\n var wrap = $('.k-map-controls' + posSelector, this.element);\n if (wrap.length === 0) {\n wrap = $('
    ').addClass('k-map-controls ' + renderPos(pos)).appendTo(this.element);\n }\n return $('
    ').appendTo(wrap);\n },\n _createAttribution: function (options) {\n var element = this._createControlElement(options, 'bottomRight');\n this.attribution = new ui.Attribution(element, options);\n },\n _createNavigator: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var navigator = this.navigator = new ui.Navigator(element, options);\n this._navigatorPan = proxy(this._navigatorPan, this);\n navigator.bind('pan', this._navigatorPan);\n this._navigatorCenter = proxy(this._navigatorCenter, this);\n navigator.bind('center', this._navigatorCenter);\n },\n _navigatorPan: function (e) {\n var map = this;\n var scroller = map.scroller;\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n map.scroller.one('scroll', function (e) {\n map._scrollEnd(e);\n });\n map.scroller.scrollTo(-x, -y);\n },\n _navigatorCenter: function () {\n this.center(this.options.center);\n },\n _createZoomControl: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n this._zoomControlChange = proxy(this._zoomControlChange, this);\n zoomControl.bind('change', this._zoomControlChange);\n },\n _zoomControlChange: function (e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n },\n _initScroller: function () {\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n var zoomable = this.options.zoomable !== false;\n var scroller = this.scroller = new kendo.mobile.ui.Scroller(this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false\n });\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n this.scrollElement = scroller.scrollElement;\n },\n _initLayers: function () {\n var defs = this.options.layers, layers = this.layers = [];\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _initMarkers: function () {\n this.markers = new map.layers.MarkerLayer(this, this.options.markerDefaults);\n this.markers.add(this.options.markers);\n },\n _scroll: function (e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n this._setOrigin(this.layerToLocation(origin));\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _scrollEnd: function (e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n this._scrollOffset = null;\n this._panEndTS = new Date();\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _panComplete: function () {\n return new Date() - (this._panEndTS || 0) > 50;\n },\n _scaleStart: function (e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n var touch = e.touches[1];\n if (touch) {\n touch.cancel();\n }\n }\n },\n _scale: function (e) {\n var scale = this.scroller.movable.scale;\n var zoom = this._scaleToZoom(scale);\n var gestureCenter = new g.Point(e.center.x, e.center.y);\n var centerLocation = this.viewToLocation(gestureCenter, zoom);\n var centerPoint = this.locationToLayer(centerLocation, zoom);\n var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n this._zoomAround(originPoint, zoom);\n this.trigger('zoomEnd', { originalEvent: e });\n },\n _scaleToZoom: function (scaleDelta) {\n var scale = this._layerSize() * scaleDelta;\n var tiles = scale / this.options.minSize;\n var zoom = math.log(tiles) / math.log(2);\n return math.round(zoom);\n },\n _reset: function () {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger('beforeReset');\n this.trigger('reset');\n },\n _resetScroller: function () {\n var scroller = this.scroller;\n var x = scroller.dimensions.x;\n var y = scroller.dimensions.y;\n var scale = this._layerSize();\n var nw = this.extent().nw;\n var topLeft = this.locationToLayer(nw).round();\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n var zoom = this.zoom();\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n var xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n var yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n if (this.options.pannable === false) {\n var viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n },\n _renderLayers: function () {\n var defs = this.options.layers, layers = this.layers = [], scrollWrap = this.scrollWrap;\n scrollWrap.empty();\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _layerSize: function (zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n _click: function (e) {\n if (!this._panComplete()) {\n return;\n }\n var cursor = this.eventOffset(e);\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n },\n _mousewheel: function (e) {\n e.preventDefault();\n var delta = dataviz.mwDelta(e) > 0 ? -1 : 1;\n var options = this.options;\n var fromZoom = this.zoom();\n var toZoom = limit(fromZoom + delta, options.minZoom, options.maxZoom);\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n }\n });\n dataviz.ui.plugin(Map);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.map', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.tooltip',\n 'kendo.mobile.scroller',\n 'kendo.draganddrop',\n 'kendo.dataviz.core',\n 'dataviz/map/location',\n 'dataviz/map/attribution',\n 'dataviz/map/navigator',\n 'dataviz/map/zoom',\n 'dataviz/map/crs',\n 'dataviz/map/layers/base',\n 'dataviz/map/layers/shape',\n 'dataviz/map/layers/bubble',\n 'dataviz/map/layers/tile',\n 'dataviz/map/layers/bing',\n 'dataviz/map/layers/marker',\n 'dataviz/map/main'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.map',\n name: 'Map',\n category: 'dataviz',\n description: 'The Kendo DataViz Map displays spatial data',\n depends: [\n 'data',\n 'userevents',\n 'tooltip',\n 'dataviz.core',\n 'drawing',\n 'mobile.scroller'\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/utils', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram = {}, deepExtend = kendo.deepExtend, isArray = $.isArray, EPSILON = 0.000001;\n var Utils = {};\n deepExtend(Utils, {\n isNearZero: function (num) {\n return Math.abs(num) < EPSILON;\n },\n isDefined: function (obj) {\n return typeof obj !== 'undefined';\n },\n isUndefined: function (obj) {\n return typeof obj === 'undefined' || obj === null;\n },\n isObject: function (obj) {\n return obj === Object(obj);\n },\n has: function (obj, key) {\n return Object.hasOwnProperty.call(obj, key);\n },\n isString: function (obj) {\n return Object.prototype.toString.call(obj) == '[object String]';\n },\n isBoolean: function (obj) {\n return Object.prototype.toString.call(obj) == '[object Boolean]';\n },\n isType: function (obj, type) {\n return Object.prototype.toString.call(obj) == '[object ' + type + ']';\n },\n isNumber: function (obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n isEmpty: function (obj) {\n if (obj === null) {\n return true;\n }\n if (isArray(obj) || Utils.isString(obj)) {\n return obj.length === 0;\n }\n for (var key in obj) {\n if (Utils.has(obj, key)) {\n return false;\n }\n }\n return true;\n },\n simpleExtend: function (destination, source) {\n if (!Utils.isObject(source)) {\n return;\n }\n for (var name in source) {\n destination[name] = source[name];\n }\n },\n initArray: function createIdArray(size, value) {\n var array = [];\n for (var i = 0; i < size; ++i) {\n array[i] = value;\n }\n return array;\n },\n serializePoints: function (points) {\n var res = [];\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n res.push(p.x + ';' + p.y);\n }\n return res.join(';');\n },\n deserializePoints: function (s) {\n var v = s.split(';'), points = [];\n if (v.length % 2 !== 0) {\n throw 'Not an array of points.';\n }\n for (var i = 0; i < v.length; i += 2) {\n points.push(new diagram.Point(parseInt(v[i], 10), parseInt(v[i + 1], 10)));\n }\n return points;\n },\n randomInteger: function (lower, upper) {\n return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n },\n DFT: function (el, func) {\n func(el);\n if (el.childNodes) {\n for (var i = 0; i < el.childNodes.length; i++) {\n var item = el.childNodes[i];\n this.DFT(item, func);\n }\n }\n },\n getMatrixAngle: function (m) {\n if (m === null || m.d === 0) {\n return 0;\n }\n return Math.atan2(m.b, m.d) * 180 / Math.PI;\n },\n getMatrixScaling: function (m) {\n var sX = Math.sqrt(m.a * m.a + m.c * m.c);\n var sY = Math.sqrt(m.b * m.b + m.d * m.d);\n return [\n sX,\n sY\n ];\n }\n });\n function Range(start, stop, step) {\n if (typeof start == 'undefined' || typeof stop == 'undefined') {\n return [];\n }\n if (step && Utils.sign(stop - start) != Utils.sign(step)) {\n throw 'The sign of the increment should allow to reach the stop-value.';\n }\n step = step || 1;\n start = start || 0;\n stop = stop || start;\n if ((stop - start) / step === Infinity) {\n throw 'Infinite range defined.';\n }\n var range = [], i = -1, j;\n function rangeIntegerScale(x) {\n var k = 1;\n while (x * k % 1) {\n k *= 10;\n }\n return k;\n }\n var k = rangeIntegerScale(Math.abs(step));\n start *= k;\n stop *= k;\n step *= k;\n if (start > stop && step > 0) {\n step = -step;\n }\n if (step < 0) {\n while ((j = start + step * ++i) >= stop) {\n range.push(j / k);\n }\n } else {\n while ((j = start + step * ++i) <= stop) {\n range.push(j / k);\n }\n }\n return range;\n }\n function findRadian(start, end) {\n if (start == end) {\n return 0;\n }\n var sngXComp = end.x - start.x, sngYComp = start.y - end.y, atan = Math.atan(sngXComp / sngYComp);\n if (sngYComp >= 0) {\n return sngXComp < 0 ? atan + 2 * Math.PI : atan;\n }\n return atan + Math.PI;\n }\n Utils.sign = function (number) {\n return number ? number < 0 ? -1 : 1 : 0;\n };\n Utils.findAngle = function (center, end) {\n return findRadian(center, end) * 180 / Math.PI;\n };\n Utils.forEach = function (arr, iterator, thisRef) {\n for (var i = 0; i < arr.length; i++) {\n iterator.call(thisRef, arr[i], i, arr);\n }\n };\n Utils.any = function (arr, predicate) {\n for (var i = 0; i < arr.length; ++i) {\n if (predicate(arr[i])) {\n return arr[i];\n }\n }\n return null;\n };\n Utils.remove = function (arr, what) {\n var ax;\n while ((ax = Utils.indexOf(arr, what)) !== -1) {\n arr.splice(ax, 1);\n }\n return arr;\n };\n Utils.contains = function (arr, obj) {\n return Utils.indexOf(arr, obj) !== -1;\n };\n Utils.indexOf = function (arr, what) {\n return $.inArray(what, arr);\n };\n Utils.fold = function (list, iterator, acc, context) {\n var initial = arguments.length > 2;\n for (var i = 0; i < list.length; i++) {\n var value = list[i];\n if (!initial) {\n acc = value;\n initial = true;\n } else {\n acc = iterator.call(context, acc, value, i, list);\n }\n }\n if (!initial) {\n throw 'Reduce of empty array with no initial value';\n }\n return acc;\n };\n Utils.find = function (arr, iterator, context) {\n var result;\n Utils.any(arr, function (value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n return false;\n });\n return result;\n };\n Utils.first = function (arr, constraint, context) {\n if (arr.length === 0) {\n return null;\n }\n if (Utils.isUndefined(constraint)) {\n return arr[0];\n }\n return Utils.find(arr, constraint, context);\n };\n Utils.insert = function (arr, element, position) {\n arr.splice(position, 0, element);\n return arr;\n };\n Utils.all = function (arr, iterator, context) {\n var result = true;\n var value;\n for (var i = 0; i < arr.length; i++) {\n value = arr[i];\n result = result && iterator.call(context, value, i, arr);\n if (!result) {\n break;\n }\n }\n return result;\n };\n Utils.clear = function (arr) {\n arr.splice(0, arr.length);\n };\n Utils.bisort = function (a, b, sortfunc) {\n if (Utils.isUndefined(a)) {\n throw 'First array is not specified.';\n }\n if (Utils.isUndefined(b)) {\n throw 'Second array is not specified.';\n }\n if (a.length != b.length) {\n throw 'The two arrays should have equal length';\n }\n var all = [], i;\n for (i = 0; i < a.length; i++) {\n all.push({\n 'x': a[i],\n 'y': b[i]\n });\n }\n if (Utils.isUndefined(sortfunc)) {\n all.sort(function (m, n) {\n return m.x - n.x;\n });\n } else {\n all.sort(function (m, n) {\n return sortfunc(m.x, n.x);\n });\n }\n Utils.clear(a);\n Utils.clear(b);\n for (i = 0; i < all.length; i++) {\n a.push(all[i].x);\n b.push(all[i].y);\n }\n };\n Utils.addRange = function (arr, range) {\n arr.push.apply(arr, range);\n };\n var Easing = {\n easeInOut: function (pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5;\n }\n };\n var Ticker = kendo.Class.extend({\n init: function () {\n this.adapters = [];\n this.target = 0;\n this.tick = 0;\n this.interval = 20;\n this.duration = 800;\n this.lastTime = null;\n this.handlers = [];\n var _this = this;\n this.transition = Easing.easeInOut;\n this.timerDelegate = function () {\n _this.onTimerEvent();\n };\n },\n addAdapter: function (a) {\n this.adapters.push(a);\n },\n onComplete: function (handler) {\n this.handlers.push(handler);\n },\n removeHandler: function (handler) {\n this.handlers = $.grep(this.handlers, function (h) {\n return h !== handler;\n });\n },\n trigger: function () {\n var _this = this;\n if (this.handlers) {\n Utils.forEach(this.handlers, function (h) {\n return h.call(_this.caller !== null ? _this.caller : _this);\n });\n }\n },\n onStep: function () {\n },\n seekTo: function (to) {\n this.seekFromTo(this.tick, to);\n },\n seekFromTo: function (from, to) {\n this.target = Math.max(0, Math.min(1, to));\n this.tick = Math.max(0, Math.min(1, from));\n this.lastTime = new Date().getTime();\n if (!this.intervalId) {\n this.intervalId = window.setInterval(this.timerDelegate, this.interval);\n }\n },\n stop: function () {\n if (this.intervalId) {\n window.clearInterval(this.intervalId);\n this.intervalId = null;\n this.trigger();\n }\n },\n play: function (origin) {\n if (this.adapters.length === 0) {\n return;\n }\n if (origin !== null) {\n this.caller = origin;\n }\n this.initState();\n this.seekFromTo(0, 1);\n },\n reverse: function () {\n this.seekFromTo(1, 0);\n },\n initState: function () {\n if (this.adapters.length === 0) {\n return;\n }\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].initState();\n }\n },\n propagate: function () {\n var value = this.transition(this.tick);\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].update(value);\n }\n },\n onTimerEvent: function () {\n var now = new Date().getTime();\n var timePassed = now - this.lastTime;\n this.lastTime = now;\n var movement = timePassed / this.duration * (this.tick < this.target ? 1 : -1);\n if (Math.abs(movement) >= Math.abs(this.tick - this.target)) {\n this.tick = this.target;\n } else {\n this.tick += movement;\n }\n try {\n this.propagate();\n } finally {\n this.onStep.call(this);\n if (this.target == this.tick) {\n this.stop();\n }\n }\n }\n });\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Utils: Utils,\n Range: Range,\n Ticker: Ticker\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/math', [\n 'dataviz/diagram/utils',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, Utils = diagram.Utils, Point = dataviz.Point2D, isFunction = kendo.isFunction, contains = Utils.contains, map = $.map;\n var HITTESTAREA = 3, EPSILON = 0.000001;\n deepExtend(Point.fn, {\n plus: function (p) {\n return new Point(this.x + p.x, this.y + p.y);\n },\n minus: function (p) {\n return new Point(this.x - p.x, this.y - p.y);\n },\n offset: function (value) {\n return new Point(this.x - value, this.y - value);\n },\n times: function (s) {\n return new Point(this.x * s, this.y * s);\n },\n normalize: function () {\n if (this.length() === 0) {\n return new Point();\n }\n return this.times(1 / this.length());\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n toString: function () {\n return '(' + this.x + ',' + this.y + ')';\n },\n lengthSquared: function () {\n return this.x * this.x + this.y * this.y;\n },\n middleOf: function MiddleOf(p, q) {\n return new Point(q.x - p.x, q.y - p.y).times(0.5).plus(p);\n },\n toPolar: function (useDegrees) {\n var factor = 1;\n if (useDegrees) {\n factor = 180 / Math.PI;\n }\n var a = Math.atan2(Math.abs(this.y), Math.abs(this.x));\n var halfpi = Math.PI / 2;\n var len = this.length();\n if (this.x === 0) {\n if (this.y === 0) {\n return new Polar(0, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * halfpi);\n }\n if (this.y < 0) {\n return new Polar(len, factor * 3 * halfpi);\n }\n } else if (this.x > 0) {\n if (this.y === 0) {\n return new Polar(len, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * a);\n }\n if (this.y < 0) {\n return new Polar(len, factor * (4 * halfpi - a));\n }\n } else {\n if (this.y === 0) {\n return new Polar(len, 2 * halfpi);\n }\n if (this.y > 0) {\n return new Polar(len, factor * (2 * halfpi - a));\n }\n if (this.y < 0) {\n return new Polar(len, factor * (2 * halfpi + a));\n }\n }\n },\n isOnLine: function (from, to) {\n if (from.x > to.x) {\n var temp = to;\n to = from;\n from = temp;\n }\n var r1 = new Rect(from.x, from.y).inflate(HITTESTAREA, HITTESTAREA), r2 = new Rect(to.x, to.y).inflate(HITTESTAREA, HITTESTAREA), o1, u1;\n if (r1.union(r2).contains(this)) {\n if (from.x === to.x || from.y === to.y) {\n return true;\n } else if (from.y < to.y) {\n o1 = r1.x + (r2.x - r1.x) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - r1.y) / (r2.y - r1.y);\n } else {\n o1 = r1.x + (r2.x - r1.x) * (this.y - r1.y) / (r2.y - r1.y);\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n }\n return this.x > o1 && this.x < u1;\n }\n return false;\n }\n });\n deepExtend(Point, {\n parse: function (str) {\n var tempStr = str.slice(1, str.length - 1), xy = tempStr.split(','), x = parseInt(xy[0], 10), y = parseInt(xy[1], 10);\n if (!isNaN(x) && !isNaN(y)) {\n return new Point(x, y);\n }\n }\n });\n var PathDefiner = Class.extend({\n init: function (p, left, right) {\n this.point = p;\n this.left = left;\n this.right = right;\n }\n });\n var Rect = Class.extend({\n init: function (x, y, width, height) {\n this.x = x || 0;\n this.y = y || 0;\n this.width = width || 0;\n this.height = height || 0;\n },\n contains: function (point) {\n return point.x >= this.x && point.x <= this.x + this.width && point.y >= this.y && point.y <= this.y + this.height;\n },\n inflate: function (dx, dy) {\n if (dy === undefined) {\n dy = dx;\n }\n this.x -= dx;\n this.y -= dy;\n this.width += 2 * dx + 1;\n this.height += 2 * dy + 1;\n return this;\n },\n offset: function (dx, dy) {\n var x = dx, y = dy;\n if (dx instanceof Point) {\n x = dx.x;\n y = dx.y;\n }\n this.x += x;\n this.y += y;\n return this;\n },\n union: function (r) {\n var x1 = Math.min(this.x, r.x);\n var y1 = Math.min(this.y, r.y);\n var x2 = Math.max(this.x + this.width, r.x + r.width);\n var y2 = Math.max(this.y + this.height, r.y + r.height);\n return new Rect(x1, y1, x2 - x1, y2 - y1);\n },\n center: function () {\n return new Point(this.x + this.width / 2, this.y + this.height / 2);\n },\n top: function () {\n return new Point(this.x + this.width / 2, this.y);\n },\n right: function () {\n return new Point(this.x + this.width, this.y + this.height / 2);\n },\n bottom: function () {\n return new Point(this.x + this.width / 2, this.y + this.height);\n },\n left: function () {\n return new Point(this.x, this.y + this.height / 2);\n },\n topLeft: function () {\n return new Point(this.x, this.y);\n },\n topRight: function () {\n return new Point(this.x + this.width, this.y);\n },\n bottomLeft: function () {\n return new Point(this.x, this.y + this.height);\n },\n bottomRight: function () {\n return new Point(this.x + this.width, this.y + this.height);\n },\n clone: function () {\n return new Rect(this.x, this.y, this.width, this.height);\n },\n isEmpty: function () {\n return !this.width && !this.height;\n },\n equals: function (rect) {\n return this.x === rect.x && this.y === rect.y && this.width === rect.width && this.height === rect.height;\n },\n rotatedBounds: function (angle) {\n var rect = this.clone(), points = this.rotatedPoints(angle), tl = points[0], tr = points[1], br = points[2], bl = points[3];\n rect.x = Math.min(br.x, tl.x, tr.x, bl.x);\n rect.y = Math.min(br.y, tl.y, tr.y, bl.y);\n rect.width = Math.max(br.x, tl.x, tr.x, bl.x) - rect.x;\n rect.height = Math.max(br.y, tl.y, tr.y, bl.y) - rect.y;\n return rect;\n },\n rotatedPoints: function (angle) {\n var rect = this, c = rect.center(), br = rect.bottomRight().rotate(c, 360 - angle), tl = rect.topLeft().rotate(c, 360 - angle), tr = rect.topRight().rotate(c, 360 - angle), bl = rect.bottomLeft().rotate(c, 360 - angle);\n return [\n tl,\n tr,\n br,\n bl\n ];\n },\n toString: function (delimiter) {\n delimiter = delimiter || ' ';\n return this.x + delimiter + this.y + delimiter + this.width + delimiter + this.height;\n },\n scale: function (scaleX, scaleY, staicPoint, adornerCenter, angle) {\n var tl = this.topLeft();\n var thisCenter = this.center();\n tl.rotate(thisCenter, 360 - angle).rotate(adornerCenter, angle);\n var delta = staicPoint.minus(tl);\n var scaled = new Point(delta.x * scaleX, delta.y * scaleY);\n var position = delta.minus(scaled);\n tl = tl.plus(position);\n tl.rotate(adornerCenter, 360 - angle).rotate(thisCenter, angle);\n this.x = tl.x;\n this.y = tl.y;\n this.width *= scaleX;\n this.height *= scaleY;\n },\n zoom: function (zoom) {\n this.x *= zoom;\n this.y *= zoom;\n this.width *= zoom;\n this.height *= zoom;\n return this;\n },\n overlaps: function (rect) {\n var bottomRight = this.bottomRight();\n var rectBottomRight = rect.bottomRight();\n var overlaps = !(bottomRight.x < rect.x || bottomRight.y < rect.y || rectBottomRight.x < this.x || rectBottomRight.y < this.y);\n return overlaps;\n }\n });\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width;\n this.height = height;\n }\n });\n Size.prototype.Empty = new Size(0, 0);\n Rect.toRect = function (rect) {\n if (!(rect instanceof Rect)) {\n rect = new Rect(rect.x, rect.y, rect.width, rect.height);\n }\n return rect;\n };\n Rect.empty = function () {\n return new Rect(0, 0, 0, 0);\n };\n Rect.fromPoints = function (p, q) {\n if (isNaN(p.x) || isNaN(p.y) || isNaN(q.x) || isNaN(q.y)) {\n throw 'Some values are NaN.';\n }\n return new Rect(Math.min(p.x, q.x), Math.min(p.y, q.y), Math.abs(p.x - q.x), Math.abs(p.y - q.y));\n };\n function isNearZero(num) {\n return Math.abs(num) < EPSILON;\n }\n function intersectLine(start1, end1, start2, end2, isSegment) {\n var tangensdiff = (end1.x - start1.x) * (end2.y - start2.y) - (end1.y - start1.y) * (end2.x - start2.x);\n if (isNearZero(tangensdiff)) {\n return;\n }\n var num1 = (start1.y - start2.y) * (end2.x - start2.x) - (start1.x - start2.x) * (end2.y - start2.y);\n var num2 = (start1.y - start2.y) * (end1.x - start1.x) - (start1.x - start2.x) * (end1.y - start1.y);\n var r = num1 / tangensdiff;\n var s = num2 / tangensdiff;\n if (isSegment && (r < 0 || r > 1 || s < 0 || s > 1)) {\n return;\n }\n return new Point(start1.x + r * (end1.x - start1.x), start1.y + r * (end1.y - start1.y));\n }\n var Intersect = {\n lines: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2);\n },\n segments: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2, true);\n },\n rectWithLine: function (rect, start, end) {\n return Intersect.segments(start, end, rect.topLeft(), rect.topRight()) || Intersect.segments(start, end, rect.topRight(), rect.bottomRight()) || Intersect.segments(start, end, rect.bottomLeft(), rect.bottomRight()) || Intersect.segments(start, end, rect.topLeft(), rect.bottomLeft());\n },\n rects: function (rect1, rect2, angle) {\n var tl = rect2.topLeft(), tr = rect2.topRight(), bl = rect2.bottomLeft(), br = rect2.bottomRight();\n var center = rect2.center();\n if (angle) {\n tl = tl.rotate(center, angle);\n tr = tr.rotate(center, angle);\n bl = bl.rotate(center, angle);\n br = br.rotate(center, angle);\n }\n var intersect = rect1.contains(tl) || rect1.contains(tr) || rect1.contains(bl) || rect1.contains(br) || Intersect.rectWithLine(rect1, tl, tr) || Intersect.rectWithLine(rect1, tl, bl) || Intersect.rectWithLine(rect1, tr, br) || Intersect.rectWithLine(rect1, bl, br);\n if (!intersect) {\n tl = rect1.topLeft();\n tr = rect1.topRight();\n bl = rect1.bottomLeft();\n br = rect1.bottomRight();\n if (angle) {\n var reverseAngle = 360 - angle;\n tl = tl.rotate(center, reverseAngle);\n tr = tr.rotate(center, reverseAngle);\n bl = bl.rotate(center, reverseAngle);\n br = br.rotate(center, reverseAngle);\n }\n intersect = rect2.contains(tl) || rect2.contains(tr) || rect2.contains(bl) || rect2.contains(br);\n }\n return intersect;\n }\n };\n var RectAlign = Class.extend({\n init: function (container) {\n this.container = Rect.toRect(container);\n },\n align: function (content, alignment) {\n var alignValues = alignment.toLowerCase().split(' ');\n for (var i = 0; i < alignValues.length; i++) {\n content = this._singleAlign(content, alignValues[i]);\n }\n return content;\n },\n _singleAlign: function (content, alignment) {\n if (isFunction(this[alignment])) {\n return this[alignment](content);\n } else {\n return content;\n }\n },\n left: function (content) {\n return this._align(content, this._left);\n },\n center: function (content) {\n return this._align(content, this._center);\n },\n right: function (content) {\n return this._align(content, this._right);\n },\n stretch: function (content) {\n return this._align(content, this._stretch);\n },\n top: function (content) {\n return this._align(content, this._top);\n },\n middle: function (content) {\n return this._align(content, this._middle);\n },\n bottom: function (content) {\n return this._align(content, this._bottom);\n },\n _left: function (container, content) {\n content.x = container.x;\n },\n _center: function (container, content) {\n content.x = (container.width - content.width) / 2 || 0;\n },\n _right: function (container, content) {\n content.x = container.width - content.width;\n },\n _top: function (container, content) {\n content.y = container.y;\n },\n _middle: function (container, content) {\n content.y = (container.height - content.height) / 2 || 0;\n },\n _bottom: function (container, content) {\n content.y = container.height - content.height;\n },\n _stretch: function (container, content) {\n content.x = 0;\n content.y = 0;\n content.height = container.height;\n content.width = container.width;\n },\n _align: function (content, alignCalc) {\n content = Rect.toRect(content);\n alignCalc(this.container, content);\n return content;\n }\n });\n var Polar = Class.extend({\n init: function (r, a) {\n this.r = r;\n this.angle = a;\n }\n });\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n plus: function (m) {\n this.a += m.a;\n this.b += m.b;\n this.c += m.c;\n this.d += m.d;\n this.e += m.e;\n this.f += m.f;\n },\n minus: function (m) {\n this.a -= m.a;\n this.b -= m.b;\n this.c -= m.c;\n this.d -= m.d;\n this.e -= m.e;\n this.f -= m.f;\n },\n times: function (m) {\n return new Matrix(this.a * m.a + this.c * m.b, this.b * m.a + this.d * m.b, this.a * m.c + this.c * m.d, this.b * m.c + this.d * m.d, this.a * m.e + this.c * m.f + this.e, this.b * m.e + this.d * m.f + this.f);\n },\n apply: function (p) {\n return new Point(this.a * p.x + this.c * p.y + this.e, this.b * p.x + this.d * p.y + this.f);\n },\n applyRect: function (r) {\n return Rect.fromPoints(this.apply(r.topLeft()), this.apply(r.bottomRight()));\n },\n toString: function () {\n return 'matrix(' + this.a + ' ' + this.b + ' ' + this.c + ' ' + this.d + ' ' + this.e + ' ' + this.f + ')';\n }\n });\n deepExtend(Matrix, {\n fromSVGMatrix: function (vm) {\n var m = new Matrix();\n m.a = vm.a;\n m.b = vm.b;\n m.c = vm.c;\n m.d = vm.d;\n m.e = vm.e;\n m.f = vm.f;\n return m;\n },\n fromMatrixVector: function (v) {\n var m = new Matrix();\n m.a = v.a;\n m.b = v.b;\n m.c = v.c;\n m.d = v.d;\n m.e = v.e;\n m.f = v.f;\n return m;\n },\n fromList: function (v) {\n if (v.length !== 6) {\n throw 'The given list should consist of six elements.';\n }\n var m = new Matrix();\n m.a = v[0];\n m.b = v[1];\n m.c = v[2];\n m.d = v[3];\n m.e = v[4];\n m.f = v[5];\n return m;\n },\n translation: function (x, y) {\n var m = new Matrix();\n m.a = 1;\n m.b = 0;\n m.c = 0;\n m.d = 1;\n m.e = x;\n m.f = y;\n return m;\n },\n unit: function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n },\n rotation: function (angle, x, y) {\n var m = new Matrix();\n m.a = Math.cos(angle * Math.PI / 180);\n m.b = Math.sin(angle * Math.PI / 180);\n m.c = -m.b;\n m.d = m.a;\n m.e = x - x * m.a + y * m.b || 0;\n m.f = y - y * m.a - x * m.b || 0;\n return m;\n },\n scaling: function (scaleX, scaleY) {\n var m = new Matrix();\n m.a = scaleX;\n m.b = 0;\n m.c = 0;\n m.d = scaleY;\n m.e = 0;\n m.f = 0;\n return m;\n },\n parse: function (v) {\n var parts, nums;\n if (v) {\n v = v.trim();\n if (v.slice(0, 6).toLowerCase() === 'matrix') {\n nums = v.slice(7, v.length - 1).trim();\n parts = nums.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n parts = nums.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.slice(0, 1) === '(' && v.slice(v.length - 1) === ')') {\n v = v.substr(1, v.length - 1);\n }\n if (v.indexOf(',') > 0) {\n parts = v.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.indexOf(' ') > 0) {\n parts = v.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n }\n return parts;\n }\n });\n var MatrixVector = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n fromMatrix: function FromMatrix(m) {\n var v = new MatrixVector();\n v.a = m.a;\n v.b = m.b;\n v.c = m.c;\n v.d = m.d;\n v.e = m.e;\n v.f = m.f;\n return v;\n }\n });\n function normalVariable(mean, deviation) {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);\n }\n function randomId(length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n var result = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n for (var i = length; i > 0; --i) {\n result += chars.charAt(Math.round(Math.random() * (chars.length - 1)));\n }\n return result;\n }\n var Geometry = {\n _distanceToLineSquared: function (p, a, b) {\n function d2(pt1, pt2) {\n return (pt1.x - pt2.x) * (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y);\n }\n if (a === b) {\n return d2(p, a);\n }\n var vx = b.x - a.x, vy = b.y - a.y, dot = (p.x - a.x) * vx + (p.y - a.y) * vy;\n if (dot < 0) {\n return d2(a, p);\n }\n dot = (b.x - p.x) * vx + (b.y - p.y) * vy;\n if (dot < 0) {\n return d2(b, p);\n }\n dot = (b.x - p.x) * vy - (b.y - p.y) * vx;\n return dot * dot / (vx * vx + vy * vy);\n },\n distanceToLine: function (p, a, b) {\n return Math.sqrt(this._distanceToLineSquared(p, a, b));\n },\n distanceToPolyline: function (p, points) {\n var minimum = Number.MAX_VALUE;\n if (Utils.isUndefined(points) || points.length === 0) {\n return Number.MAX_VALUE;\n }\n for (var s = 0; s < points.length - 1; s++) {\n var p1 = points[s];\n var p2 = points[s + 1];\n var d = this._distanceToLineSquared(p, p1, p2);\n if (d < minimum) {\n minimum = d;\n }\n }\n return Math.sqrt(minimum);\n }\n };\n var HashTable = kendo.Class.extend({\n init: function () {\n this._buckets = [];\n this.length = 0;\n },\n add: function (key, value) {\n var obj = this._createGetBucket(key);\n if (Utils.isDefined(value)) {\n obj.value = value;\n }\n return obj;\n },\n get: function (key) {\n if (this._bucketExists(key)) {\n return this._createGetBucket(key);\n }\n return null;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n containsKey: function (key) {\n return this._bucketExists(key);\n },\n remove: function (key) {\n if (this._bucketExists(key)) {\n var hashId = this._hash(key);\n delete this._buckets[hashId];\n this.length--;\n return key;\n }\n },\n forEach: function (func) {\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n func(bucket);\n }\n },\n clone: function () {\n var ht = new HashTable();\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n ht.add(bucket.key, bucket.value);\n }\n return ht;\n },\n _hashes: function () {\n var hashes = [];\n for (var hash in this._buckets) {\n if (this._buckets.hasOwnProperty(hash)) {\n hashes.push(hash);\n }\n }\n return hashes;\n },\n _bucketExists: function (key) {\n var hashId = this._hash(key);\n return Utils.isDefined(this._buckets[hashId]);\n },\n _createGetBucket: function (key) {\n var hashId = this._hash(key);\n var bucket = this._buckets[hashId];\n if (Utils.isUndefined(bucket)) {\n bucket = { key: key };\n this._buckets[hashId] = bucket;\n this.length++;\n }\n return bucket;\n },\n _hash: function (key) {\n if (Utils.isNumber(key)) {\n return key;\n }\n if (Utils.isString(key)) {\n return this._hashString(key);\n }\n if (Utils.isObject(key)) {\n return this._objectHashId(key);\n }\n throw 'Unsupported key type.';\n },\n _hashString: function (s) {\n var result = 0;\n if (s.length === 0) {\n return result;\n }\n for (var i = 0; i < s.length; i++) {\n var ch = s.charCodeAt(i);\n result = result * 32 - result + ch;\n }\n return result;\n },\n _objectHashId: function (key) {\n var id = key._hashId;\n if (Utils.isUndefined(id)) {\n id = randomId();\n key._hashId = id;\n }\n return id;\n }\n });\n var Dictionary = kendo.Observable.extend({\n init: function (dictionary) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(dictionary)) {\n if ($.isArray(dictionary)) {\n for (var i = 0; i < dictionary.length; i++) {\n this.add(dictionary[i]);\n }\n } else {\n dictionary.forEach(function (k, v) {\n this.add(k, v);\n }, this);\n }\n }\n },\n add: function (key, value) {\n var entry = this._hashTable.get(key);\n if (!entry) {\n entry = this._hashTable.add(key);\n this.length++;\n this.trigger('changed');\n }\n entry.value = value;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n get: function (key) {\n var entry = this._hashTable.get(key);\n if (entry) {\n return entry.value;\n }\n throw new Error('Cannot find key ' + key);\n },\n containsKey: function (key) {\n return this._hashTable.containsKey(key);\n },\n remove: function (key) {\n if (this.containsKey(key)) {\n this.trigger('changed');\n this.length--;\n return this._hashTable.remove(key);\n }\n },\n forEach: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key, entry.value);\n });\n },\n forEachValue: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.value);\n });\n },\n forEachKey: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key);\n });\n },\n keys: function () {\n var keys = [];\n this.forEachKey(function (key) {\n keys.push(key);\n });\n return keys;\n }\n });\n var Queue = kendo.Class.extend({\n init: function () {\n this._tail = null;\n this._head = null;\n this.length = 0;\n },\n enqueue: function (value) {\n var entry = {\n value: value,\n next: null\n };\n if (!this._head) {\n this._head = entry;\n this._tail = this._head;\n } else {\n this._tail.next = entry;\n this._tail = this._tail.next;\n }\n this.length++;\n },\n dequeue: function () {\n if (this.length < 1) {\n throw new Error('The queue is empty.');\n }\n var value = this._head.value;\n this._head = this._head.next;\n this.length--;\n return value;\n },\n contains: function (item) {\n var current = this._head;\n while (current) {\n if (current.value === item) {\n return true;\n }\n current = current.next;\n }\n return false;\n }\n });\n var Set = kendo.Observable.extend({\n init: function (resource) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(resource)) {\n if (resource instanceof HashTable) {\n resource.forEach(function (d) {\n this.add(d);\n });\n } else if (resource instanceof Dictionary) {\n resource.forEach(function (k, v) {\n this.add({\n key: k,\n value: v\n });\n }, this);\n }\n }\n },\n contains: function (item) {\n return this._hashTable.containsKey(item);\n },\n add: function (item) {\n var entry = this._hashTable.get(item);\n if (!entry) {\n this._hashTable.add(item, item);\n this.length++;\n this.trigger('changed');\n }\n },\n get: function (item) {\n if (this.contains(item)) {\n return this._hashTable.get(item).value;\n } else {\n return null;\n }\n },\n hash: function (item) {\n return this._hashTable._hash(item);\n },\n remove: function (item) {\n if (this.contains(item)) {\n this._hashTable.remove(item);\n this.length--;\n this.trigger('changed');\n }\n },\n forEach: function (func, context) {\n this._hashTable.forEach(function (kv) {\n func(kv.value);\n }, context);\n },\n toArray: function () {\n var r = [];\n this.forEach(function (d) {\n r.push(d);\n });\n return r;\n }\n });\n var Node = kendo.Class.extend({\n init: function (id, shape) {\n this.links = [];\n this.outgoing = [];\n this.incoming = [];\n this.weight = 1;\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(shape)) {\n this.associatedShape = shape;\n var b = shape.bounds();\n this.width = b.width;\n this.height = b.height;\n this.x = b.x;\n this.y = b.y;\n } else {\n this.associatedShape = null;\n }\n this.data = null;\n this.type = 'Node';\n this.shortForm = 'Node \\'' + this.id + '\\'';\n this.isVirtual = false;\n },\n isIsolated: function () {\n return Utils.isEmpty(this.links);\n },\n bounds: function (r) {\n if (!Utils.isDefined(r)) {\n return new diagram.Rect(this.x, this.y, this.width, this.height);\n }\n this.x = r.x;\n this.y = r.y;\n this.width = r.width;\n this.height = r.height;\n },\n isLinkedTo: function (node) {\n var that = this;\n return Utils.any(that.links, function (link) {\n return link.getComplement(that) === node;\n });\n },\n getChildren: function () {\n if (this.outgoing.length === 0) {\n return [];\n }\n var children = [];\n for (var i = 0, len = this.outgoing.length; i < len; i++) {\n var link = this.outgoing[i];\n children.push(link.getComplement(this));\n }\n return children;\n },\n getParents: function () {\n if (this.incoming.length === 0) {\n return [];\n }\n var parents = [];\n for (var i = 0, len = this.incoming.length; i < len; i++) {\n var link = this.incoming[i];\n parents.push(link.getComplement(this));\n }\n return parents;\n },\n clone: function () {\n var copy = new Node();\n if (Utils.isDefined(this.weight)) {\n copy.weight = this.weight;\n }\n if (Utils.isDefined(this.balance)) {\n copy.balance = this.balance;\n }\n if (Utils.isDefined(this.owner)) {\n copy.owner = this.owner;\n }\n copy.associatedShape = this.associatedShape;\n copy.x = this.x;\n copy.y = this.y;\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n },\n adjacentTo: function (node) {\n return this.isLinkedTo(node) !== null;\n },\n removeLink: function (link) {\n if (link.source === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.outgoing, link);\n link.source = null;\n }\n if (link.target === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.incoming, link);\n link.target = null;\n }\n },\n hasLinkTo: function (node) {\n return Utils.any(this.outgoing, function (link) {\n return link.target === node;\n });\n },\n degree: function () {\n return this.links.length;\n },\n incidentWith: function (link) {\n return contains(this.links, link);\n },\n getLinksWith: function (node) {\n return Utils.all(this.links, function (link) {\n return link.getComplement(this) === node;\n }, this);\n },\n getNeighbors: function () {\n var neighbors = [];\n Utils.forEach(this.incoming, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n Utils.forEach(this.outgoing, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n return neighbors;\n }\n });\n var Link = kendo.Class.extend({\n init: function (source, target, id, connection) {\n if (Utils.isUndefined(source)) {\n throw 'The source of the new link is not set.';\n }\n if (Utils.isUndefined(target)) {\n throw 'The target of the new link is not set.';\n }\n var sourceFound, targetFound;\n if (Utils.isString(source)) {\n sourceFound = new Node(source);\n } else {\n sourceFound = source;\n }\n if (Utils.isString(target)) {\n targetFound = new Node(target);\n } else {\n targetFound = target;\n }\n this.source = sourceFound;\n this.target = targetFound;\n this.source.links.push(this);\n this.target.links.push(this);\n this.source.outgoing.push(this);\n this.target.incoming.push(this);\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(connection)) {\n this.associatedConnection = connection;\n } else {\n this.associatedConnection = null;\n }\n this.type = 'Link';\n this.shortForm = 'Link \\'' + this.source.id + '->' + this.target.id + '\\'';\n },\n getComplement: function (node) {\n if (this.source !== node && this.target !== node) {\n throw 'The given node is not incident with this link.';\n }\n return this.source === node ? this.target : this.source;\n },\n getCommonNode: function (link) {\n if (this.source === link.source || this.source === link.target) {\n return this.source;\n }\n if (this.target === link.source || this.target === link.target) {\n return this.target;\n }\n return null;\n },\n isBridging: function (v1, v2) {\n return this.source === v1 && this.target === v2 || this.source === v2 && this.target === v1;\n },\n getNodes: function () {\n return [\n this.source,\n this.target\n ];\n },\n incidentWith: function (node) {\n return this.source === node || this.target === node;\n },\n adjacentTo: function (link) {\n return contains(this.source.links, link) || contains(this.target.links, link);\n },\n changeSource: function (node) {\n Utils.remove(this.source.links, this);\n Utils.remove(this.source.outgoing, this);\n node.links.push(this);\n node.outgoing.push(this);\n this.source = node;\n },\n changeTarget: function (node) {\n Utils.remove(this.target.links, this);\n Utils.remove(this.target.incoming, this);\n node.links.push(this);\n node.incoming.push(this);\n this.target = node;\n },\n changesNodes: function (v, w) {\n if (this.source === v) {\n this.changeSource(w);\n } else if (this.target === v) {\n this.changeTarget(w);\n }\n },\n reverse: function () {\n var oldSource = this.source;\n var oldTarget = this.target;\n this.source = oldTarget;\n Utils.remove(oldSource.outgoing, this);\n this.source.outgoing.push(this);\n this.target = oldSource;\n Utils.remove(oldTarget.incoming, this);\n this.target.incoming.push(this);\n return this;\n },\n directTo: function (target) {\n if (this.source !== target && this.target !== target) {\n throw 'The given node is not incident with this link.';\n }\n if (this.target !== target) {\n this.reverse();\n }\n },\n createReverseEdge: function () {\n var r = this.clone();\n r.reverse();\n r.reversed = true;\n return r;\n },\n clone: function () {\n var clone = new Link(this.source, this.target);\n return clone;\n }\n });\n var Graph = kendo.Class.extend({\n init: function (idOrDiagram) {\n this.links = [];\n this.nodes = [];\n this._nodeMap = new Dictionary();\n this.diagram = null;\n this._root = null;\n if (Utils.isDefined(idOrDiagram)) {\n if (Utils.isString(idOrDiagram)) {\n this.id = idOrDiagram;\n } else {\n this.diagram = idOrDiagram;\n this.id = idOrDiagram.id;\n }\n } else {\n this.id = randomId();\n }\n this.bounds = new Rect();\n this._hasCachedRelationships = false;\n this.type = 'Graph';\n },\n cacheRelationships: function (forceRebuild) {\n if (Utils.isUndefined(forceRebuild)) {\n forceRebuild = false;\n }\n if (this._hasCachedRelationships && !forceRebuild) {\n return;\n }\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n node.children = this.getChildren(node);\n node.parents = this.getParents(node);\n }\n this._hasCachedRelationships = true;\n },\n assignLevels: function (startNode, offset, visited) {\n if (!startNode) {\n throw 'Start node not specified.';\n }\n if (Utils.isUndefined(offset)) {\n offset = 0;\n }\n this.cacheRelationships();\n if (Utils.isUndefined(visited)) {\n visited = new Dictionary();\n Utils.forEach(this.nodes, function (n) {\n visited.add(n, false);\n });\n }\n visited.set(startNode, true);\n startNode.level = offset;\n var children = startNode.children;\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (!child || visited.get(child)) {\n continue;\n }\n this.assignLevels(child, offset + 1, visited);\n }\n },\n root: function (value) {\n if (Utils.isUndefined(value)) {\n if (!this._root) {\n var found = Utils.first(this.nodes, function (n) {\n return n.incoming.length === 0;\n });\n if (found) {\n return found;\n }\n return Utils.first(this.nodes);\n } else {\n return this._root;\n }\n } else {\n this._root = value;\n }\n },\n getConnectedComponents: function () {\n this.componentIndex = 0;\n this.setItemIndices();\n var componentId = Utils.initArray(this.nodes.length, -1);\n for (var v = 0; v < this.nodes.length; v++) {\n if (componentId[v] === -1) {\n this._collectConnectedNodes(componentId, v);\n this.componentIndex++;\n }\n }\n var components = [], i;\n for (i = 0; i < this.componentIndex; ++i) {\n components[i] = new Graph();\n }\n for (i = 0; i < componentId.length; ++i) {\n var graph = components[componentId[i]];\n graph.addNodeAndOutgoings(this.nodes[i]);\n }\n components.sort(function (a, b) {\n return b.nodes.length - a.nodes.length;\n });\n return components;\n },\n _collectConnectedNodes: function (setIds, nodeIndex) {\n setIds[nodeIndex] = this.componentIndex;\n var node = this.nodes[nodeIndex];\n Utils.forEach(node.links, function (link) {\n var next = link.getComplement(node);\n var nextId = next.index;\n if (setIds[nextId] === -1) {\n this._collectConnectedNodes(setIds, nextId);\n }\n }, this);\n },\n calcBounds: function () {\n if (this.isEmpty()) {\n this.bounds = new Rect();\n return this.bounds;\n }\n var b = null;\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (!b) {\n b = node.bounds();\n } else {\n b = b.union(node.bounds());\n }\n }\n this.bounds = b;\n return this.bounds;\n },\n getSpanningTree: function (root) {\n var tree = new Graph();\n var map = new Dictionary(), source, target;\n tree.root = root.clone();\n tree.root.level = 0;\n tree.root.id = root.id;\n map.add(root, tree.root);\n root.level = 0;\n var visited = [];\n var remaining = [];\n tree._addNode(tree.root);\n visited.push(root);\n remaining.push(root);\n var levelCount = 1;\n while (remaining.length > 0) {\n var next = remaining.pop();\n for (var ni = 0; ni < next.links.length; ni++) {\n var link = next.links[ni];\n var cn = link.getComplement(next);\n if (contains(visited, cn)) {\n continue;\n }\n cn.level = next.level + 1;\n if (levelCount < cn.level + 1) {\n levelCount = cn.level + 1;\n }\n if (!contains(remaining, cn)) {\n remaining.push(cn);\n }\n if (!contains(visited, cn)) {\n visited.push(cn);\n }\n if (map.containsKey(next)) {\n source = map.get(next);\n } else {\n source = next.clone();\n source.level = next.level;\n source.id = next.id;\n map.add(next, source);\n }\n if (map.containsKey(cn)) {\n target = map.get(cn);\n } else {\n target = cn.clone();\n target.level = cn.level;\n target.id = cn.id;\n map.add(cn, target);\n }\n var newLink = new Link(source, target);\n tree.addLink(newLink);\n }\n }\n var treeLevels = [];\n for (var i = 0; i < levelCount; i++) {\n treeLevels.push([]);\n }\n Utils.forEach(tree.nodes, function (node) {\n treeLevels[node.level].push(node);\n });\n tree.treeLevels = treeLevels;\n tree.cacheRelationships();\n return tree;\n },\n takeRandomNode: function (excludedNodes, incidenceLessThan) {\n if (Utils.isUndefined(excludedNodes)) {\n excludedNodes = [];\n }\n if (Utils.isUndefined(incidenceLessThan)) {\n incidenceLessThan = 4;\n }\n if (this.nodes.length === 0) {\n return null;\n }\n if (this.nodes.length === 1) {\n return contains(excludedNodes, this.nodes[0]) ? null : this.nodes[0];\n }\n var pool = $.grep(this.nodes, function (node) {\n return !contains(excludedNodes, node) && node.degree() <= incidenceLessThan;\n });\n if (Utils.isEmpty(pool)) {\n return null;\n }\n return pool[Utils.randomInteger(0, pool.length)];\n },\n isEmpty: function () {\n return Utils.isEmpty(this.nodes);\n },\n isHealthy: function () {\n return Utils.all(this.links, function (link) {\n return contains(this.nodes, link.source) && contains(this.nodes, link.target);\n }, this);\n },\n getParents: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getParents();\n },\n getChildren: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getChildren();\n },\n addLink: function (sourceOrLink, target, owner) {\n if (Utils.isUndefined(sourceOrLink)) {\n throw 'The source of the link is not defined.';\n }\n if (Utils.isUndefined(target)) {\n if (Utils.isDefined(sourceOrLink.type) && sourceOrLink.type === 'Link') {\n this.addExistingLink(sourceOrLink);\n return;\n } else {\n throw 'The target of the link is not defined.';\n }\n }\n var foundSource = this.getNode(sourceOrLink);\n if (Utils.isUndefined(foundSource)) {\n foundSource = this.addNode(sourceOrLink);\n }\n var foundTarget = this.getNode(target);\n if (Utils.isUndefined(foundTarget)) {\n foundTarget = this.addNode(target);\n }\n var newLink = new Link(foundSource, foundTarget);\n if (Utils.isDefined(owner)) {\n newLink.owner = owner;\n }\n this.links.push(newLink);\n return newLink;\n },\n removeAllLinks: function () {\n while (this.links.length > 0) {\n var link = this.links[0];\n this.removeLink(link);\n }\n },\n addExistingLink: function (link) {\n if (this.hasLink(link)) {\n return;\n }\n this.links.push(link);\n if (this.hasNode(link.source.id)) {\n var s = this.getNode(link.source.id);\n link.changeSource(s);\n } else {\n this.addNode(link.source);\n }\n if (this.hasNode(link.target.id)) {\n var t = this.getNode(link.target.id);\n link.changeTarget(t);\n } else {\n this.addNode(link.target);\n }\n },\n hasLink: function (linkOrId) {\n if (Utils.isString(linkOrId)) {\n return Utils.any(this.links, function (link) {\n return link.id === linkOrId;\n });\n }\n if (linkOrId.type === 'Link') {\n return contains(this.links, linkOrId);\n }\n throw 'The given object is neither an identifier nor a Link.';\n },\n getNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n if (this._nodeMap.containsKey(id)) {\n return this._nodeMap.get(id);\n }\n },\n hasNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n return this._nodeMap.containsKey(id);\n },\n _addNode: function (node) {\n this.nodes.push(node);\n this._nodeMap.add(node.id, node);\n },\n _removeNode: function (node) {\n Utils.remove(this.nodes, node);\n this._nodeMap.remove(node.id);\n },\n removeNode: function (nodeOrId) {\n var n = nodeOrId;\n if (Utils.isString(nodeOrId)) {\n n = this.getNode(nodeOrId);\n }\n if (Utils.isDefined(n)) {\n var links = n.links;\n n.links = [];\n for (var i = 0, len = links.length; i < len; i++) {\n var link = links[i];\n this.removeLink(link);\n }\n this._removeNode(n);\n } else {\n throw 'The identifier should be a Node or the Id (string) of a node.';\n }\n },\n areConnected: function (n1, n2) {\n return Utils.any(this.links, function (link) {\n return link.source == n1 && link.target == n2 || link.source == n2 && link.target == n1;\n });\n },\n removeLink: function (link) {\n Utils.remove(this.links, link);\n Utils.remove(link.source.outgoing, link);\n Utils.remove(link.source.links, link);\n Utils.remove(link.target.incoming, link);\n Utils.remove(link.target.links, link);\n },\n addNode: function (nodeOrId, layoutRect, owner) {\n var newNode = null;\n if (!Utils.isDefined(nodeOrId)) {\n throw 'No Node or identifier for a new Node is given.';\n }\n if (Utils.isString(nodeOrId)) {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = new Node(nodeOrId);\n } else {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = nodeOrId;\n }\n if (Utils.isDefined(layoutRect)) {\n newNode.bounds(layoutRect);\n }\n if (Utils.isDefined(owner)) {\n newNode.owner = owner;\n }\n this._addNode(newNode);\n return newNode;\n },\n addNodeAndOutgoings: function (node) {\n if (!this.hasNode(node)) {\n this._addNode(node);\n }\n var newLinks = node.outgoing;\n node.outgoing = [];\n Utils.forEach(newLinks, function (link) {\n this.addExistingLink(link);\n }, this);\n },\n setItemIndices: function () {\n var i;\n for (i = 0; i < this.nodes.length; ++i) {\n this.nodes[i].index = i;\n }\n for (i = 0; i < this.links.length; ++i) {\n this.links[i].index = i;\n }\n },\n clone: function (saveMapping) {\n var copy = new Graph();\n var save = Utils.isDefined(saveMapping) && saveMapping === true;\n if (save) {\n copy.nodeMap = new Dictionary();\n copy.linkMap = new Dictionary();\n }\n var map = new Dictionary();\n Utils.forEach(this.nodes, function (nOriginal) {\n var nCopy = nOriginal.clone();\n map.set(nOriginal, nCopy);\n copy._addNode(nCopy);\n if (save) {\n copy.nodeMap.set(nCopy, nOriginal);\n }\n });\n Utils.forEach(this.links, function (linkOriginal) {\n if (map.containsKey(linkOriginal.source) && map.containsKey(linkOriginal.target)) {\n var linkCopy = copy.addLink(map.get(linkOriginal.source), map.get(linkOriginal.target));\n if (save) {\n copy.linkMap.set(linkCopy, linkOriginal);\n }\n }\n });\n return copy;\n },\n linearize: function (addIds) {\n return Graph.Utils.linearize(this, addIds);\n },\n depthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var visited = [];\n this._dftIterator(foundNode, action, visited);\n },\n _dftIterator: function (node, action, visited) {\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child)) {\n continue;\n }\n this._dftIterator(child, action, visited);\n }\n },\n breadthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var queue = new Queue();\n var visited = [];\n queue.enqueue(foundNode);\n while (queue.length > 0) {\n var node = queue.dequeue();\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child) || contains(queue, child)) {\n continue;\n }\n queue.enqueue(child);\n }\n }\n },\n _stronglyConnectedComponents: function (excludeSingleItems, node, indices, lowLinks, connected, stack, index) {\n indices.add(node, index);\n lowLinks.add(node, index);\n index++;\n stack.push(node);\n var children = node.getChildren(), next;\n for (var i = 0, len = children.length; i < len; i++) {\n next = children[i];\n if (!indices.containsKey(next)) {\n this._stronglyConnectedComponents(excludeSingleItems, next, indices, lowLinks, connected, stack, index);\n lowLinks.add(node, Math.min(lowLinks.get(node), lowLinks.get(next)));\n } else if (contains(stack, next)) {\n lowLinks.add(node, Math.min(lowLinks.get(node), indices.get(next)));\n }\n }\n if (lowLinks.get(node) === indices.get(node)) {\n var component = [];\n do {\n next = stack.pop();\n component.push(next);\n } while (next !== node);\n if (!excludeSingleItems || component.length > 1) {\n connected.push(component);\n }\n }\n },\n findCycles: function (excludeSingleItems) {\n if (Utils.isUndefined(excludeSingleItems)) {\n excludeSingleItems = true;\n }\n var indices = new Dictionary();\n var lowLinks = new Dictionary();\n var connected = [];\n var stack = [];\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (indices.containsKey(node)) {\n continue;\n }\n this._stronglyConnectedComponents(excludeSingleItems, node, indices, lowLinks, connected, stack, 0);\n }\n return connected;\n },\n isAcyclic: function () {\n return Utils.isEmpty(this.findCycles());\n },\n isSubGraph: function (other) {\n var otherArray = other.linearize();\n var thisArray = this.linearize();\n return Utils.all(otherArray, function (s) {\n return contains(thisArray, s);\n });\n },\n makeAcyclic: function () {\n if (this.isEmpty() || this.nodes.length <= 1 || this.links.length <= 1) {\n return [];\n }\n if (this.nodes.length == 2) {\n var result = [];\n if (this.links.length > 1) {\n var oneLink = this.links[0];\n var oneNode = oneLink.source;\n for (var i = 0, len = this.links.length; i < len; i++) {\n var link = this.links[i];\n if (link.source == oneNode) {\n continue;\n }\n var rev = link.reverse();\n result.push(rev);\n }\n }\n return result;\n }\n var copy = this.clone(true);\n var N = this.nodes.length;\n var intensityCatalog = new Dictionary();\n var flowIntensity = function (node) {\n if (node.outgoing.length === 0) {\n return 2 - N;\n } else if (node.incoming.length === 0) {\n return N - 2;\n } else {\n return node.outgoing.length - node.incoming.length;\n }\n };\n var catalogEqualIntensity = function (node, intensityCatalog) {\n var intensity = flowIntensity(node, N);\n if (!intensityCatalog.containsKey(intensity)) {\n intensityCatalog.set(intensity, []);\n }\n intensityCatalog.get(intensity).push(node);\n };\n Utils.forEach(copy.nodes, function (v) {\n catalogEqualIntensity(v, intensityCatalog);\n });\n var sourceStack = [];\n var targetStack = [];\n while (copy.nodes.length > 0) {\n var source, target, intensity;\n if (intensityCatalog.containsKey(2 - N)) {\n var targets = intensityCatalog.get(2 - N);\n while (targets.length > 0) {\n target = targets.pop();\n for (var li = 0; li < target.links.length; li++) {\n var targetLink = target.links[li];\n source = targetLink.getComplement(target);\n intensity = flowIntensity(source, N);\n Utils.remove(intensityCatalog.get(intensity), source);\n source.removeLink(targetLink);\n catalogEqualIntensity(source, intensityCatalog);\n }\n copy._removeNode(target);\n targetStack.unshift(target);\n }\n }\n if (intensityCatalog.containsKey(N - 2)) {\n var sources = intensityCatalog.get(N - 2);\n while (sources.length > 0) {\n source = sources.pop();\n for (var si = 0; si < source.links.length; si++) {\n var sourceLink = source.links[si];\n target = sourceLink.getComplement(source);\n intensity = flowIntensity(target, N);\n Utils.remove(intensityCatalog.get(intensity), target);\n target.removeLink(sourceLink);\n catalogEqualIntensity(target, intensityCatalog);\n }\n sourceStack.push(source);\n copy._removeNode(source);\n }\n }\n if (copy.nodes.length > 0) {\n for (var k = N - 3; k > 2 - N; k--) {\n if (intensityCatalog.containsKey(k) && intensityCatalog.get(k).length > 0) {\n var maxdiff = intensityCatalog.get(k);\n var v = maxdiff.pop();\n for (var ri = 0; ri < v.links.length; ri++) {\n var ril = v.links[ri];\n var u = ril.getComplement(v);\n intensity = flowIntensity(u, N);\n Utils.remove(intensityCatalog.get(intensity), u);\n u.removeLink(ril);\n catalogEqualIntensity(u, intensityCatalog);\n }\n sourceStack.push(v);\n copy._removeNode(v);\n break;\n }\n }\n }\n }\n sourceStack = sourceStack.concat(targetStack);\n var vertexOrder = new Dictionary();\n for (var kk = 0; kk < this.nodes.length; kk++) {\n vertexOrder.set(copy.nodeMap.get(sourceStack[kk]), kk);\n }\n var reversedEdges = [];\n Utils.forEach(this.links, function (link) {\n if (vertexOrder.get(link.source) > vertexOrder.get(link.target)) {\n link.reverse();\n reversedEdges.push(link);\n }\n });\n return reversedEdges;\n }\n });\n Graph.Predefined = {\n EightGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->4',\n '4->1',\n '3->5',\n '5->6',\n '6->7',\n '7->3'\n ]);\n },\n Mindmap: function () {\n return Graph.Utils.parse([\n '0->1',\n '0->2',\n '0->3',\n '0->4',\n '0->5',\n '1->6',\n '1->7',\n '7->8',\n '2->9',\n '9->10',\n '9->11',\n '3->12',\n '12->13',\n '13->14',\n '4->15',\n '4->16',\n '15->17',\n '15->18',\n '18->19',\n '18->20',\n '14->21',\n '14->22',\n '5->23',\n '23->24',\n '23->25',\n '6->26'\n ]);\n },\n ThreeGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->1'\n ]);\n },\n BinaryTree: function (levels) {\n if (Utils.isUndefined(levels)) {\n levels = 5;\n }\n return Graph.Utils.createBalancedTree(levels, 2);\n },\n Linear: function (length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n return Graph.Utils.createBalancedTree(length, 1);\n },\n Tree: function (levels, siblingsCount) {\n return Graph.Utils.createBalancedTree(levels, siblingsCount);\n },\n Forest: function (levels, siblingsCount, trees) {\n return Graph.Utils.createBalancedForest(levels, siblingsCount, trees);\n },\n Workflow: function () {\n return Graph.Utils.parse([\n '0->1',\n '1->2',\n '2->3',\n '1->4',\n '4->3',\n '3->5',\n '5->6',\n '6->3',\n '6->7',\n '5->4'\n ]);\n },\n Grid: function (n, m) {\n var g = new diagram.Graph();\n if (n <= 0 && m <= 0) {\n return g;\n }\n for (var i = 0; i < n + 1; i++) {\n var previous = null;\n for (var j = 0; j < m + 1; j++) {\n var node = new Node(i.toString() + '.' + j.toString());\n g.addNode(node);\n if (previous) {\n g.addLink(previous, node);\n }\n if (i > 0) {\n var left = g.getNode((i - 1).toString() + '.' + j.toString());\n g.addLink(left, node);\n }\n previous = node;\n }\n }\n return g;\n }\n };\n Graph.Utils = {\n parse: function (graphString) {\n var previousLink, graph = new diagram.Graph(), parts = graphString.slice();\n for (var i = 0, len = parts.length; i < len; i++) {\n var part = parts[i];\n if (Utils.isString(part)) {\n if (part.indexOf('->') < 0) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n var p = part.split('->');\n if (p.length != 2) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n previousLink = new Link(p[0], p[1]);\n graph.addLink(previousLink);\n }\n if (Utils.isObject(part)) {\n if (!previousLink) {\n throw 'Specification found before Link definition.';\n }\n kendo.deepExtend(previousLink, part);\n }\n }\n return graph;\n },\n linearize: function (graph, addIds) {\n if (Utils.isUndefined(graph)) {\n throw 'Expected an instance of a Graph object in slot one.';\n }\n if (Utils.isUndefined(addIds)) {\n addIds = false;\n }\n var lin = [];\n for (var i = 0, len = graph.links.length; i < len; i++) {\n var link = graph.links[i];\n lin.push(link.source.id + '->' + link.target.id);\n if (addIds) {\n lin.push({ id: link.id });\n }\n }\n return lin;\n },\n _addShape: function (kendoDiagram, p, id, shapeDefaults) {\n if (Utils.isUndefined(p)) {\n p = new diagram.Point(0, 0);\n }\n if (Utils.isUndefined(id)) {\n id = randomId();\n }\n shapeDefaults = kendo.deepExtend({\n width: 20,\n height: 20,\n id: id,\n radius: 10,\n fill: '#778899',\n data: 'circle',\n undoable: false,\n x: p.x,\n y: p.y\n }, shapeDefaults);\n return kendoDiagram.addShape(shapeDefaults);\n },\n _addConnection: function (diagram, from, to, options) {\n return diagram.connect(from, to, options);\n },\n createDiagramFromGraph: function (diagram, graph, doLayout, randomSize) {\n if (Utils.isUndefined(diagram)) {\n throw 'The diagram surface is undefined.';\n }\n if (Utils.isUndefined(graph)) {\n throw 'No graph specification defined.';\n }\n if (Utils.isUndefined(doLayout)) {\n doLayout = true;\n }\n if (Utils.isUndefined(randomSize)) {\n randomSize = false;\n }\n var width = diagram.element.clientWidth || 200;\n var height = diagram.element.clientHeight || 200;\n var map = [], node, shape;\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n node = graph.nodes[i];\n var p = node.position;\n if (Utils.isUndefined(p)) {\n if (Utils.isDefined(node.x) && Utils.isDefined(node.y)) {\n p = new Point(node.x, node.y);\n } else {\n p = new Point(Utils.randomInteger(10, width - 20), Utils.randomInteger(10, height - 20));\n }\n }\n var opt = {};\n if (node.id === '0') {\n } else if (randomSize) {\n kendo.deepExtend(opt, {\n width: Math.random() * 150 + 20,\n height: Math.random() * 80 + 50,\n data: 'rectangle',\n fill: { color: '#778899' }\n });\n }\n shape = this._addShape(diagram, p, node.id, opt);\n var bounds = shape.bounds();\n if (Utils.isDefined(bounds)) {\n node.x = bounds.x;\n node.y = bounds.y;\n node.width = bounds.width;\n node.height = bounds.height;\n }\n map[node.id] = shape;\n }\n for (var gli = 0; gli < graph.links.length; gli++) {\n var link = graph.links[gli];\n var sourceShape = map[link.source.id];\n if (Utils.isUndefined(sourceShape)) {\n continue;\n }\n var targetShape = map[link.target.id];\n if (Utils.isUndefined(targetShape)) {\n continue;\n }\n this._addConnection(diagram, sourceShape, targetShape, { id: link.id });\n }\n if (doLayout) {\n var l = new diagram.SpringLayout(diagram);\n l.layoutGraph(graph, { limitToView: false });\n for (var shi = 0; shi < graph.nodes.length; shi++) {\n node = graph.nodes[shi];\n shape = map[node.id];\n shape.bounds(new Rect(node.x, node.y, node.width, node.height));\n }\n }\n },\n createBalancedTree: function (levels, siblingsCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n g.root = root;\n lastAdded.push(root);\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n return g;\n },\n createBalancedForest: function (levels, siblingsCount, treeCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n if (Utils.isUndefined(treeCount)) {\n treeCount = 5;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0 || treeCount <= 0) {\n return g;\n }\n for (var t = 0; t < treeCount; t++) {\n var root = new Node((++counter).toString());\n g.addNode(root);\n lastAdded = [root];\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n }\n return g;\n },\n createRandomConnectedGraph: function (nodeCount, maxIncidence, isTree) {\n if (Utils.isUndefined(nodeCount)) {\n nodeCount = 40;\n }\n if (Utils.isUndefined(maxIncidence)) {\n maxIncidence = 4;\n }\n if (Utils.isUndefined(isTree)) {\n isTree = false;\n }\n var g = new diagram.Graph(), counter = -1;\n if (nodeCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n if (nodeCount === 1) {\n return g;\n }\n if (nodeCount > 1) {\n for (var i = 1; i < nodeCount; i++) {\n var poolNode = g.takeRandomNode([], maxIncidence);\n if (!poolNode) {\n break;\n }\n var newNode = g.addNode(i.toString());\n g.addLink(poolNode, newNode);\n }\n if (!isTree && nodeCount > 1) {\n var randomAdditions = Utils.randomInteger(1, nodeCount);\n for (var ri = 0; ri < randomAdditions; ri++) {\n var n1 = g.takeRandomNode([], maxIncidence);\n var n2 = g.takeRandomNode([], maxIncidence);\n if (n1 && n2 && !g.areConnected(n1, n2)) {\n g.addLink(n1, n2);\n }\n }\n }\n return g;\n }\n },\n randomDiagram: function (diagram, shapeCount, maxIncidence, isTree, randomSize) {\n var g = kendo.dataviz.diagram.Graph.Utils.createRandomConnectedGraph(shapeCount, maxIncidence, isTree);\n Graph.Utils.createDiagramFromGraph(diagram, g, false, randomSize);\n }\n };\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Point: Point,\n Intersect: Intersect,\n Geometry: Geometry,\n Rect: Rect,\n Size: Size,\n RectAlign: RectAlign,\n Matrix: Matrix,\n MatrixVector: MatrixVector,\n normalVariable: normalVariable,\n randomId: randomId,\n Dictionary: Dictionary,\n HashTable: HashTable,\n Queue: Queue,\n Set: Set,\n Node: Node,\n Link: Link,\n Graph: Graph,\n PathDefiner: PathDefiner\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/svg', [\n 'kendo.drawing',\n 'dataviz/diagram/math'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, Point = diagram.Point, Rect = diagram.Rect, Matrix = diagram.Matrix, Utils = diagram.Utils, isNumber = Utils.isNumber, isString = Utils.isString, MatrixVector = diagram.MatrixVector, g = kendo.geometry, d = kendo.drawing, defined = d.util.defined, inArray = $.inArray;\n var TRANSPARENT = 'transparent', Markers = {\n none: 'none',\n arrowStart: 'ArrowStart',\n filledCircle: 'FilledCircle',\n arrowEnd: 'ArrowEnd'\n }, FULL_CIRCLE_ANGLE = 360, START = 'start', END = 'end', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y';\n diagram.Markers = Markers;\n function diffNumericOptions(options, fields) {\n var elementOptions = this.options;\n var hasChanges = false;\n var value, field;\n for (var i = 0; i < fields.length; i++) {\n field = fields[i];\n value = options[field];\n if (isNumber(value) && elementOptions[field] !== value) {\n elementOptions[field] = value;\n hasChanges = true;\n }\n }\n return hasChanges;\n }\n var Scale = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrix: function () {\n return Matrix.scaling(this.x, this.y);\n },\n toString: function () {\n return kendo.format('scale({0},{1})', this.x, this.y);\n },\n invert: function () {\n return new Scale(1 / this.x, 1 / this.y);\n }\n });\n var Translation = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrixVector: function () {\n return new MatrixVector(0, 0, 0, 0, this.x, this.y);\n },\n toMatrix: function () {\n return Matrix.translation(this.x, this.y);\n },\n toString: function () {\n return kendo.format('translate({0},{1})', this.x, this.y);\n },\n plus: function (delta) {\n this.x += delta.x;\n this.y += delta.y;\n },\n times: function (factor) {\n this.x *= factor;\n this.y *= factor;\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n normalize: function () {\n if (this.Length === 0) {\n return;\n }\n this.times(1 / this.length());\n },\n invert: function () {\n return new Translation(-this.x, -this.y);\n }\n });\n var Rotation = Class.extend({\n init: function (angle, x, y) {\n this.x = x || 0;\n this.y = y || 0;\n this.angle = angle;\n },\n toString: function () {\n if (this.x && this.y) {\n return kendo.format('rotate({0},{1},{2})', this.angle, this.x, this.y);\n } else {\n return kendo.format('rotate({0})', this.angle);\n }\n },\n toMatrix: function () {\n return Matrix.rotation(this.angle, this.x, this.y);\n },\n center: function () {\n return new Point(this.x, this.y);\n },\n invert: function () {\n return new Rotation(FULL_CIRCLE_ANGLE - this.angle, this.x, this.y);\n }\n });\n Rotation.ZERO = new Rotation(0);\n Rotation.create = function (rotation) {\n return new Rotation(rotation.angle, rotation.x, rotation.y);\n };\n Rotation.parse = function (str) {\n var values = str.slice(1, str.length - 1).split(','), angle = values[0], x = values[1], y = values[2];\n var rotation = new Rotation(angle, x, y);\n return rotation;\n };\n var CompositeTransform = Class.extend({\n init: function (x, y, scaleX, scaleY, angle, center) {\n this.translate = new Translation(x, y);\n if (scaleX !== undefined && scaleY !== undefined) {\n this.scale = new Scale(scaleX, scaleY);\n }\n if (angle !== undefined) {\n this.rotate = center ? new Rotation(angle, center.x, center.y) : new Rotation(angle);\n }\n },\n toString: function () {\n var toString = function (transform) {\n return transform ? transform.toString() : '';\n };\n return toString(this.translate) + toString(this.rotate) + toString(this.scale);\n },\n render: function (visual) {\n visual._transform = this;\n visual._renderTransform();\n },\n toMatrix: function () {\n var m = Matrix.unit();\n if (this.translate) {\n m = m.times(this.translate.toMatrix());\n }\n if (this.rotate) {\n m = m.times(this.rotate.toMatrix());\n }\n if (this.scale) {\n m = m.times(this.scale.toMatrix());\n }\n return m;\n },\n invert: function () {\n var rotate = this.rotate ? this.rotate.invert() : undefined, rotateMatrix = rotate ? rotate.toMatrix() : Matrix.unit(), scale = this.scale ? this.scale.invert() : undefined, scaleMatrix = scale ? scale.toMatrix() : Matrix.unit();\n var translatePoint = new Point(-this.translate.x, -this.translate.y);\n translatePoint = rotateMatrix.times(scaleMatrix).apply(translatePoint);\n var translate = new Translation(translatePoint.x, translatePoint.y);\n var transform = new CompositeTransform();\n transform.translate = translate;\n transform.rotate = rotate;\n transform.scale = scale;\n return transform;\n }\n });\n var AutoSizeableMixin = {\n _setScale: function () {\n var options = this.options;\n var originWidth = this._originWidth;\n var originHeight = this._originHeight;\n var scaleX = options.width / originWidth;\n var scaleY = options.height / originHeight;\n if (!isNumber(scaleX)) {\n scaleX = 1;\n }\n if (!isNumber(scaleY)) {\n scaleY = 1;\n }\n this._transform.scale = new Scale(scaleX, scaleY);\n },\n _setTranslate: function () {\n var options = this.options;\n var x = options.x || 0;\n var y = options.y || 0;\n this._transform.translate = new Translation(x, y);\n },\n _initSize: function () {\n var options = this.options;\n var transform = false;\n if (options.autoSize !== false && (defined(options.width) || defined(options.height))) {\n this._measure(true);\n this._setScale();\n transform = true;\n }\n if (defined(options.x) || defined(options.y)) {\n this._setTranslate();\n transform = true;\n }\n if (transform) {\n this._renderTransform();\n }\n },\n _updateSize: function (options) {\n var update = false;\n if (this.options.autoSize !== false && this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n update = true;\n this._measure(true);\n this._setScale();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n update = true;\n this._setTranslate();\n }\n if (update) {\n this._renderTransform();\n }\n return update;\n }\n };\n var Element = Class.extend({\n init: function (options) {\n var element = this;\n element.options = deepExtend({}, element.options, options);\n element.id = element.options.id;\n element._originSize = Rect.empty();\n element._transform = new CompositeTransform();\n },\n visible: function (value) {\n return this.drawingContainer().visible(value);\n },\n redraw: function (options) {\n if (options && options.id) {\n this.id = options.id;\n }\n },\n position: function (x, y) {\n var options = this.options;\n if (!defined(x)) {\n return new Point(options.x, options.y);\n }\n if (defined(y)) {\n options.x = x;\n options.y = y;\n } else if (x instanceof Point) {\n options.x = x.x;\n options.y = x.y;\n }\n this._transform.translate = new Translation(options.x, options.y);\n this._renderTransform();\n },\n rotate: function (angle, center) {\n if (defined(angle)) {\n this._transform.rotate = new Rotation(angle, center.x, center.y);\n this._renderTransform();\n }\n return this._transform.rotate || Rotation.ZERO;\n },\n drawingContainer: function () {\n return this.drawingElement;\n },\n _renderTransform: function () {\n var matrix = this._transform.toMatrix();\n this.drawingContainer().transform(new g.Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f));\n },\n _hover: function () {\n },\n _diffNumericOptions: diffNumericOptions,\n _measure: function (force) {\n var rect;\n if (!this._measured || force) {\n var box = this._boundingBox() || new g.Rect();\n var startPoint = box.topLeft();\n rect = new Rect(startPoint.x, startPoint.y, box.width(), box.height());\n this._originSize = rect;\n this._originWidth = rect.width;\n this._originHeight = rect.height;\n this._measured = true;\n } else {\n rect = this._originSize;\n }\n return rect;\n },\n _boundingBox: function () {\n return this.drawingElement.rawBBox();\n }\n });\n var VisualBase = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n options = this.options;\n options.fill = normalizeDrawingOptions(options.fill);\n options.stroke = normalizeDrawingOptions(options.stroke);\n },\n options: {\n stroke: {\n color: 'gray',\n width: 1\n },\n fill: { color: TRANSPARENT }\n },\n fill: function (color, opacity) {\n this._fill({\n color: getColor(color),\n opacity: opacity\n });\n },\n stroke: function (color, width, opacity) {\n this._stroke({\n color: getColor(color),\n width: width,\n opacity: opacity\n });\n },\n redraw: function (options) {\n if (options) {\n var stroke = options.stroke;\n var fill = options.fill;\n if (stroke) {\n this._stroke(normalizeDrawingOptions(stroke));\n }\n if (fill) {\n this._fill(normalizeDrawingOptions(fill));\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _hover: function (show) {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var hover = options.hover;\n if (hover && hover.fill) {\n var fill = show ? normalizeDrawingOptions(hover.fill) : options.fill;\n drawingElement.fill(fill.color, fill.opacity);\n }\n },\n _stroke: function (strokeOptions) {\n var options = this.options;\n deepExtend(options, { stroke: strokeOptions });\n strokeOptions = options.stroke;\n var stroke = null;\n if (strokeOptions.width > 0) {\n stroke = {\n color: strokeOptions.color,\n width: strokeOptions.width,\n opacity: strokeOptions.opacity,\n dashType: strokeOptions.dashType\n };\n }\n this.drawingElement.options.set('stroke', stroke);\n },\n _fill: function (fillOptions) {\n var options = this.options;\n deepExtend(options, { fill: fillOptions || {} });\n var fill = options.fill;\n if (fill.gradient) {\n var gradient = fill.gradient;\n var GradientClass = gradient.type === 'radial' ? d.RadialGradient : d.LinearGradient;\n this.drawingElement.fill(new GradientClass(gradient));\n } else {\n this.drawingElement.fill(fill.color, fill.opacity);\n }\n }\n });\n var TextBlock = VisualBase.extend({\n init: function (options) {\n options = this._textColor(options);\n VisualBase.fn.init.call(this, options);\n this._font();\n this._initText();\n this._initSize();\n },\n options: {\n fontSize: 15,\n fontFamily: 'sans-serif',\n stroke: { width: 0 },\n fill: { color: 'black' },\n autoSize: true\n },\n _initText: function () {\n var options = this.options;\n this.drawingElement = new d.Text(defined(options.text) ? options.text : '', new g.Point(), { font: options.font });\n this._fill();\n this._stroke();\n },\n _textColor: function (options) {\n if (options && options.color) {\n options = deepExtend({}, options, { fill: { color: options.color } });\n }\n return options;\n },\n _font: function () {\n var options = this.options;\n if (options.fontFamily && defined(options.fontSize)) {\n var fontOptions = [];\n if (options.fontStyle) {\n fontOptions.push(options.fontStyle);\n }\n if (options.fontWeight) {\n fontOptions.push(options.fontWeight);\n }\n fontOptions.push(options.fontSize + (isNumber(options.fontSize) ? 'px' : ''));\n fontOptions.push(options.fontFamily);\n options.font = fontOptions.join(' ');\n } else {\n delete options.font;\n }\n },\n content: function (text) {\n return this.drawingElement.content(text);\n },\n redraw: function (options) {\n if (options) {\n var sizeChanged = false;\n var textOptions = this.options;\n options = this._textColor(options);\n VisualBase.fn.redraw.call(this, options);\n if (options.fontFamily || defined(options.fontSize) || options.fontStyle || options.fontWeight) {\n deepExtend(textOptions, {\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontStyle: options.fontStyle,\n fontWeight: options.fontWeight\n });\n this._font();\n this.drawingElement.options.set('font', textOptions.font);\n sizeChanged = true;\n }\n if (options.text) {\n this.content(options.text);\n sizeChanged = true;\n }\n if (!this._updateSize(options) && sizeChanged) {\n this._initSize();\n }\n }\n }\n });\n deepExtend(TextBlock.fn, AutoSizeableMixin);\n var Rectangle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initPath();\n this._setPosition();\n },\n _setPosition: function () {\n var options = this.options;\n var x = options.x;\n var y = options.y;\n if (defined(x) || defined(y)) {\n this.position(x || 0, y || 0);\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n this._drawPath();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n this._setPosition();\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({\n stroke: options.stroke,\n closed: true\n });\n this._fill();\n this._drawPath();\n },\n _drawPath: function () {\n var drawingElement = this.drawingElement;\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var width = sizeOptions.width;\n var height = sizeOptions.height;\n drawingElement.segments.elements([\n createSegment(0, 0),\n createSegment(width, 0),\n createSegment(width, height),\n createSegment(0, height)\n ]);\n }\n });\n var MarkerBase = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n var anchor = this.options.anchor;\n this.anchor = new g.Point(anchor.x, anchor.y);\n this.createElement();\n },\n options: {\n stroke: {\n color: TRANSPARENT,\n width: 0\n },\n fill: { color: 'black' }\n },\n _transformToPath: function (point, path) {\n var transform = path.transform();\n if (point && transform) {\n point = point.transformCopy(transform);\n }\n return point;\n },\n redraw: function (options) {\n if (options) {\n if (options.position) {\n this.options.position = options.position;\n }\n VisualBase.fn.redraw.call(this, options);\n }\n }\n });\n var CircleMarker = MarkerBase.extend({\n options: {\n radius: 4,\n anchor: {\n x: 0,\n y: 0\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = new d.Circle(new g.Circle(this.anchor, options.radius), {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var options = this.options;\n var position = options.position;\n var segments = path.segments;\n var targetSegment;\n var point;\n if (position == START) {\n targetSegment = segments[0];\n } else {\n targetSegment = segments[segments.length - 1];\n }\n if (targetSegment) {\n point = this._transformToPath(targetSegment.anchor(), path);\n this.drawingElement.transform(g.transform().translate(point.x, point.y));\n }\n }\n });\n var ArrowMarker = MarkerBase.extend({\n options: {\n path: 'M 0 0 L 10 5 L 0 10 L 3 5 z',\n anchor: {\n x: 10,\n y: 5\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.path, {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var points = this._linePoints(path);\n var start = points.start;\n var end = points.end;\n var transform = g.transform();\n if (start) {\n transform.rotate(lineAngle(start, end), end);\n }\n if (end) {\n var anchor = this.anchor;\n var translate = end.clone().translate(-anchor.x, -anchor.y);\n transform.translate(translate.x, translate.y);\n }\n this.drawingElement.transform(transform);\n },\n _linePoints: function (path) {\n var options = this.options;\n var segments = path.segments;\n var startPoint, endPoint, targetSegment;\n if (options.position == START) {\n targetSegment = segments[0];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlOut();\n var nextSegment = segments[1];\n if (!startPoint && nextSegment) {\n startPoint = nextSegment.anchor();\n }\n }\n } else {\n targetSegment = segments[segments.length - 1];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlIn();\n var prevSegment = segments[segments.length - 2];\n if (!startPoint && prevSegment) {\n startPoint = prevSegment.anchor();\n }\n }\n }\n if (endPoint) {\n return {\n start: this._transformToPath(startPoint, path),\n end: this._transformToPath(endPoint, path)\n };\n }\n }\n });\n var MarkerPathMixin = {\n _getPath: function (position) {\n var path = this.drawingElement;\n if (path instanceof d.MultiPath) {\n if (position == START) {\n path = path.paths[0];\n } else {\n path = path.paths[path.paths.length - 1];\n }\n }\n if (path && path.segments.length) {\n return path;\n }\n },\n _normalizeMarkerOptions: function (options) {\n var startCap = options.startCap;\n var endCap = options.endCap;\n if (isString(startCap)) {\n options.startCap = { type: startCap };\n }\n if (isString(endCap)) {\n options.endCap = { type: endCap };\n }\n },\n _removeMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n this.drawingContainer().remove(marker.drawingElement);\n delete this._markers[position];\n }\n },\n _createMarkers: function () {\n var options = this.options;\n this._normalizeMarkerOptions(options);\n this._markers = {};\n this._markers[START] = this._createMarker(options.startCap, START);\n this._markers[END] = this._createMarker(options.endCap, END);\n },\n _createMarker: function (options, position) {\n var type = (options || {}).type;\n var path = this._getPath(position);\n var markerType, marker;\n if (!path) {\n this._removeMarker(position);\n return;\n }\n if (type == Markers.filledCircle) {\n markerType = CircleMarker;\n } else if (type == Markers.arrowStart || type == Markers.arrowEnd) {\n markerType = ArrowMarker;\n } else {\n this._removeMarker(position);\n }\n if (markerType) {\n marker = new markerType(deepExtend({}, options, { position: position }));\n marker.positionMarker(path);\n this.drawingContainer().append(marker.drawingElement);\n return marker;\n }\n },\n _positionMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n var path = this._getPath(position);\n if (path) {\n marker.positionMarker(path);\n } else {\n this._removeMarker(position);\n }\n }\n },\n _capMap: {\n start: 'startCap',\n end: 'endCap'\n },\n _redrawMarker: function (pathChange, position, options) {\n this._normalizeMarkerOptions(options);\n var pathOptions = this.options;\n var cap = this._capMap[position];\n var pathCapType = (pathOptions[cap] || {}).type;\n var optionsCap = options[cap];\n var created = false;\n if (optionsCap) {\n pathOptions[cap] = deepExtend({}, pathOptions[cap], optionsCap);\n if (optionsCap.type && pathCapType != optionsCap.type) {\n this._removeMarker(position);\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n } else if (this._markers[position]) {\n this._markers[position].redraw(optionsCap);\n }\n } else if (pathChange && !this._markers[position] && pathOptions[cap]) {\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n }\n return created;\n },\n _redrawMarkers: function (pathChange, options) {\n if (!this._redrawMarker(pathChange, START, options) && pathChange) {\n this._positionMarker(START);\n }\n if (!this._redrawMarker(pathChange, END, options) && pathChange) {\n this._positionMarker(END);\n }\n }\n };\n var Path = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._createElements();\n this._initSize();\n },\n options: { autoSize: true },\n drawingContainer: function () {\n return this.container;\n },\n data: function (value) {\n var options = this.options;\n if (value) {\n if (options.data != value) {\n options.data = value;\n this._setData(value);\n this._initSize();\n this._redrawMarkers(true, {});\n }\n } else {\n return options.data;\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n var pathOptions = this.options;\n var data = options.data;\n if (defined(data) && pathOptions.data != data) {\n pathOptions.data = data;\n this._setData(data);\n if (!this._updateSize(options)) {\n this._initSize();\n }\n this._redrawMarkers(true, options);\n } else {\n this._updateSize(options);\n this._redrawMarkers(false, options);\n }\n }\n },\n _createElements: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.data || '', { stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n this._createMarkers();\n },\n _setData: function (data) {\n var drawingElement = this.drawingElement;\n var multipath = d.Path.parse(data || '');\n var paths = multipath.paths.slice(0);\n multipath.paths.elements([]);\n drawingElement.paths.elements(paths);\n }\n });\n deepExtend(Path.fn, AutoSizeableMixin);\n deepExtend(Path.fn, MarkerPathMixin);\n var Line = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n redraw: function (options) {\n if (options) {\n options = options || {};\n var from = options.from;\n var to = options.to;\n if (from) {\n this.options.from = from;\n }\n if (to) {\n this.options.to = to;\n }\n if (from || to) {\n this._drawPath();\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this._drawPath();\n this.container.append(drawingElement);\n },\n _drawPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement;\n var from = options.from || new Point();\n var to = options.to || new Point();\n drawingElement.segments.elements([\n createSegment(from.x, from.y),\n createSegment(to.x, to.y)\n ]);\n }\n });\n deepExtend(Line.fn, MarkerPathMixin);\n var Polyline = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n points: function (points) {\n var options = this.options;\n if (points) {\n options.points = points;\n this._updatePath();\n } else {\n return options.points;\n }\n },\n redraw: function (options) {\n if (options) {\n var points = options.points;\n VisualBase.fn.redraw.call(this, options);\n if (points && this._pointsDiffer(points)) {\n this.points(points);\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n if (options.points) {\n this._updatePath();\n }\n },\n _pointsDiffer: function (points) {\n var currentPoints = this.options.points;\n var differ = currentPoints.length !== points.length;\n if (!differ) {\n for (var i = 0; i < points.length; i++) {\n if (currentPoints[i].x !== points[i].x || currentPoints[i].y !== points[i].y) {\n differ = true;\n break;\n }\n }\n }\n return differ;\n },\n _updatePath: function () {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var points = options.points;\n var segments = [];\n var point;\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n segments.push(createSegment(point.x, point.y));\n }\n drawingElement.segments.elements(segments);\n },\n options: { points: [] }\n });\n deepExtend(Polyline.fn, MarkerPathMixin);\n var Image = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n this._initImage();\n },\n redraw: function (options) {\n if (options) {\n if (options.source) {\n this.drawingElement.src(options.source);\n }\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.drawingElement.rect(this._rect());\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _initImage: function () {\n var options = this.options;\n var rect = this._rect();\n this.drawingElement = new d.Image(options.source, rect, {});\n },\n _rect: function () {\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var origin = new g.Point(sizeOptions.x, sizeOptions.y);\n var size = new g.Size(sizeOptions.width, sizeOptions.height);\n return new g.Rect(origin, size);\n }\n });\n var Group = Element.extend({\n init: function (options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Group();\n this._initSize();\n },\n options: { autoSize: false },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n this.children.push(visual);\n this._childrenChange = true;\n },\n remove: function (visual) {\n if (this._remove(visual)) {\n this._childrenChange = true;\n }\n },\n _remove: function (visual) {\n var index = inArray(visual, this.children);\n if (index >= 0) {\n this.drawingElement.removeAt(index);\n this.children.splice(index, 1);\n return true;\n }\n },\n clear: function () {\n this.drawingElement.clear();\n this.children = [];\n this._childrenChange = true;\n },\n toFront: function (visuals) {\n var visual;\n for (var i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n if (this._remove(visual)) {\n this.append(visual);\n }\n }\n },\n toBack: function (visuals) {\n this._reorderChildren(visuals, 0);\n },\n toIndex: function (visuals, indices) {\n this._reorderChildren(visuals, indices);\n },\n _reorderChildren: function (visuals, indices) {\n var group = this.drawingElement;\n var drawingChildren = group.children.slice(0);\n var children = this.children;\n var fixedPosition = isNumber(indices);\n var i, index, toIndex, drawingElement, visual;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n drawingElement = visual.drawingContainer();\n index = inArray(visual, children);\n if (index >= 0) {\n drawingChildren.splice(index, 1);\n children.splice(index, 1);\n toIndex = fixedPosition ? indices : indices[i];\n drawingChildren.splice(toIndex, 0, drawingElement);\n children.splice(toIndex, 0, visual);\n }\n }\n group.clear();\n group.append.apply(group, drawingChildren);\n },\n redraw: function (options) {\n if (options) {\n if (this._childrenChange) {\n this._childrenChange = false;\n if (!this._updateSize(options)) {\n this._initSize();\n }\n } else {\n this._updateSize(options);\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _boundingBox: function () {\n var children = this.children;\n var boundingBox;\n var visual, childBoundingBox;\n for (var i = 0; i < children.length; i++) {\n visual = children[i];\n if (visual.visible() && visual._includeInBBox !== false) {\n childBoundingBox = visual.drawingContainer().clippedBBox(null);\n if (childBoundingBox) {\n if (boundingBox) {\n boundingBox = g.Rect.union(boundingBox, childBoundingBox);\n } else {\n boundingBox = childBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n });\n deepExtend(Group.fn, AutoSizeableMixin);\n var Layout = Group.extend({\n init: function (rect, options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Layout(toDrawingRect(rect), options);\n this._initSize();\n },\n rect: function (rect) {\n if (rect) {\n this.drawingElement.rect(toDrawingRect(rect));\n } else {\n var drawingRect = this.drawingElement.rect();\n if (drawingRect) {\n return new Rect(drawingRect.origin.x, drawingRect.origin.y, drawingRect.size.width, drawingRect.size.height);\n }\n }\n },\n reflow: function () {\n this.drawingElement.reflow();\n },\n redraw: function (options) {\n kendo.deepExtend(this.drawingElement.options, options);\n Group.fn.redraw.call(this, options);\n }\n });\n var Circle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initCircle();\n this._initSize();\n },\n redraw: function (options) {\n if (options) {\n var circleOptions = this.options;\n if (options.center) {\n deepExtend(circleOptions, { center: options.center });\n this._center.move(circleOptions.center.x, circleOptions.center.y);\n }\n if (this._diffNumericOptions(options, ['radius'])) {\n this._circle.setRadius(circleOptions.radius);\n }\n this._updateSize(options);\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initCircle: function () {\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var radius = options.radius;\n if (!defined(radius)) {\n if (!defined(width)) {\n width = height;\n }\n if (!defined(height)) {\n height = width;\n }\n options.radius = radius = Math.min(width, height) / 2;\n }\n var center = options.center || {\n x: radius,\n y: radius\n };\n this._center = new g.Point(center.x, center.y);\n this._circle = new g.Circle(this._center, radius);\n this.drawingElement = new d.Circle(this._circle, { stroke: options.stroke });\n this._fill();\n }\n });\n deepExtend(Circle.fn, AutoSizeableMixin);\n var Canvas = Class.extend({\n init: function (element, options) {\n options = options || {};\n this.element = element;\n this.surface = d.Surface.create(element, options);\n if (kendo.isFunction(this.surface.translate)) {\n this.translate = this._translate;\n }\n this.drawingElement = new d.Group();\n this._viewBox = new Rect(0, 0, options.width, options.height);\n this.size(this._viewBox);\n },\n bounds: function () {\n var box = this.drawingElement.clippedBBox();\n return new Rect(0, 0, box.width(), box.height());\n },\n size: function (size) {\n var viewBox = this._viewBox;\n if (defined(size)) {\n viewBox.width = size.width;\n viewBox.height = size.height;\n this.surface.setSize(size);\n }\n return {\n width: viewBox.width,\n height: viewBox.height\n };\n },\n _translate: function (x, y) {\n var viewBox = this._viewBox;\n if (defined(x) && defined(y)) {\n viewBox.x = x;\n viewBox.y = y;\n this.surface.translate({\n x: x,\n y: y\n });\n }\n return {\n x: viewBox.x,\n y: viewBox.y\n };\n },\n draw: function () {\n this.surface.draw(this.drawingElement);\n },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n return this;\n },\n remove: function (visual) {\n this.drawingElement.remove(visual.drawingContainer());\n },\n insertBefore: function () {\n },\n clear: function () {\n this.drawingElement.clear();\n },\n destroy: function (clearHtml) {\n this.surface.destroy();\n if (clearHtml) {\n $(this.element).remove();\n }\n }\n });\n function sizeOptionsOrDefault(options) {\n return {\n x: options.x || 0,\n y: options.y || 0,\n width: options.width || 0,\n height: options.height || 0\n };\n }\n function normalizeDrawingOptions(options) {\n if (options) {\n var drawingOptions = options;\n if (isString(drawingOptions)) {\n drawingOptions = { color: drawingOptions };\n }\n if (drawingOptions.color) {\n drawingOptions.color = getColor(drawingOptions.color);\n }\n return drawingOptions;\n }\n }\n function getColor(value) {\n var color;\n if (value != TRANSPARENT) {\n color = new d.Color(value).toHex();\n } else {\n color = value;\n }\n return color;\n }\n function lineAngle(p1, p2) {\n var xDiff = p2.x - p1.x;\n var yDiff = p2.y - p1.y;\n var angle = d.util.deg(Math.atan2(yDiff, xDiff));\n return angle;\n }\n function createSegment(x, y) {\n return new d.Segment(new g.Point(x, y));\n }\n function toDrawingRect(rect) {\n if (rect) {\n return new g.Rect([\n rect.x,\n rect.y\n ], [\n rect.width,\n rect.height\n ]);\n }\n }\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n diffNumericOptions: diffNumericOptions,\n Element: Element,\n Scale: Scale,\n Translation: Translation,\n Rotation: Rotation,\n Circle: Circle,\n Group: Group,\n Rectangle: Rectangle,\n Canvas: Canvas,\n Path: Path,\n Layout: Layout,\n Line: Line,\n MarkerBase: MarkerBase,\n ArrowMarker: ArrowMarker,\n CircleMarker: CircleMarker,\n Polyline: Polyline,\n CompositeTransform: CompositeTransform,\n TextBlock: TextBlock,\n Image: Image,\n VisualBase: VisualBase\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/services', [\n 'kendo.drawing',\n 'dataviz/diagram/svg'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, diagram = dataviz.diagram, Class = kendo.Class, Group = diagram.Group, Rect = diagram.Rect, Rectangle = diagram.Rectangle, Utils = diagram.Utils, isUndefined = Utils.isUndefined, Point = diagram.Point, Circle = diagram.Circle, Ticker = diagram.Ticker, deepExtend = kendo.deepExtend, Movable = kendo.ui.Movable, browser = kendo.support.browser, util = kendo.drawing.util, defined = util.defined, inArray = $.inArray, proxy = $.proxy;\n var Cursors = {\n arrow: 'default',\n grip: 'pointer',\n cross: 'pointer',\n add: 'pointer',\n move: 'move',\n select: 'pointer',\n south: 's-resize',\n east: 'e-resize',\n west: 'w-resize',\n north: 'n-resize',\n rowresize: 'row-resize',\n colresize: 'col-resize'\n }, HIT_TEST_DISTANCE = 10, AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', DEFAULT_SNAP_SIZE = 10, DEFAULT_SNAP_ANGLE = 10, DRAG_START = 'dragStart', DRAG = 'drag', DRAG_END = 'dragEnd', ITEMROTATE = 'itemRotate', ITEMBOUNDSCHANGE = 'itemBoundsChange', MIN_SNAP_SIZE = 5, MIN_SNAP_ANGLE = 5, MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', SCROLL_MIN = -20000, SCROLL_MAX = 20000, FRICTION = 0.9, FRICTION_MOBILE = 0.93, VELOCITY_MULTIPLIER = 5, TRANSPARENT = 'transparent', PAN = 'pan', ROTATED = 'rotated', SOURCE = 'source', TARGET = 'target', HANDLE_NAMES = {\n '-1': SOURCE,\n '1': TARGET\n };\n diagram.Cursors = Cursors;\n var PositionAdapter = kendo.Class.extend({\n init: function (layoutState) {\n this.layoutState = layoutState;\n this.diagram = layoutState.diagram;\n },\n initState: function () {\n this.froms = [];\n this.tos = [];\n this.subjects = [];\n function pusher(id, bounds) {\n var shape = this.diagram.getShapeById(id);\n if (shape) {\n this.subjects.push(shape);\n this.froms.push(shape.bounds().topLeft());\n this.tos.push(bounds.topLeft());\n }\n }\n this.layoutState.nodeMap.forEach(pusher, this);\n },\n update: function (tick) {\n if (this.subjects.length <= 0) {\n return;\n }\n for (var i = 0; i < this.subjects.length; i++) {\n this.subjects[i].position(new Point(this.froms[i].x + (this.tos[i].x - this.froms[i].x) * tick, this.froms[i].y + (this.tos[i].y - this.froms[i].y) * tick));\n }\n }\n });\n var LayoutUndoUnit = Class.extend({\n init: function (initialState, finalState, animate) {\n if (isUndefined(animate)) {\n this.animate = false;\n } else {\n this.animate = animate;\n }\n this._initialState = initialState;\n this._finalState = finalState;\n this.title = 'Diagram layout';\n },\n undo: function () {\n this.setState(this._initialState);\n },\n redo: function () {\n this.setState(this._finalState);\n },\n setState: function (state) {\n var diagram = state.diagram;\n if (this.animate) {\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n conn.visible(false);\n if (conn) {\n conn.points(points);\n }\n });\n var ticker = new Ticker();\n ticker.addAdapter(new PositionAdapter(state));\n ticker.onComplete(function () {\n state.linkMap.forEach(function (id) {\n var conn = diagram.getShapeById(id);\n conn.visible(true);\n });\n });\n ticker.play();\n } else {\n state.nodeMap.forEach(function (id, bounds) {\n var shape = diagram.getShapeById(id);\n if (shape) {\n shape.position(bounds.topLeft());\n }\n });\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n if (conn) {\n conn.points(points);\n }\n });\n }\n }\n });\n var CompositeUnit = Class.extend({\n init: function (unit) {\n this.units = [];\n this.title = 'Composite unit';\n if (unit !== undefined) {\n this.units.push(unit);\n }\n },\n add: function (undoUnit) {\n this.units.push(undoUnit);\n },\n undo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].undo();\n }\n },\n redo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].redo();\n }\n }\n });\n var ConnectionEditUnit = Class.extend({\n init: function (item, redoSource, redoTarget) {\n this.item = item;\n this._redoSource = redoSource;\n this._redoTarget = redoTarget;\n if (defined(redoSource)) {\n this._undoSource = item.source();\n }\n if (defined(redoTarget)) {\n this._undoTarget = item.target();\n }\n this.title = 'Connection Editing';\n },\n undo: function () {\n if (this._undoSource !== undefined) {\n this.item._updateConnector(this._undoSource, 'source');\n }\n if (this._undoTarget !== undefined) {\n this.item._updateConnector(this._undoTarget, 'target');\n }\n this.item.updateModel();\n },\n redo: function () {\n if (this._redoSource !== undefined) {\n this.item._updateConnector(this._redoSource, 'source');\n }\n if (this._redoTarget !== undefined) {\n this.item._updateConnector(this._redoTarget, 'target');\n }\n this.item.updateModel();\n }\n });\n var ConnectionEditUndoUnit = Class.extend({\n init: function (item, undoSource, undoTarget) {\n this.item = item;\n this._undoSource = undoSource;\n this._undoTarget = undoTarget;\n this._redoSource = item.source();\n this._redoTarget = item.target();\n this.title = 'Connection Editing';\n },\n undo: function () {\n this.item._updateConnector(this._undoSource, 'source');\n this.item._updateConnector(this._undoTarget, 'target');\n this.item.updateModel();\n },\n redo: function () {\n this.item._updateConnector(this._redoSource, 'source');\n this.item._updateConnector(this._redoTarget, 'target');\n this.item.updateModel();\n }\n });\n var DeleteConnectionUnit = Class.extend({\n init: function (connection) {\n this.connection = connection;\n this.diagram = connection.diagram;\n this.targetConnector = connection.targetConnector;\n this.title = 'Delete connection';\n },\n undo: function () {\n this.diagram._addConnection(this.connection, false);\n },\n redo: function () {\n this.diagram.remove(this.connection, false);\n }\n });\n var DeleteShapeUnit = Class.extend({\n init: function (shape) {\n this.shape = shape;\n this.diagram = shape.diagram;\n this.title = 'Deletion';\n },\n undo: function () {\n this.diagram._addShape(this.shape, false);\n this.shape.select(false);\n },\n redo: function () {\n this.shape.select(false);\n this.diagram.remove(this.shape, false);\n }\n });\n var TransformUnit = Class.extend({\n init: function (shapes, undoStates, adorner) {\n this.shapes = shapes;\n this.undoStates = undoStates;\n this.title = 'Transformation';\n this.redoStates = [];\n this.adorner = adorner;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoStates.push(shape.bounds());\n }\n },\n undo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.undoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.redoStates[i], this.undoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n },\n redo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.redoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.undoStates[i], this.redoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n }\n });\n var AddConnectionUnit = Class.extend({\n init: function (connection, diagram) {\n this.connection = connection;\n this.diagram = diagram;\n this.title = 'New connection';\n },\n undo: function () {\n this.diagram.remove(this.connection, false);\n },\n redo: function () {\n this.diagram._addConnection(this.connection, false);\n }\n });\n var AddShapeUnit = Class.extend({\n init: function (shape, diagram) {\n this.shape = shape;\n this.diagram = diagram;\n this.title = 'New shape';\n },\n undo: function () {\n this.diagram.deselect();\n this.diagram.remove(this.shape, false);\n },\n redo: function () {\n this.diagram._addShape(this.shape, false);\n }\n });\n var PanUndoUnit = Class.extend({\n init: function (initialPosition, finalPosition, diagram) {\n this.initial = initialPosition;\n this.finalPos = finalPosition;\n this.diagram = diagram;\n this.title = 'Pan Unit';\n },\n undo: function () {\n this.diagram.pan(this.initial);\n },\n redo: function () {\n this.diagram.pan(this.finalPos);\n }\n });\n var RotateUnit = Class.extend({\n init: function (adorner, shapes, undoRotates) {\n this.shapes = shapes;\n this.undoRotates = undoRotates;\n this.title = 'Rotation';\n this.redoRotates = [];\n this.redoAngle = adorner._angle;\n this.adorner = adorner;\n this.center = adorner._innerBounds.center();\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoRotates.push(shape.rotate().angle);\n }\n },\n undo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.undoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n },\n redo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.redoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n }\n });\n var ToFrontUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toFront(this.items, false);\n }\n });\n var ToBackUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toBack(this.items, false);\n }\n });\n var UndoRedoService = kendo.Observable.extend({\n init: function (options) {\n kendo.Observable.fn.init.call(this, options);\n this.bind(this.events, options);\n this.stack = [];\n this.index = 0;\n this.capacity = 100;\n },\n events: [\n 'undone',\n 'redone'\n ],\n begin: function () {\n this.composite = new CompositeUnit();\n },\n cancel: function () {\n this.composite = undefined;\n },\n commit: function (execute) {\n if (this.composite.units.length > 0) {\n this._restart(this.composite, execute);\n }\n this.composite = undefined;\n },\n addCompositeItem: function (undoUnit) {\n if (this.composite) {\n this.composite.add(undoUnit);\n } else {\n this.add(undoUnit);\n }\n },\n add: function (undoUnit, execute) {\n this._restart(undoUnit, execute);\n },\n pop: function () {\n if (this.index > 0) {\n this.stack.pop();\n this.index--;\n }\n },\n count: function () {\n return this.stack.length;\n },\n undo: function () {\n if (this.index > 0) {\n this.index--;\n this.stack[this.index].undo();\n this.trigger('undone');\n }\n },\n redo: function () {\n if (this.stack.length > 0 && this.index < this.stack.length) {\n this.stack[this.index].redo();\n this.index++;\n this.trigger('redone');\n }\n },\n _restart: function (composite, execute) {\n this.stack.splice(this.index, this.stack.length - this.index);\n this.stack.push(composite);\n if (execute !== false) {\n this.redo();\n } else {\n this.index++;\n }\n if (this.stack.length > this.capacity) {\n this.stack.splice(0, this.stack.length - this.capacity);\n this.index = this.capacity;\n }\n },\n clear: function () {\n this.stack = [];\n this.index = 0;\n }\n });\n var EmptyTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n start: function () {\n },\n move: function () {\n },\n end: function () {\n },\n tryActivate: function () {\n return false;\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ScrollerTool = EmptyTool.extend({\n init: function (toolService) {\n var tool = this;\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n EmptyTool.fn.init.call(tool, toolService);\n var diagram = tool.toolService.diagram, canvas = diagram.canvas;\n var scroller = diagram.scroller = tool.scroller = $(diagram.scrollable).kendoMobileScroller({\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n mousewheelScrolling: false,\n zoom: false,\n scroll: proxy(tool._move, tool)\n }).data('kendoMobileScroller');\n if (canvas.translate) {\n tool.movableCanvas = new Movable(canvas.element);\n }\n var virtualScroll = function (dimension, min, max) {\n dimension.makeVirtual();\n dimension.virtualSize(min || SCROLL_MIN, max || SCROLL_MAX);\n };\n virtualScroll(scroller.dimensions.x);\n virtualScroll(scroller.dimensions.y);\n scroller.disable();\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var options = toolService.diagram.options.pannable;\n var enabled = meta.ctrlKey;\n if (defined(options.key)) {\n if (!options.key || options.key == 'none') {\n enabled = noMeta(meta) && !defined(toolService.hoveredItem);\n } else {\n enabled = meta[options.key + 'Key'];\n }\n }\n return options !== false && enabled && !defined(toolService.hoveredAdorner) && !defined(toolService._hoveredConnector);\n },\n start: function () {\n this.scroller.enable();\n },\n move: function () {\n },\n _move: function (args) {\n var tool = this, diagram = tool.toolService.diagram, canvas = diagram.canvas, scrollPos = new Point(args.scrollLeft, args.scrollTop);\n if (canvas.translate) {\n diagram._storePan(scrollPos.times(-1));\n tool.movableCanvas.moveTo(scrollPos);\n canvas.translate(scrollPos.x, scrollPos.y);\n } else {\n scrollPos = scrollPos.plus(diagram._pan.times(-1));\n }\n diagram.trigger(PAN, { pan: scrollPos });\n },\n end: function () {\n this.scroller.disable();\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n var PointerTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function () {\n return true;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, hoveredItem = toolService.hoveredItem;\n if (hoveredItem) {\n toolService.selectSingle(hoveredItem, meta);\n if (hoveredItem.adorner) {\n this.adorner = hoveredItem.adorner;\n this.handle = this.adorner._hitTest(p);\n }\n }\n if (!this.handle) {\n this.handle = diagram._resizingAdorner._hitTest(p);\n if (this.handle) {\n this.adorner = diagram._resizingAdorner;\n }\n }\n if (this.adorner) {\n if (!this.adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_START, {\n shapes: this.adorner.shapes,\n connections: []\n })) {\n this.adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n }\n },\n move: function (p) {\n if (this.adorner) {\n this.adorner.move(this.handle, p);\n if (this.adorner.isDragHandle(this.handle)) {\n this.toolService.diagram.trigger(DRAG, {\n shapes: this.adorner.shapes,\n connections: []\n });\n }\n }\n },\n end: function () {\n var diagram = this.toolService.diagram, adorner = this.adorner, unit;\n if (adorner) {\n if (!adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_END, {\n shapes: adorner.shapes,\n connections: []\n })) {\n unit = adorner.stop();\n if (unit) {\n diagram.undoRedoService.add(unit, false);\n }\n } else {\n adorner.cancel();\n }\n }\n this.adorner = undefined;\n this.handle = undefined;\n },\n getCursor: function (p) {\n return this.toolService.hoveredItem ? this.toolService.hoveredItem._getCursor(p) : Cursors.arrow;\n }\n });\n var SelectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var selectable = toolService.diagram.options.selectable;\n var enabled = selectable && selectable.multiple !== false;\n if (enabled) {\n if (selectable.key && selectable.key != 'none') {\n enabled = meta[selectable.key + 'Key'];\n } else {\n enabled = noMeta(meta);\n }\n }\n return enabled && !defined(toolService.hoveredItem) && !defined(toolService.hoveredAdorner);\n },\n start: function (p) {\n var diagram = this.toolService.diagram;\n diagram.deselect();\n diagram.selector.start(p);\n },\n move: function (p) {\n var diagram = this.toolService.diagram;\n diagram.selector.move(p);\n },\n end: function (p, meta) {\n var diagram = this.toolService.diagram, hoveredItem = this.toolService.hoveredItem;\n var rect = diagram.selector.bounds();\n if ((!hoveredItem || !hoveredItem.isSelected) && !meta.ctrlKey) {\n diagram.deselect();\n }\n if (!rect.isEmpty()) {\n diagram.selectArea(rect);\n }\n diagram.selector.end();\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function () {\n return this.toolService._hoveredConnector;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, connector = toolService._hoveredConnector, connection = diagram._createConnection({}, connector._c, p);\n if (canDrag(connection) && !diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n }) && diagram._addConnection(connection)) {\n toolService._connectionManipulation(connection, connector._c.shape, true);\n toolService._removeHover();\n toolService.selectSingle(toolService.activeConnection, meta);\n if (meta.type == 'touchmove') {\n diagram._cachedTouchTarget = connector.visual;\n }\n } else {\n connection.source(null);\n toolService.end(p);\n }\n },\n move: function (p) {\n var toolService = this.toolService;\n var connection = toolService.activeConnection;\n connection.target(p);\n toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n });\n return true;\n },\n end: function (p) {\n var toolService = this.toolService, d = toolService.diagram, connection = toolService.activeConnection, hoveredItem = toolService.hoveredItem, connector = toolService._hoveredConnector, target, cachedTouchTarget = d._cachedTouchTarget;\n if (!connection) {\n return;\n }\n if (connector && connector._c != connection.sourceConnector) {\n target = connector._c;\n } else if (hoveredItem && hoveredItem instanceof diagram.Shape) {\n target = hoveredItem.getConnector(AUTO) || hoveredItem.getConnector(p);\n } else {\n target = p;\n }\n connection.target(target);\n if (!d.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n })) {\n connection.updateModel();\n d._syncConnectionChanges();\n } else {\n d.remove(connection, false);\n d.undoRedoService.pop();\n }\n toolService._connectionManipulation();\n if (cachedTouchTarget) {\n d._connectorsAdorner.visual.remove(cachedTouchTarget);\n d._cachedTouchTarget = null;\n }\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionEditTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, selectable = diagram.options.selectable, item = toolService.hoveredItem, isActive = selectable !== false && item && item.path && !(item.isSelected && meta.ctrlKey);\n if (isActive) {\n this._c = item;\n }\n return isActive;\n },\n start: function (p, meta) {\n var toolService = this.toolService;\n var connection = this._c;\n toolService.selectSingle(connection, meta);\n var adorner = connection.adorner;\n var handle, name;\n if (adorner) {\n handle = adorner._hitTest(p);\n name = HANDLE_NAMES[handle];\n }\n if (canDrag(connection) && adorner && !toolService.diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: name\n })) {\n this.handle = handle;\n this.handleName = name;\n adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n },\n move: function (p) {\n var adorner = this._c.adorner;\n if (canDrag(this._c) && adorner) {\n adorner.move(this.handle, p);\n this.toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [this._c],\n connectionHandle: this.handleName\n });\n return true;\n }\n },\n end: function (p) {\n var connection = this._c;\n var adorner = connection.adorner;\n var toolService = this.toolService;\n var diagram = toolService.diagram;\n if (adorner) {\n if (canDrag(connection)) {\n var unit = adorner.stop(p);\n if (!diagram.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: this.handleName\n })) {\n diagram.undoRedoService.add(unit, false);\n connection.updateModel();\n diagram._syncConnectionChanges();\n } else {\n unit.undo();\n }\n }\n }\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n function testKey(key, str) {\n return str.charCodeAt(0) == key || str.toUpperCase().charCodeAt(0) == key;\n }\n var ToolService = Class.extend({\n init: function (diagram) {\n this.diagram = diagram;\n this.tools = [\n new ScrollerTool(this),\n new ConnectionEditTool(this),\n new ConnectionTool(this),\n new SelectionTool(this),\n new PointerTool(this)\n ];\n this.activeTool = undefined;\n },\n start: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this._updateHoveredItem(p);\n this._activateTool(p, meta);\n this.activeTool.start(p, meta);\n this._updateCursor(p);\n this.diagram.focus();\n this.diagram.canvas.surface.suspendTracking();\n this.startPoint = p;\n return true;\n },\n move: function (p, meta) {\n meta = deepExtend({}, meta);\n var updateHovered = true;\n if (this.activeTool) {\n updateHovered = this.activeTool.move(p, meta);\n }\n if (updateHovered) {\n this._updateHoveredItem(p);\n }\n this._updateCursor(p);\n return true;\n },\n end: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this.diagram.canvas.surface.resumeTracking();\n this.activeTool = undefined;\n this._updateCursor(p);\n return true;\n },\n keyDown: function (key, meta) {\n var diagram = this.diagram;\n meta = deepExtend({\n ctrlKey: false,\n metaKey: false,\n altKey: false\n }, meta);\n if ((meta.ctrlKey || meta.metaKey) && !meta.altKey) {\n if (testKey(key, 'a')) {\n diagram.selectAll();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'z')) {\n diagram.undo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'y')) {\n diagram.redo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'c')) {\n diagram.copy();\n diagram._destroyToolBar();\n } else if (testKey(key, 'x')) {\n diagram.cut();\n diagram._destroyToolBar();\n } else if (testKey(key, 'v')) {\n diagram.paste();\n diagram._destroyToolBar();\n } else if (testKey(key, 'l')) {\n diagram.layout();\n diagram._destroyToolBar();\n } else if (testKey(key, 'd')) {\n diagram._destroyToolBar();\n diagram.copy();\n diagram.paste();\n }\n } else if (key === 46 || key === 8) {\n var toRemove = this.diagram._triggerRemove(diagram.select());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n this.diagram._destroyToolBar();\n }\n return true;\n } else if (key === 27) {\n this._discardNewConnection();\n diagram.deselect();\n diagram._destroyToolBar();\n return true;\n }\n },\n wheel: function (p, meta) {\n var diagram = this.diagram, delta = meta.delta, z = diagram.zoom(), options = diagram.options, zoomRate = options.zoomRate, zoomOptions = {\n point: p,\n meta: meta,\n zoom: z\n };\n if (diagram.trigger(ZOOM_START, zoomOptions)) {\n return;\n }\n if (delta < 0) {\n z += zoomRate;\n } else {\n z -= zoomRate;\n }\n z = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, z)), 2);\n zoomOptions.zoom = z;\n diagram.zoom(z, zoomOptions);\n diagram.trigger(ZOOM_END, zoomOptions);\n return true;\n },\n setTool: function (tool, index) {\n tool.toolService = this;\n this.tools[index] = tool;\n },\n selectSingle: function (item, meta) {\n var diagram = this.diagram;\n var selectable = diagram.options.selectable;\n if (selectable && !item.isSelected && item.options.selectable !== false) {\n var addToSelection = meta.ctrlKey && selectable.multiple !== false;\n diagram.select(item, { addToSelection: addToSelection });\n }\n },\n _discardNewConnection: function () {\n if (this.newConnection) {\n this.diagram.remove(this.newConnection);\n this.newConnection = undefined;\n }\n },\n _activateTool: function (p, meta) {\n for (var i = 0; i < this.tools.length; i++) {\n var tool = this.tools[i];\n if (tool.tryActivate(p, meta)) {\n this.activeTool = tool;\n break;\n }\n }\n },\n _updateCursor: function (p) {\n var element = this.diagram.element;\n var cursor = this.activeTool ? this.activeTool.getCursor(p) : this.hoveredAdorner ? this.hoveredAdorner._getCursor(p) : this.hoveredItem ? this.hoveredItem._getCursor(p) : Cursors.arrow;\n element.css({ cursor: cursor });\n if (browser.msie && browser.version == 7) {\n element[0].style.cssText = element[0].style.cssText;\n }\n },\n _connectionManipulation: function (connection, disabledShape, isNew) {\n this.activeConnection = connection;\n this.disabledShape = disabledShape;\n if (isNew) {\n this.newConnection = this.activeConnection;\n } else {\n this.newConnection = undefined;\n }\n },\n _updateHoveredItem: function (p) {\n var hit = this._hitTest(p);\n var diagram = this.diagram;\n if (hit != this.hoveredItem && (!this.disabledShape || hit != this.disabledShape)) {\n if (this.hoveredItem) {\n diagram.trigger(MOUSE_LEAVE, { item: this.hoveredItem });\n this.hoveredItem._hover(false);\n }\n if (hit && hit.options.enable) {\n diagram.trigger(MOUSE_ENTER, { item: hit });\n this.hoveredItem = hit;\n this.hoveredItem._hover(true);\n } else {\n this.hoveredItem = undefined;\n }\n }\n },\n _removeHover: function () {\n if (this.hoveredItem) {\n this.hoveredItem._hover(false);\n this.hoveredItem = undefined;\n }\n },\n _hitTest: function (point) {\n var hit, d = this.diagram, item, i;\n if (this._hoveredConnector) {\n this._hoveredConnector._hover(false);\n this._hoveredConnector = undefined;\n }\n if (d._connectorsAdorner._visible) {\n hit = d._connectorsAdorner._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n hit = this.diagram._resizingAdorner._hitTest(point);\n if (hit) {\n this.hoveredAdorner = d._resizingAdorner;\n if (hit.x !== 0 || hit.y !== 0) {\n return;\n }\n hit = undefined;\n } else {\n this.hoveredAdorner = undefined;\n }\n if (!this.activeTool || this.activeTool.type !== 'ConnectionTool') {\n var selectedConnections = [];\n for (i = 0; i < d._selectedItems.length; i++) {\n item = d._selectedItems[i];\n if (item instanceof diagram.Connection) {\n selectedConnections.push(item);\n }\n }\n hit = this._hitTestItems(selectedConnections, point);\n }\n return hit || this._hitTestElements(point);\n },\n _hitTestElements: function (point) {\n var diagram = this.diagram;\n var shapeHit = this._hitTestItems(diagram.shapes, point);\n var connectionHit = this._hitTestItems(diagram.connections, point);\n var hit;\n if ((!this.activeTool || this.activeTool.type != 'ConnectionTool') && shapeHit && connectionHit && !hitTestShapeConnectors(shapeHit, point)) {\n var mainLayer = diagram.mainLayer;\n var shapeIdx = inArray(shapeHit.visual, mainLayer.children);\n var connectionIdx = inArray(connectionHit.visual, mainLayer.children);\n hit = shapeIdx > connectionIdx ? shapeHit : connectionHit;\n }\n return hit || shapeHit || connectionHit;\n },\n _hitTestItems: function (array, point) {\n var i, item, hit;\n for (i = array.length - 1; i >= 0; i--) {\n item = array[i];\n hit = item._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n }\n });\n var ConnectionRouterBase = kendo.Class.extend({\n init: function () {\n }\n });\n var LinearConnectionRouter = ConnectionRouterBase.extend({\n init: function (connection) {\n var that = this;\n ConnectionRouterBase.fn.init.call(that);\n this.connection = connection;\n },\n hitTest: function (p) {\n var rec = this.getBounds().inflate(HIT_TEST_DISTANCE);\n if (!rec.contains(p)) {\n return false;\n }\n return diagram.Geometry.distanceToPolyline(p, this.connection.allPoints()) < HIT_TEST_DISTANCE;\n },\n getBounds: function () {\n var points = this.connection.allPoints(), s = points[0], e = points[points.length - 1], right = Math.max(s.x, e.x), left = Math.min(s.x, e.x), top = Math.min(s.y, e.y), bottom = Math.max(s.y, e.y);\n for (var i = 1; i < points.length - 1; ++i) {\n right = Math.max(right, points[i].x);\n left = Math.min(left, points[i].x);\n top = Math.min(top, points[i].y);\n bottom = Math.max(bottom, points[i].y);\n }\n return new Rect(left, top, right - left, bottom - top);\n }\n });\n var PolylineRouter = LinearConnectionRouter.extend({\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n route: function () {\n }\n });\n var CascadingRouter = LinearConnectionRouter.extend({\n SAME_SIDE_DISTANCE_RATIO: 5,\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n routePoints: function (start, end, sourceConnector, targetConnector) {\n var result;\n if (sourceConnector && targetConnector) {\n result = this._connectorPoints(start, end, sourceConnector, targetConnector);\n } else {\n result = this._floatingPoints(start, end, sourceConnector);\n }\n return result;\n },\n route: function () {\n var sourceConnector = this.connection._resolvedSourceConnector;\n var targetConnector = this.connection._resolvedTargetConnector;\n var start = this.connection.sourcePoint();\n var end = this.connection.targetPoint();\n var points = this.routePoints(start, end, sourceConnector, targetConnector);\n this.connection.points(points);\n },\n _connectorSides: [\n {\n name: 'Top',\n axis: 'y',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Left',\n axis: 'x',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Bottom',\n axis: 'y',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n },\n {\n name: 'Right',\n axis: 'x',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n }\n ],\n _connectorSide: function (connector, targetPoint) {\n var position = connector.position();\n var shapeBounds = connector.shape.bounds(ROTATED);\n var bounds = {\n topLeft: shapeBounds.topLeft(),\n bottomRight: shapeBounds.bottomRight()\n };\n var sides = this._connectorSides;\n var min = util.MAX_NUM;\n var sideDistance;\n var minSide;\n var axis;\n var side;\n for (var idx = 0; idx < sides.length; idx++) {\n side = sides[idx];\n axis = side.axis;\n sideDistance = Math.round(Math.abs(position[axis] - bounds[side.boundsPoint][axis]));\n if (sideDistance < min) {\n min = sideDistance;\n minSide = side;\n } else if (sideDistance === min && (position[axis] - targetPoint[axis]) * side.secondarySign > (position[minSide.axis] - targetPoint[minSide.axis]) * minSide.secondarySign) {\n minSide = side;\n }\n }\n return minSide.name;\n },\n _sameSideDistance: function (connector) {\n var bounds = connector.shape.bounds(ROTATED);\n return Math.min(bounds.width, bounds.height) / this.SAME_SIDE_DISTANCE_RATIO;\n },\n _connectorPoints: function (start, end, sourceConnector, targetConnector) {\n var sourceConnectorSide = this._connectorSide(sourceConnector, end);\n var targetConnectorSide = this._connectorSide(targetConnector, start);\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var sameSideDistance = this._sameSideDistance(sourceConnector);\n var result = [];\n var pointX, pointY;\n if (sourceConnectorSide === TOP || sourceConnectorSide == BOTTOM) {\n if (targetConnectorSide == TOP || targetConnectorSide == BOTTOM) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == TOP) {\n pointY = Math.min(start.y, end.y) - sameSideDistance;\n } else {\n pointY = Math.max(start.y, end.y) + sameSideDistance;\n }\n result = [\n new Point(start.x, pointY),\n new Point(end.x, pointY)\n ];\n } else {\n result = [\n new Point(start.x, start.y + deltaY / 2),\n new Point(end.x, start.y + deltaY / 2)\n ];\n }\n } else {\n result = [new Point(start.x, end.y)];\n }\n } else {\n if (targetConnectorSide == LEFT || targetConnectorSide == RIGHT) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == LEFT) {\n pointX = Math.min(start.x, end.x) - sameSideDistance;\n } else {\n pointX = Math.max(start.x, end.x) + sameSideDistance;\n }\n result = [\n new Point(pointX, start.y),\n new Point(pointX, end.y)\n ];\n } else {\n result = [\n new Point(start.x + deltaX / 2, start.y),\n new Point(start.x + deltaX / 2, start.y + deltaY)\n ];\n }\n } else {\n result = [new Point(end.x, start.y)];\n }\n }\n return result;\n },\n _floatingPoints: function (start, end, sourceConnector) {\n var sourceConnectorSide = sourceConnector ? this._connectorSide(sourceConnector, end) : null;\n var cascadeStartHorizontal = this._startHorizontal(start, end, sourceConnectorSide);\n var points = [\n start,\n start,\n end,\n end\n ];\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var length = points.length;\n var shiftX;\n var shiftY;\n for (var idx = 1; idx < length - 1; ++idx) {\n if (cascadeStartHorizontal) {\n if (idx % 2 !== 0) {\n shiftX = deltaX / (length / 2);\n shiftY = 0;\n } else {\n shiftX = 0;\n shiftY = deltaY / ((length - 1) / 2);\n }\n } else {\n if (idx % 2 !== 0) {\n shiftX = 0;\n shiftY = deltaY / (length / 2);\n } else {\n shiftX = deltaX / ((length - 1) / 2);\n shiftY = 0;\n }\n }\n points[idx] = new Point(points[idx - 1].x + shiftX, points[idx - 1].y + shiftY);\n }\n idx--;\n if (cascadeStartHorizontal && idx % 2 !== 0 || !cascadeStartHorizontal && idx % 2 === 0) {\n points[length - 2] = new Point(points[length - 1].x, points[length - 2].y);\n } else {\n points[length - 2] = new Point(points[length - 2].x, points[length - 1].y);\n }\n return [\n points[1],\n points[2]\n ];\n },\n _startHorizontal: function (start, end, sourceSide) {\n var horizontal;\n if (sourceSide !== null && (sourceSide === RIGHT || sourceSide === LEFT)) {\n horizontal = true;\n } else {\n horizontal = Math.abs(start.x - end.x) > Math.abs(start.y - end.y);\n }\n return horizontal;\n }\n });\n var AdornerBase = Class.extend({\n init: function (diagram, options) {\n var that = this;\n that.diagram = diagram;\n that.options = deepExtend({}, that.options, options);\n that.visual = new Group();\n that.diagram._adorners.push(that);\n },\n refresh: function () {\n }\n });\n var ConnectionEditAdorner = AdornerBase.extend({\n init: function (connection, options) {\n var that = this, diagram;\n that.connection = connection;\n diagram = that.connection.diagram;\n that._ts = diagram.toolService;\n AdornerBase.fn.init.call(that, diagram, options);\n var sp = that.connection.sourcePoint();\n var tp = that.connection.targetPoint();\n that.spVisual = new Circle(deepExtend(that.options.handles, { center: sp }));\n that.epVisual = new Circle(deepExtend(that.options.handles, { center: tp }));\n that.visual.append(that.spVisual);\n that.visual.append(that.epVisual);\n },\n options: { handles: {} },\n _getCursor: function () {\n return Cursors.move;\n },\n start: function (p) {\n this.handle = this._hitTest(p);\n this.startPoint = p;\n this._initialSource = this.connection.source();\n this._initialTarget = this.connection.target();\n switch (this.handle) {\n case -1:\n if (this.connection.targetConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.targetConnector.shape);\n }\n break;\n case 1:\n if (this.connection.sourceConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.sourceConnector.shape);\n }\n break;\n }\n },\n move: function (handle, p) {\n switch (handle) {\n case -1:\n this.connection.source(p);\n break;\n case 1:\n this.connection.target(p);\n break;\n default:\n var delta = p.minus(this.startPoint);\n this.startPoint = p;\n if (!this.connection.sourceConnector) {\n this.connection.source(this.connection.sourcePoint().plus(delta));\n }\n if (!this.connection.targetConnector) {\n this.connection.target(this.connection.targetPoint().plus(delta));\n }\n break;\n }\n this.refresh();\n return true;\n },\n stop: function (p) {\n var ts = this.diagram.toolService, item = ts.hoveredItem, target;\n if (ts._hoveredConnector) {\n target = ts._hoveredConnector._c;\n } else if (item && item instanceof diagram.Shape) {\n target = item.getConnector(AUTO) || item.getConnector(p);\n } else {\n target = p;\n }\n if (this.handle === -1) {\n this.connection.source(target);\n } else if (this.handle === 1) {\n this.connection.target(target);\n }\n this.handle = undefined;\n this._ts._connectionManipulation();\n return new ConnectionEditUndoUnit(this.connection, this._initialSource, this._initialTarget);\n },\n _hitTest: function (point) {\n var sourcePoint = this.connection.sourcePoint();\n var targetPoint = this.connection.targetPoint();\n var radiusX = this.options.handles.width / 2 + HIT_TEST_DISTANCE;\n var radiusY = this.options.handles.height / 2 + HIT_TEST_DISTANCE;\n var sourcePointDistance = sourcePoint.distanceTo(point);\n var targetPointDistance = targetPoint.distanceTo(point);\n var sourceHandle = new Rect(sourcePoint.x, sourcePoint.y).inflate(radiusX, radiusY).contains(point);\n var targetHandle = new Rect(targetPoint.x, targetPoint.y).inflate(radiusX, radiusY).contains(point);\n var handle = 0;\n if (sourceHandle && (!targetHandle || sourcePointDistance < targetPointDistance)) {\n handle = -1;\n } else if (targetHandle && (!sourceHandle || targetPointDistance < sourcePointDistance)) {\n handle = 1;\n }\n return handle;\n },\n refresh: function () {\n this.spVisual.redraw({ center: this.diagram.modelToLayer(this.connection.sourcePoint()) });\n this.epVisual.redraw({ center: this.diagram.modelToLayer(this.connection.targetPoint()) });\n }\n });\n var ConnectorsAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._refreshHandler = function (e) {\n if (e.item == that.shape) {\n that.refresh();\n }\n };\n },\n show: function (shape) {\n var that = this, len, i, ctr;\n that._visible = true;\n that.shape = shape;\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler);\n len = shape.connectors.length;\n that.connectors = [];\n that._clearVisual();\n for (i = 0; i < len; i++) {\n ctr = new ConnectorVisual(shape.connectors[i]);\n that.connectors.push(ctr);\n that.visual.append(ctr.visual);\n }\n that.visual.visible(true);\n that.refresh();\n },\n _clearVisual: function () {\n var that = this;\n if (that.diagram._cachedTouchTarget) {\n that._keepCachedTouchTarget();\n } else {\n that.visual.clear();\n }\n },\n _keepCachedTouchTarget: function () {\n var that = this, visualChildren = that.visual.children;\n var childrenCount = visualChildren.length;\n var index = inArray(that.diagram._cachedTouchTarget, visualChildren);\n for (var i = childrenCount - 1; i >= 0; i--) {\n if (i == index) {\n continue;\n }\n that.visual.remove(visualChildren[i]);\n }\n },\n destroy: function () {\n var that = this;\n that.diagram.unbind(ITEMBOUNDSCHANGE, that._refreshHandler);\n that.shape = undefined;\n that._visible = undefined;\n that.visual.visible(false);\n },\n _hitTest: function (p) {\n var ctr, i;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr._hitTest(p)) {\n ctr._hover(true);\n this.diagram.toolService._hoveredConnector = ctr;\n break;\n }\n }\n },\n refresh: function () {\n if (this.shape) {\n var bounds = this.shape.bounds();\n bounds = this.diagram.modelToLayer(bounds);\n this.visual.position(bounds.topLeft());\n $.each(this.connectors, function () {\n this.refresh();\n });\n }\n }\n });\n function hitToOppositeSide(hit, bounds) {\n var result;\n if (hit.x == -1 && hit.y == -1) {\n result = bounds.bottomRight();\n } else if (hit.x == 1 && hit.y == 1) {\n result = bounds.topLeft();\n } else if (hit.x == -1 && hit.y == 1) {\n result = bounds.topRight();\n } else if (hit.x == 1 && hit.y == -1) {\n result = bounds.bottomLeft();\n } else if (hit.x === 0 && hit.y == -1) {\n result = bounds.bottom();\n } else if (hit.x === 0 && hit.y == 1) {\n result = bounds.top();\n } else if (hit.x == 1 && hit.y === 0) {\n result = bounds.left();\n } else if (hit.x == -1 && hit.y === 0) {\n result = bounds.right();\n }\n return result;\n }\n var ResizingAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._manipulating = false;\n that.map = [];\n that.shapes = [];\n that._initSelection();\n that._createHandles();\n that.redraw();\n that.diagram.bind('select', function (e) {\n that._initialize(e.selected);\n });\n that._refreshHandler = function () {\n if (!that._internalChange) {\n that.refreshBounds();\n that.refresh();\n }\n };\n that._rotatedHandler = function () {\n if (that.shapes.length == 1) {\n that._angle = that.shapes[0].rotate().angle;\n }\n that._refreshHandler();\n };\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler).bind(ITEMROTATE, that._rotatedHandler);\n that.refreshBounds();\n that.refresh();\n },\n options: {\n handles: {\n fill: { color: '#fff' },\n stroke: { color: '#282828' },\n height: 7,\n width: 7,\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n },\n selectable: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n offset: 10\n },\n _initSelection: function () {\n var that = this;\n var diagram = that.diagram;\n var selectable = diagram.options.selectable;\n var options = deepExtend({}, that.options.selectable, selectable);\n that.rect = new Rectangle(options);\n that.visual.append(that.rect);\n },\n _resizable: function () {\n return this.options.editable && this.options.editable.resize !== false;\n },\n _handleOptions: function () {\n return (this.options.editable.resize || {}).handles || this.options.handles;\n },\n _createHandles: function () {\n var handles, item, y, x;\n if (this._resizable()) {\n handles = this._handleOptions();\n for (x = -1; x <= 1; x++) {\n for (y = -1; y <= 1; y++) {\n if (x !== 0 || y !== 0) {\n item = new Rectangle(handles);\n item.drawingElement._hover = proxy(this._hover, this);\n this.map.push({\n x: x,\n y: y,\n visual: item\n });\n this.visual.append(item);\n }\n }\n }\n }\n },\n bounds: function (value) {\n if (value) {\n this._innerBounds = value.clone();\n this._bounds = this.diagram.modelToLayer(value).inflate(this.options.offset, this.options.offset);\n } else {\n return this._bounds;\n }\n },\n _hitTest: function (p) {\n var tp = this.diagram.modelToLayer(p), i, hit, handleBounds, handlesCount = this.map.length, handle;\n if (this._angle) {\n tp = tp.clone().rotate(this._bounds.center(), this._angle);\n }\n if (this._resizable()) {\n for (i = 0; i < handlesCount; i++) {\n handle = this.map[i];\n hit = new Point(handle.x, handle.y);\n handleBounds = this._getHandleBounds(hit);\n handleBounds.offset(this._bounds.x, this._bounds.y);\n if (handleBounds.contains(tp)) {\n return hit;\n }\n }\n }\n if (this._bounds.contains(tp)) {\n return new Point(0, 0);\n }\n },\n _getHandleBounds: function (p) {\n if (this._resizable()) {\n var handles = this._handleOptions(), w = handles.width, h = handles.height, r = new Rect(0, 0, w, h);\n if (p.x < 0) {\n r.x = -w / 2;\n } else if (p.x === 0) {\n r.x = Math.floor(this._bounds.width / 2) - w / 2;\n } else if (p.x > 0) {\n r.x = this._bounds.width + 1 - w / 2;\n }\n if (p.y < 0) {\n r.y = -h / 2;\n } else if (p.y === 0) {\n r.y = Math.floor(this._bounds.height / 2) - h / 2;\n } else if (p.y > 0) {\n r.y = this._bounds.height + 1 - h / 2;\n }\n return r;\n }\n },\n _getCursor: function (point) {\n var hit = this._hitTest(point);\n if (hit && hit.x >= -1 && hit.x <= 1 && hit.y >= -1 && hit.y <= 1 && this._resizable()) {\n var angle = this._angle;\n if (angle) {\n angle = 360 - angle;\n hit.rotate(new Point(0, 0), angle);\n hit = new Point(Math.round(hit.x), Math.round(hit.y));\n }\n if (hit.x == -1 && hit.y == -1) {\n return 'nw-resize';\n }\n if (hit.x == 1 && hit.y == 1) {\n return 'se-resize';\n }\n if (hit.x == -1 && hit.y == 1) {\n return 'sw-resize';\n }\n if (hit.x == 1 && hit.y == -1) {\n return 'ne-resize';\n }\n if (hit.x === 0 && hit.y == -1) {\n return 'n-resize';\n }\n if (hit.x === 0 && hit.y == 1) {\n return 's-resize';\n }\n if (hit.x == 1 && hit.y === 0) {\n return 'e-resize';\n }\n if (hit.x == -1 && hit.y === 0) {\n return 'w-resize';\n }\n }\n return this._manipulating ? Cursors.move : Cursors.select;\n },\n _initialize: function () {\n var that = this, i, item, items = that.diagram.select();\n that.shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof diagram.Shape) {\n that.shapes.push(item);\n item._rotationOffset = new Point();\n }\n }\n that._angle = that.shapes.length == 1 ? that.shapes[0].rotate().angle : 0;\n that._startAngle = that._angle;\n that._rotates();\n that._positions();\n that.refreshBounds();\n that.refresh();\n that.redraw();\n },\n _rotates: function () {\n var that = this, i, shape;\n that.initialRotates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialRotates.push(shape.rotate().angle);\n }\n },\n _positions: function () {\n var that = this, i, shape;\n that.initialStates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialStates.push(shape.bounds());\n }\n },\n _hover: function (value, element) {\n if (this._resizable()) {\n var handleOptions = this._handleOptions(), hover = handleOptions.hover, stroke = handleOptions.stroke, fill = handleOptions.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n element.stroke(stroke.color, stroke.width, stroke.opacity);\n element.fill(fill.color, fill.opacity);\n }\n },\n start: function (p) {\n this._sp = p;\n this._cp = p;\n this._lp = p;\n this._manipulating = true;\n this._internalChange = true;\n this.shapeStates = [];\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.shapeStates.push(shape.bounds());\n }\n },\n redraw: function () {\n var i, handle, visibleHandles = this._resizable();\n for (i = 0; i < this.map.length; i++) {\n handle = this.map[i];\n handle.visual.visible(visibleHandles);\n }\n },\n angle: function (value) {\n if (defined(value)) {\n this._angle = value;\n }\n return this._angle;\n },\n rotate: function () {\n var center = this._innerBounds.center();\n var currentAngle = this.angle();\n this._internalChange = true;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n currentAngle = (currentAngle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(currentAngle, center);\n }\n this.refresh();\n },\n move: function (handle, p) {\n var delta, dragging, dtl = new Point(), dbr = new Point(), bounds, center, shape, i, angle, newBounds, changed = 0, staticPoint, scaleX, scaleY;\n if (handle.y === -2 && handle.x === -1) {\n center = this._innerBounds.center();\n this._angle = this._truncateAngle(Utils.findAngle(center, p));\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n angle = (this._angle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(angle, center);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n this._rotating = true;\n }\n this.refresh();\n } else {\n if (this.shouldSnap()) {\n var thr = this._truncateDistance(p.minus(this._lp));\n if (thr.x === 0 && thr.y === 0) {\n this._cp = p;\n return;\n }\n delta = thr;\n this._lp = new Point(this._lp.x + thr.x, this._lp.y + thr.y);\n } else {\n delta = p.minus(this._cp);\n }\n if (this.isDragHandle(handle)) {\n dbr = dtl = delta;\n dragging = true;\n } else {\n if (this._angle) {\n delta.rotate(new Point(0, 0), this._angle);\n }\n if (handle.x == -1) {\n dtl.x = delta.x;\n } else if (handle.x == 1) {\n dbr.x = delta.x;\n }\n if (handle.y == -1) {\n dtl.y = delta.y;\n } else if (handle.y == 1) {\n dbr.y = delta.y;\n }\n }\n if (!dragging) {\n staticPoint = hitToOppositeSide(handle, this._innerBounds);\n scaleX = (this._innerBounds.width + delta.x * handle.x) / this._innerBounds.width;\n scaleY = (this._innerBounds.height + delta.y * handle.y) / this._innerBounds.height;\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n bounds = shape.bounds();\n if (dragging) {\n if (!canDrag(shape)) {\n continue;\n }\n newBounds = this._displaceBounds(bounds, dtl, dbr, dragging);\n } else {\n newBounds = bounds.clone();\n newBounds.scale(scaleX, scaleY, staticPoint, this._innerBounds.center(), shape.rotate().angle);\n var newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n if (newBounds.width >= shape.options.minWidth && newBounds.height >= shape.options.minHeight) {\n var oldBounds = bounds;\n shape.bounds(newBounds);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, oldBounds, newBounds);\n }\n if (oldBounds.width !== newBounds.width || oldBounds.height !== newBounds.height) {\n shape.rotate(shape.rotate().angle);\n }\n changed += 1;\n }\n }\n if (changed) {\n if (changed == i) {\n newBounds = this._displaceBounds(this._innerBounds, dtl, dbr, dragging);\n this.bounds(newBounds);\n } else {\n this.refreshBounds();\n }\n this.refresh();\n }\n this._positions();\n }\n this._cp = p;\n },\n isDragHandle: function (handle) {\n return handle.x === 0 && handle.y === 0;\n },\n cancel: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n shapes[idx].bounds(states[idx]);\n }\n this.refreshBounds();\n this.refresh();\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n },\n _truncatePositionToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncatePositionToGuides(bounds);\n }\n return bounds;\n },\n _truncateSizeToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncateSizeToGuides(bounds);\n }\n return bounds;\n },\n _truncateAngle: function (a) {\n var snap = this.snapOptions();\n var snapAngle = Math.max(snap.angle || DEFAULT_SNAP_ANGLE, MIN_SNAP_ANGLE);\n return snap ? Math.floor(a % 360 / snapAngle) * snapAngle : a % 360;\n },\n _truncateDistance: function (d) {\n if (d instanceof diagram.Point) {\n return new diagram.Point(this._truncateDistance(d.x), this._truncateDistance(d.y));\n } else {\n var snap = this.snapOptions() || {};\n var snapSize = Math.max(snap.size || DEFAULT_SNAP_SIZE, MIN_SNAP_SIZE);\n return snap ? Math.floor(d / snapSize) * snapSize : d;\n }\n },\n snapOptions: function () {\n var editable = this.diagram.options.editable;\n var snap = ((editable || {}).drag || {}).snap || {};\n return snap;\n },\n shouldSnap: function () {\n var editable = this.diagram.options.editable;\n var drag = (editable || {}).drag;\n var snap = (drag || {}).snap;\n return editable !== false && drag !== false && snap !== false;\n },\n _displaceBounds: function (bounds, dtl, dbr, dragging) {\n var tl = bounds.topLeft().plus(dtl), br = bounds.bottomRight().plus(dbr), newBounds = Rect.fromPoints(tl, br), newCenter;\n if (!dragging) {\n newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n return newBounds;\n },\n stop: function () {\n var unit, i, shape;\n if (this._cp != this._sp) {\n if (this._rotating) {\n unit = new RotateUnit(this, this.shapes, this.initialRotates);\n this._rotating = false;\n } else if (this._diffStates()) {\n if (this.diagram.ruler) {\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n var bounds = shape.bounds();\n bounds = this._truncateSizeToGuides(this._truncatePositionToGuides(bounds));\n shape.bounds(bounds);\n this.refreshBounds();\n this.refresh();\n }\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.updateModel();\n }\n unit = new TransformUnit(this.shapes, this.shapeStates, this);\n this.diagram._syncShapeChanges();\n }\n }\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n return unit;\n },\n _diffStates: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n if (!shapes[idx].bounds().equals(states[idx])) {\n return true;\n }\n }\n return false;\n },\n refreshBounds: function () {\n var bounds = this.shapes.length == 1 ? this.shapes[0].bounds().clone() : this.diagram.boundingBox(this.shapes, true);\n this.bounds(bounds);\n },\n refresh: function () {\n var that = this, b, bounds;\n if (this.shapes.length > 0) {\n bounds = this.bounds();\n this.visual.visible(true);\n this.visual.position(bounds.topLeft());\n $.each(this.map, function () {\n b = that._getHandleBounds(new Point(this.x, this.y));\n this.visual.position(b.topLeft());\n });\n this.visual.position(bounds.topLeft());\n var center = new Point(bounds.width / 2, bounds.height / 2);\n this.visual.rotate(this._angle, center);\n this.rect.redraw({\n width: bounds.width,\n height: bounds.height\n });\n if (this.rotationThumb) {\n var thumb = this.options.editable.rotate.thumb;\n this._rotationThumbBounds = new Rect(bounds.center().x, bounds.y + thumb.y, 0, 0).inflate(thumb.width);\n this.rotationThumb.redraw({ x: bounds.width / 2 - thumb.width / 2 });\n }\n } else {\n this.visual.visible(false);\n }\n }\n });\n var Selector = Class.extend({\n init: function (diagram) {\n var selectable = diagram.options.selectable;\n this.options = deepExtend({}, this.options, selectable);\n this.visual = new Rectangle(this.options);\n this.diagram = diagram;\n },\n options: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n start: function (p) {\n this._sp = this._ep = p;\n this.refresh();\n this.diagram._adorn(this, true);\n },\n end: function () {\n this._sp = this._ep = undefined;\n this.diagram._adorn(this, false);\n },\n bounds: function (value) {\n if (value) {\n this._bounds = value;\n }\n return this._bounds;\n },\n move: function (p) {\n this._ep = p;\n this.refresh();\n },\n refresh: function () {\n if (this._sp) {\n var visualBounds = Rect.fromPoints(this.diagram.modelToLayer(this._sp), this.diagram.modelToLayer(this._ep));\n this.bounds(Rect.fromPoints(this._sp, this._ep));\n this.visual.position(visualBounds.topLeft());\n this.visual.redraw({\n height: visualBounds.height + 1,\n width: visualBounds.width + 1\n });\n }\n }\n });\n var ConnectorVisual = Class.extend({\n init: function (connector) {\n this.options = deepExtend({}, connector.options);\n this._c = connector;\n this.visual = new Circle(this.options);\n this.refresh();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.visual.redraw({\n stroke: stroke,\n fill: fill\n });\n },\n refresh: function () {\n var p = this._c.shape.diagram.modelToView(this._c.position()), relative = p.minus(this._c.shape.bounds('transformed').topLeft()), value = new Rect(p.x, p.y, 0, 0);\n value.inflate(this.options.width / 2, this.options.height / 2);\n this._visualBounds = value;\n this.visual.redraw({ center: new Point(relative.x, relative.y) });\n },\n _hitTest: function (p) {\n var tp = this._c.shape.diagram.modelToView(p);\n return this._visualBounds.contains(tp);\n }\n });\n function canDrag(element) {\n var editable = element.options.editable;\n return editable && editable.drag !== false;\n }\n function hitTestShapeConnectors(shape, point) {\n var connector, position, rect;\n for (var idx = 0; idx < shape.connectors.length; idx++) {\n connector = shape.connectors[idx];\n position = connector.position();\n rect = new Rect(position.x, position.y);\n rect.inflate(HIT_TEST_DISTANCE, HIT_TEST_DISTANCE);\n if (rect.contains(point)) {\n return connector;\n }\n }\n }\n function noMeta(meta) {\n return meta.ctrlKey === false && meta.altKey === false && meta.shiftKey === false;\n }\n deepExtend(diagram, {\n CompositeUnit: CompositeUnit,\n TransformUnit: TransformUnit,\n PanUndoUnit: PanUndoUnit,\n AddShapeUnit: AddShapeUnit,\n AddConnectionUnit: AddConnectionUnit,\n DeleteShapeUnit: DeleteShapeUnit,\n DeleteConnectionUnit: DeleteConnectionUnit,\n ConnectionEditAdorner: ConnectionEditAdorner,\n ConnectionTool: ConnectionTool,\n ConnectorVisual: ConnectorVisual,\n UndoRedoService: UndoRedoService,\n ResizingAdorner: ResizingAdorner,\n Selector: Selector,\n ToolService: ToolService,\n ConnectorsAdorner: ConnectorsAdorner,\n LayoutUndoUnit: LayoutUndoUnit,\n ConnectionEditUnit: ConnectionEditUnit,\n ToFrontUnit: ToFrontUnit,\n ToBackUnit: ToBackUnit,\n ConnectionRouterBase: ConnectionRouterBase,\n PolylineRouter: PolylineRouter,\n CascadingRouter: CascadingRouter,\n SelectionTool: SelectionTool,\n ScrollerTool: ScrollerTool,\n PointerTool: PointerTool,\n ConnectionEditTool: ConnectionEditTool,\n RotateUnit: RotateUnit\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/layout', ['dataviz/diagram/math'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Graph = diagram.Graph, Node = diagram.Node, Link = diagram.Link, deepExtend = kendo.deepExtend, Size = diagram.Size, Rect = diagram.Rect, Dictionary = diagram.Dictionary, Set = diagram.Set, HyperTree = diagram.Graph, Utils = diagram.Utils, Point = diagram.Point, EPSILON = 0.000001, DEG_TO_RAD = Math.PI / 180, contains = Utils.contains, grep = $.grep;\n var LayoutBase = kendo.Class.extend({\n defaultOptions: {\n type: 'Tree',\n subtype: 'Down',\n roots: null,\n animate: false,\n limitToView: false,\n friction: 0.9,\n nodeDistance: 50,\n iterations: 300,\n horizontalSeparation: 90,\n verticalSeparation: 50,\n underneathVerticalTopOffset: 15,\n underneathHorizontalOffset: 15,\n underneathVerticalSeparation: 15,\n grid: {\n width: 1500,\n offsetX: 50,\n offsetY: 50,\n componentSpacingX: 20,\n componentSpacingY: 20\n },\n layerSeparation: 50,\n layeredIterations: 2,\n startRadialAngle: 0,\n endRadialAngle: 360,\n radialSeparation: 150,\n radialFirstLevelSeparation: 200,\n keepComponentsInOneRadialLayout: false,\n ignoreContainers: true,\n layoutContainerChildren: false,\n ignoreInvisible: true,\n animateTransitions: false\n },\n init: function () {\n },\n gridLayoutComponents: function (components) {\n if (!components) {\n throw 'No components supplied.';\n }\n Utils.forEach(components, function (c) {\n c.calcBounds();\n });\n components.sort(function (a, b) {\n return b.bounds.width - a.bounds.width;\n });\n var maxWidth = this.options.grid.width, offsetX = this.options.grid.componentSpacingX, offsetY = this.options.grid.componentSpacingY, height = 0, startX = this.options.grid.offsetX, startY = this.options.grid.offsetY, x = startX, y = startY, i, resultLinkSet = [], resultNodeSet = [];\n while (components.length > 0) {\n if (x >= maxWidth) {\n x = startX;\n y += height + offsetY;\n height = 0;\n }\n var component = components.pop();\n this.moveToOffset(component, new Point(x, y));\n for (i = 0; i < component.nodes.length; i++) {\n resultNodeSet.push(component.nodes[i]);\n }\n for (i = 0; i < component.links.length; i++) {\n resultLinkSet.push(component.links[i]);\n }\n var boundingRect = component.bounds;\n var currentHeight = boundingRect.height;\n if (currentHeight <= 0 || isNaN(currentHeight)) {\n currentHeight = 0;\n }\n var currentWidth = boundingRect.width;\n if (currentWidth <= 0 || isNaN(currentWidth)) {\n currentWidth = 0;\n }\n if (currentHeight >= height) {\n height = currentHeight;\n }\n x += currentWidth + offsetX;\n }\n return {\n nodes: resultNodeSet,\n links: resultLinkSet\n };\n },\n moveToOffset: function (component, p) {\n var i, j, bounds = component.bounds, deltax = p.x - bounds.x, deltay = p.y - bounds.y;\n for (i = 0; i < component.nodes.length; i++) {\n var node = component.nodes[i];\n var nodeBounds = node.bounds();\n if (nodeBounds.width === 0 && nodeBounds.height === 0 && nodeBounds.x === 0 && nodeBounds.y === 0) {\n nodeBounds = new Rect(0, 0, 0, 0);\n }\n nodeBounds.x += deltax;\n nodeBounds.y += deltay;\n node.bounds(nodeBounds);\n }\n for (i = 0; i < component.links.length; i++) {\n var link = component.links[i];\n if (link.points) {\n var newpoints = [];\n var points = link.points;\n for (j = 0; j < points.length; j++) {\n var pt = points[j];\n pt.x += deltax;\n pt.y += deltay;\n newpoints.push(pt);\n }\n link.points = newpoints;\n }\n }\n this.currentHorizontalOffset += bounds.width + this.options.grid.offsetX;\n return new Point(deltax, deltay);\n },\n transferOptions: function (options) {\n this.options = kendo.deepExtend({}, this.defaultOptions);\n if (Utils.isUndefined(options)) {\n return;\n }\n this.options = kendo.deepExtend(this.options, options || {});\n }\n });\n var DiagramToHyperTreeAdapter = kendo.Class.extend({\n init: function (diagram) {\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.finalNodes = [];\n this.finalLinks = [];\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.hyperMap = new Dictionary();\n this.hyperTree = new Graph();\n this.finalGraph = null;\n this.diagram = diagram;\n },\n convert: function (options) {\n if (Utils.isUndefined(this.diagram)) {\n throw 'No diagram to convert.';\n }\n this.options = kendo.deepExtend({\n ignoreInvisible: true,\n ignoreContainers: true,\n layoutContainerChildren: false\n }, options || {});\n this.clear();\n this._renormalizeShapes();\n this._renormalizeConnections();\n this.finalNodes = new Dictionary(this.nodes);\n this.finalLinks = new Dictionary(this.edges);\n this.finalGraph = new Graph();\n this.finalNodes.forEach(function (n) {\n this.finalGraph.addNode(n);\n }, this);\n this.finalLinks.forEach(function (l) {\n this.finalGraph.addExistingLink(l);\n }, this);\n return this.finalGraph;\n },\n mapConnection: function (connection) {\n return this.edgeMap.get(connection.id);\n },\n mapShape: function (shape) {\n return this.nodeMap.get(shape.id);\n },\n getEdge: function (a, b) {\n return Utils.first(a.links, function (link) {\n return link.getComplement(a) === b;\n });\n },\n clear: function () {\n this.finalGraph = null;\n this.hyperTree = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new HyperTree() : null;\n this.hyperMap = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new Dictionary() : null;\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.finalNodes = [];\n this.finalLinks = [];\n },\n listToRoot: function (containerGraph) {\n var list = [];\n var s = containerGraph.container;\n if (!s) {\n return list;\n }\n list.push(s);\n while (s.parentContainer) {\n s = s.parentContainer;\n list.push(s);\n }\n list.reverse();\n return list;\n },\n firstNonIgnorableContainer: function (shape) {\n if (shape.isContainer && !this._isIgnorableItem(shape)) {\n return shape;\n }\n return !shape.parentContainer ? null : this.firstNonIgnorableContainer(shape.parentContainer);\n },\n isContainerConnection: function (a, b) {\n if (a.isContainer && this.isDescendantOf(a, b)) {\n return true;\n }\n return b.isContainer && this.isDescendantOf(b, a);\n },\n isDescendantOf: function (scope, a) {\n if (!scope.isContainer) {\n throw 'Expecting a container.';\n }\n if (scope === a) {\n return false;\n }\n if (contains(scope.children, a)) {\n return true;\n }\n var containers = [];\n for (var i = 0, len = scope.children.length; i < len; i++) {\n var c = scope.children[i];\n if (c.isContainer && this.isDescendantOf(c, a)) {\n containers.push(c);\n }\n }\n return containers.length > 0;\n },\n isIgnorableItem: function (shape) {\n if (this.options.ignoreInvisible) {\n if (shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n if (!shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n return true;\n } else {\n return shape.isCollapsed && !this._isTop(shape);\n }\n },\n isShapeMapped: function (shape) {\n return shape.isCollapsed && !this._isVisible(shape) && !this._isTop(shape);\n },\n leastCommonAncestor: function (a, b) {\n if (!a) {\n throw 'Parameter should not be null.';\n }\n if (!b) {\n throw 'Parameter should not be null.';\n }\n if (!this.hyperTree) {\n throw 'No hypertree available.';\n }\n var al = this.listToRoot(a);\n var bl = this.listToRoot(b);\n var found = null;\n if (Utils.isEmpty(al) || Utils.isEmpty(bl)) {\n return this.hyperTree.root.data;\n }\n var xa = al[0];\n var xb = bl[0];\n var i = 0;\n while (xa === xb) {\n found = al[i];\n i++;\n if (i >= al.length || i >= bl.length) {\n break;\n }\n xa = al[i];\n xb = bl[i];\n }\n if (!found) {\n return this.hyperTree.root.data;\n } else {\n return grep(this.hyperTree.nodes, function (n) {\n return n.data.container === found;\n });\n }\n },\n _isTop: function (item) {\n return !item.parentContainer;\n },\n _isVisible: function (shape) {\n if (!shape.visible()) {\n return false;\n }\n return !shape.parentContainer ? shape.visible() : this._isVisible(shape.parentContainer);\n },\n _isCollapsed: function (shape) {\n if (shape.isContainer && shape.isCollapsed) {\n return true;\n }\n return shape.parentContainer && this._isCollapsed(shape.parentContainer);\n },\n _renormalizeShapes: function () {\n if (this.options.ignoreContainers) {\n for (var i = 0, len = this.diagram.shapes.length; i < len; i++) {\n var shape = this.diagram.shapes[i];\n if (this.options.ignoreInvisible && !this._isVisible(shape) || shape.isContainer) {\n this.ignoredShapes.push(shape);\n continue;\n }\n var node = new Node(shape.id, shape);\n node.isVirtual = false;\n this.nodeMap.add(shape.id, node);\n this.nodes.push(node);\n }\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n },\n _renormalizeConnections: function () {\n if (this.diagram.connections.length === 0) {\n return;\n }\n for (var i = 0, len = this.diagram.connections.length; i < len; i++) {\n var conn = this.diagram.connections[i];\n if (this.isIgnorableItem(conn)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var source = !conn.sourceConnector ? null : conn.sourceConnector.shape;\n var sink = !conn.targetConnector ? null : conn.targetConnector.shape;\n if (!source || !sink) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, source) && !this.shapeMap.containsKey(source)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, sink) && !this.shapeMap.containsKey(sink)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (this.shapeMap.containsKey(source)) {\n source = this.shapeMap[source];\n }\n if (this.shapeMap.containsKey(sink)) {\n sink = this.shapeMap[sink];\n }\n var sourceNode = this.mapShape(source);\n var sinkNode = this.mapShape(sink);\n if (sourceNode === sinkNode || this.areConnectedAlready(sourceNode, sinkNode)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (sourceNode === null || sinkNode === null) {\n throw 'A shape was not mapped to a node.';\n }\n if (this.options.ignoreContainers) {\n if (sourceNode.isVirtual || sinkNode.isVirtual) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var newEdge = new Link(sourceNode, sinkNode, conn.id, conn);\n this.edgeMap.add(conn.id, newEdge);\n this.edges.push(newEdge);\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n }\n },\n areConnectedAlready: function (n, m) {\n return Utils.any(this.edges, function (l) {\n return l.source === n && l.target === m || l.source === m && l.target === n;\n });\n }\n });\n var SpringLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutGraph: function (graph, options) {\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n var initialTemperature = this.options.nodeDistance * 9;\n this.temperature = initialTemperature;\n var guessBounds = this._expectedBounds();\n this.width = guessBounds.width;\n this.height = guessBounds.height;\n for (var step = 0; step < this.options.iterations; step++) {\n this.refineStage = step >= this.options.iterations * 5 / 6;\n this.tick();\n this.temperature = this.refineStage ? initialTemperature / 30 : initialTemperature * (1 - step / (2 * this.options.iterations));\n }\n },\n tick: function () {\n var i;\n for (i = 0; i < this.graph.nodes.length; i++) {\n this._repulsion(this.graph.nodes[i]);\n }\n for (i = 0; i < this.graph.links.length; i++) {\n this._attraction(this.graph.links[i]);\n }\n for (i = 0; i < this.graph.nodes.length; i++) {\n var node = this.graph.nodes[i];\n var offset = Math.sqrt(node.dx * node.dx + node.dy * node.dy);\n if (offset === 0) {\n return;\n }\n node.x += Math.min(offset, this.temperature) * node.dx / offset;\n node.y += Math.min(offset, this.temperature) * node.dy / offset;\n if (this.options.limitToView) {\n node.x = Math.min(this.width, Math.max(node.width / 2, node.x));\n node.y = Math.min(this.height, Math.max(node.height / 2, node.y));\n }\n }\n },\n _shake: function (node) {\n var rho = Math.random() * this.options.nodeDistance / 4;\n var alpha = Math.random() * 2 * Math.PI;\n node.x += rho * Math.cos(alpha);\n node.y -= rho * Math.sin(alpha);\n },\n _InverseSquareForce: function (d, n, m) {\n var force;\n if (!this.refineStage) {\n force = Math.pow(d, 2) / Math.pow(this.options.nodeDistance, 2);\n } else {\n var deltax = n.x - m.x;\n var deltay = n.y - m.y;\n var wn = n.width / 2;\n var hn = n.height / 2;\n var wm = m.width / 2;\n var hm = m.height / 2;\n force = Math.pow(deltax, 2) / Math.pow(wn + wm + this.options.nodeDistance, 2) + Math.pow(deltay, 2) / Math.pow(hn + hm + this.options.nodeDistance, 2);\n }\n return force * 4 / 3;\n },\n _SquareForce: function (d, n, m) {\n return 1 / this._InverseSquareForce(d, n, m);\n },\n _repulsion: function (n) {\n n.dx = 0;\n n.dy = 0;\n Utils.forEach(this.graph.nodes, function (m) {\n if (m === n) {\n return;\n }\n while (n.x === m.x && n.y === m.y) {\n this._shake(m);\n }\n var vx = n.x - m.x;\n var vy = n.y - m.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var r = this._SquareForce(distance, n, m) * 2;\n n.dx += vx / distance * r;\n n.dy += vy / distance * r;\n }, this);\n },\n _attraction: function (link) {\n var t = link.target;\n var s = link.source;\n if (s === t) {\n return;\n }\n while (s.x === t.x && s.y === t.y) {\n this._shake(t);\n }\n var vx = s.x - t.x;\n var vy = s.y - t.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var a = this._InverseSquareForce(distance, s, t) * 5;\n var dx = vx / distance * a;\n var dy = vy / distance * a;\n t.dx += dx;\n t.dy += dy;\n s.dx -= dx;\n s.dy -= dy;\n },\n _expectedBounds: function () {\n var size, N = this.graph.nodes.length, ratio = 1.5, multiplier = 4;\n if (N === 0) {\n return size;\n }\n size = Utils.fold(this.graph.nodes, function (s, node) {\n var area = node.width * node.height;\n if (area > 0) {\n s += Math.sqrt(area);\n return s;\n }\n return 0;\n }, 0, this);\n var av = size / N;\n var squareSize = av * Math.ceil(Math.sqrt(N));\n var width = squareSize * Math.sqrt(ratio);\n var height = squareSize / Math.sqrt(ratio);\n return {\n width: width * multiplier,\n height: height * multiplier\n };\n }\n });\n var TreeLayoutProcessor = kendo.Class.extend({\n init: function (options) {\n this.center = null;\n this.options = options;\n },\n layout: function (treeGraph, root) {\n this.graph = treeGraph;\n if (!this.graph.nodes || this.graph.nodes.length === 0) {\n return;\n }\n if (!contains(this.graph.nodes, root)) {\n throw 'The given root is not in the graph.';\n }\n this.center = root;\n this.graph.cacheRelationships();\n this.layoutSwitch();\n },\n layoutLeft: function (left) {\n this.setChildrenDirection(this.center, 'Left', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n node.TreeDirection = 'Left';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x - this.options.horizontalSeparation;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n var p = new Point(x - node.Size.width, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutRight: function (right) {\n this.setChildrenDirection(this.center, 'Right', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n node.TreeDirection = 'Right';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x + this.options.horizontalSeparation + this.center.width;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutUp: function (up) {\n this.setChildrenDirection(this.center, 'Up', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y, node, i;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n node.TreeDirection = 'Up';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n y = this.center.y - this.options.verticalSeparation - node.Size.height;\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutDown: function (down) {\n var node, i;\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.treeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutRadialTree: function () {\n this.setChildrenDirection(this.center, 'Radial', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.previousRoot = null;\n var startAngle = this.options.startRadialAngle * DEG_TO_RAD;\n var endAngle = this.options.endRadialAngle * DEG_TO_RAD;\n if (endAngle <= startAngle) {\n throw 'Final angle should not be less than the start angle.';\n }\n this.maxDepth = 0;\n this.origin = new Point(this.center.x, this.center.y);\n this.calculateAngularWidth(this.center, 0);\n if (this.maxDepth > 0) {\n this.radialLayout(this.center, this.options.radialFirstLevelSeparation, startAngle, endAngle);\n }\n this.center.Angle = endAngle - startAngle;\n },\n tipOverTree: function (down, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.setChildrenLayout(this.center, 'Underneath', false, startFromLevel);\n var w = 0, y, node, i;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.TreeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n w -= down[down.length - 1].width;\n w += down[down.length - 1].associatedShape.bounds().width;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n calculateAngularWidth: function (n, d) {\n if (d > this.maxDepth) {\n this.maxDepth = d;\n }\n var aw = 0, w = 1000, h = 1000, diameter = d === 0 ? 0 : Math.sqrt(w * w + h * h) / d;\n if (n.children.length > 0) {\n for (var i = 0, len = n.children.length; i < len; i++) {\n var child = n.children[i];\n aw += this.calculateAngularWidth(child, d + 1);\n }\n aw = Math.max(diameter, aw);\n } else {\n aw = diameter;\n }\n n.sectorAngle = aw;\n return aw;\n },\n sortChildren: function (n) {\n var basevalue = 0, i;\n if (n.parents.length > 1) {\n throw 'Node is not part of a tree.';\n }\n var p = n.parents[0];\n if (p) {\n var pl = new Point(p.x, p.y);\n var nl = new Point(n.x, n.y);\n basevalue = this.normalizeAngle(Math.atan2(pl.y - nl.y, pl.x - nl.x));\n }\n var count = n.children.length;\n if (count === 0) {\n return null;\n }\n var angle = [];\n var idx = [];\n for (i = 0; i < count; ++i) {\n var c = n.children[i];\n var l = new Point(c.x, c.y);\n idx[i] = i;\n angle[i] = this.normalizeAngle(-basevalue + Math.atan2(l.y - l.y, l.x - l.x));\n }\n Utils.bisort(angle, idx);\n var col = [];\n var children = n.children;\n for (i = 0; i < count; ++i) {\n col.push(children[idx[i]]);\n }\n return col;\n },\n normalizeAngle: function (angle) {\n while (angle > Math.PI * 2) {\n angle -= 2 * Math.PI;\n }\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n return angle;\n },\n radialLayout: function (node, radius, startAngle, endAngle) {\n var deltaTheta = endAngle - startAngle;\n var deltaThetaHalf = deltaTheta / 2;\n var parentSector = node.sectorAngle;\n var fraction = 0;\n var sorted = this.sortChildren(node);\n for (var i = 0, len = sorted.length; i < len; i++) {\n var childNode = sorted[i];\n var cp = childNode;\n var childAngleFraction = cp.sectorAngle / parentSector;\n if (childNode.children.length > 0) {\n this.radialLayout(childNode, radius + this.options.radialSeparation, startAngle + fraction * deltaTheta, startAngle + (fraction + childAngleFraction) * deltaTheta);\n }\n this.setPolarLocation(childNode, radius, startAngle + fraction * deltaTheta + childAngleFraction * deltaThetaHalf);\n cp.angle = childAngleFraction * deltaTheta;\n fraction += childAngleFraction;\n }\n },\n setPolarLocation: function (node, radius, angle) {\n node.x = this.origin.x + radius * Math.cos(angle);\n node.y = this.origin.y + radius * Math.sin(angle);\n node.BoundingRectangle = new Rect(node.x, node.y, node.width, node.height);\n },\n setChildrenDirection: function (node, direction, includeStart) {\n var rootDirection = node.treeDirection;\n this.graph.depthFirstTraversal(node, function (n) {\n n.treeDirection = direction;\n });\n if (!includeStart) {\n node.treeDirection = rootDirection;\n }\n },\n setChildrenLayout: function (node, layout, includeStart, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n var rootLayout = node.childrenLayout;\n if (startFromLevel > 0) {\n this.graph.assignLevels(node);\n this.graph.depthFirstTraversal(node, function (s) {\n if (s.level >= startFromLevel + 1) {\n s.childrenLayout = layout;\n }\n });\n } else {\n this.graph.depthFirstTraversal(node, function (s) {\n s.childrenLayout = layout;\n });\n if (!includeStart) {\n node.childrenLayout = rootLayout;\n }\n }\n },\n measure: function (node, givenSize) {\n var w = 0, h = 0, s;\n var result = new Size(0, 0);\n if (!node) {\n throw '';\n }\n var b = node.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (node.parents.length !== 1) {\n throw 'Node not in a spanning tree.';\n }\n var parent = node.parents[0];\n if (node.treeDirection === 'Undefined') {\n node.treeDirection = parent.treeDirection;\n }\n if (Utils.isEmpty(node.children)) {\n result = new Size(Math.abs(shapeWidth) < EPSILON ? 50 : shapeWidth, Math.abs(shapeHeight) < EPSILON ? 25 : shapeHeight);\n } else if (node.children.length === 1) {\n switch (node.treeDirection) {\n case 'Radial':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.radialSeparation * Math.cos(node.AngleToParent) + s.width;\n h = shapeHeight + Math.abs(this.options.radialSeparation * Math.sin(node.AngleToParent)) + s.height;\n break;\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n break;\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + s.width + this.options.underneathHorizontalOffset;\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.horizontalSeparation + s.width;\n h = Math.max(shapeHeight, s.height);\n break;\n default:\n throw 'Unhandled TreeDirection in the Radial layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = Math.max(shapeWidth, s.width + this.options.underneathHorizontalOffset);\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n h = shapeHeight + this.options.verticalSeparation + s.height;\n w = Math.max(shapeWidth, s.width);\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n } else {\n var i, childNode;\n switch (node.treeDirection) {\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = shapeWidth;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, shapeWidth + this.options.horizontalSeparation + s.width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Right layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = 0;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w += s.width + this.options.horizontalSeparation;\n h = Math.max(h, s.height + this.options.verticalSeparation + shapeHeight);\n }\n w -= this.options.horizontalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n }\n node.SectorAngle = Math.sqrt(w * w / 4 + h * h / 4);\n node.Size = result;\n return result;\n },\n arrange: function (n, p) {\n var i, pp, child, node, childrenwidth, b = n.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (Utils.isEmpty(n.children)) {\n n.x = p.x;\n n.y = p.y;\n n.BoundingRectangle = new Rect(p.x, p.y, shapeWidth, shapeHeight);\n } else {\n var x, y;\n var selfLocation;\n switch (n.treeDirection) {\n case 'Left':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n node = node.children[i];\n x = selfLocation.x - node.associatedShape.width - this.options.underneathHorizontalOffset;\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + n.Size.width - shapeWidth, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = selfLocation.x - this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x - node.Size.width, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Right':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Up':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y + n.Size.height - shapeHeight);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y - this.options.verticalSeparation - node.Size.height;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n case 'Down':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y + this.options.verticalSeparation + shapeHeight;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'None':\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n }\n },\n layoutSwitch: function () {\n if (!this.center) {\n return;\n }\n if (Utils.isEmpty(this.center.children)) {\n return;\n }\n var type = this.options.subtype;\n if (Utils.isUndefined(type)) {\n type = 'Down';\n }\n var single, male, female, leftcount;\n var children = this.center.children;\n switch (type.toLowerCase()) {\n case 'radial':\n case 'radialtree':\n this.layoutRadialTree();\n break;\n case 'mindmaphorizontal':\n case 'mindmap':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutRight(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutLeft(male);\n this.layoutRight(female);\n }\n break;\n case 'mindmapvertical':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutDown(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutUp(male);\n this.layoutDown(female);\n }\n break;\n case 'right':\n this.layoutRight(this.center.children);\n break;\n case 'left':\n this.layoutLeft(this.center.children);\n break;\n case 'up':\n case 'bottom':\n this.layoutUp(this.center.children);\n break;\n case 'down':\n case 'top':\n this.layoutDown(this.center.children);\n break;\n case 'tipover':\n case 'tipovertree':\n if (this.options.tipOverTreeStartLevel < 0) {\n throw 'The tip-over level should be a positive integer.';\n }\n this.tipOverTree(this.center.children, this.options.tipOverTreeStartLevel);\n break;\n case 'undefined':\n case 'none':\n break;\n }\n }\n });\n var TreeLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n this.graph = adapter.convert();\n var finalNodeSet = this.layoutComponents();\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutComponents: function () {\n if (this.graph.isEmpty()) {\n return;\n }\n var components = this.graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n var layout = new TreeLayoutProcessor(this.options);\n var trees = [];\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n var treeGraph = this.getTree(component);\n if (!treeGraph) {\n throw 'Failed to find a spanning tree for the component.';\n }\n var root = treeGraph.root;\n var tree = treeGraph.tree;\n layout.layout(tree, root);\n trees.push(tree);\n }\n return this.gridLayoutComponents(trees);\n },\n getTree: function (graph) {\n var root = null;\n if (this.options.roots && this.options.roots.length > 0) {\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n var node = graph.nodes[i];\n for (var j = 0; j < this.options.roots.length; j++) {\n var givenRootShape = this.options.roots[j];\n if (givenRootShape === node.associatedShape) {\n root = node;\n break;\n }\n }\n }\n }\n if (!root) {\n root = graph.root();\n if (!root) {\n throw 'Unable to find a root for the tree.';\n }\n }\n return this.getTreeForRoot(graph, root);\n },\n getTreeForRoot: function (graph, root) {\n var tree = graph.getSpanningTree(root);\n if (Utils.isUndefined(tree) || tree.isEmpty()) {\n return null;\n }\n return {\n tree: tree,\n root: tree.root\n };\n }\n });\n var LayeredLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n _initRuntimeProperties: function () {\n for (var k = 0; k < this.graph.nodes.length; k++) {\n var node = this.graph.nodes[k];\n node.layer = -1;\n node.downstreamLinkCount = 0;\n node.upstreamLinkCount = 0;\n node.isVirtual = false;\n node.uBaryCenter = 0;\n node.dBaryCenter = 0;\n node.upstreamPriority = 0;\n node.downstreamPriority = 0;\n node.gridPosition = 0;\n }\n },\n _prepare: function (graph) {\n var current = [], i, l, link;\n var layerMap = new Dictionary();\n var layerCount = 0;\n var targetLayer, next, target;\n Utils.forEach(graph.nodes, function (node) {\n if (node.incoming.length === 0) {\n layerMap.set(node, 0);\n current.push(node);\n }\n });\n while (current.length > 0) {\n next = current.shift();\n for (i = 0; i < next.outgoing.length; i++) {\n link = next.outgoing[i];\n target = link.target;\n if (layerMap.containsKey(target)) {\n targetLayer = Math.max(layerMap.get(next) + 1, layerMap.get(target));\n } else {\n targetLayer = layerMap.get(next) + 1;\n }\n layerMap.set(target, targetLayer);\n if (targetLayer > layerCount) {\n layerCount = targetLayer;\n }\n if (!contains(current, target)) {\n current.push(target);\n }\n }\n }\n var sortedNodes = layerMap.keys();\n sortedNodes.sort(function (o1, o2) {\n var o1layer = layerMap.get(o1);\n var o2layer = layerMap.get(o2);\n return Utils.sign(o2layer - o1layer);\n });\n for (var n = 0; n < sortedNodes.length; ++n) {\n var node = sortedNodes[n];\n var minLayer = Number.MAX_VALUE;\n if (node.outgoing.length === 0) {\n continue;\n }\n for (l = 0; l < node.outgoing.length; ++l) {\n link = node.outgoing[l];\n minLayer = Math.min(minLayer, layerMap.get(link.target));\n }\n if (minLayer > 1) {\n layerMap.set(node, minLayer - 1);\n }\n }\n this.layers = [];\n var layer;\n for (i = 0; i < layerCount + 1; i++) {\n layer = [];\n layer.linksTo = {};\n this.layers.push(layer);\n }\n layerMap.forEach(function (node, layer) {\n node.layer = layer;\n this.layers[layer].push(node);\n }, this);\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (i = 0; i < layer.length; i++) {\n layer[i].gridPosition = i;\n }\n }\n },\n layoutGraph: function (graph, options) {\n if (Utils.isUndefined(graph)) {\n throw 'No graph given or graph analysis of the diagram failed.';\n }\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n graph.setItemIndices();\n var reversedEdges = graph.makeAcyclic();\n this._initRuntimeProperties();\n this._prepare(graph, options);\n this._dummify();\n this._optimizeCrossings();\n this._swapPairs();\n this.arrangeNodes();\n this._moveThingsAround();\n this._dedummify();\n Utils.forEach(reversedEdges, function (e) {\n if (e.points) {\n e.points.reverse();\n }\n });\n },\n setMinDist: function (m, n, minDist) {\n var l = m.layer;\n var i = m.layerIndex;\n this.minDistances[l][i] = minDist;\n },\n getMinDist: function (m, n) {\n var dist = 0, i1 = m.layerIndex, i2 = n.layerIndex, l = m.layer, min = Math.min(i1, i2), max = Math.max(i1, i2);\n for (var k = min; k < max; ++k) {\n dist += this.minDistances[l][k];\n }\n return dist;\n },\n placeLeftToRight: function (leftClasses) {\n var leftPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = leftClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!leftPos.containsKey(node)) {\n this.placeLeft(node, leftPos, c);\n }\n }\n var d = Number.POSITIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var rightSibling = this.rightSibling(node);\n if (rightSibling && this.nodeLeftClass.get(rightSibling) !== c) {\n d = Math.min(d, leftPos.get(rightSibling) - leftPos.get(node) - this.getMinDist(node, rightSibling));\n }\n }\n if (d === Number.POSITIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeLeftClass.get(neighbor) < c) {\n D.push(leftPos.get(neighbor) - leftPos.get(node));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n leftPos.set(node, leftPos.get(node) + d);\n }\n }\n return leftPos;\n },\n placeRightToLeft: function (rightClasses) {\n var rightPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = rightClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!rightPos.containsKey(node)) {\n this.placeRight(node, rightPos, c);\n }\n }\n var d = Number.NEGATIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var leftSibling = this.leftSibling(node);\n if (leftSibling && this.nodeRightClass.get(leftSibling) !== c) {\n d = Math.max(d, rightPos.get(leftSibling) - rightPos.get(node) + this.getMinDist(leftSibling, node));\n }\n }\n if (d === Number.NEGATIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeRightClass.get(neighbor) < c) {\n D.push(rightPos.get(node) - rightPos.get(neighbor));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n rightPos.set(node, rightPos.get(node) + d);\n }\n }\n return rightPos;\n },\n _getLeftWing: function () {\n var leftWing = { value: null };\n var result = this.computeClasses(leftWing, 1);\n this.nodeLeftClass = leftWing.value;\n return result;\n },\n _getRightWing: function () {\n var rightWing = { value: null };\n var result = this.computeClasses(rightWing, -1);\n this.nodeRightClass = rightWing.value;\n return result;\n },\n computeClasses: function (wingPair, d) {\n var currentWing = 0, wing = wingPair.value = new Dictionary();\n for (var l = 0; l < this.layers.length; ++l) {\n currentWing = l;\n var layer = this.layers[l];\n for (var n = d === 1 ? 0 : layer.length - 1; 0 <= n && n < layer.length; n += d) {\n var node = layer[n];\n if (!wing.containsKey(node)) {\n wing.set(node, currentWing);\n if (node.isVirtual) {\n var ndsinl = this._nodesInLink(node);\n for (var kk = 0; kk < ndsinl.length; kk++) {\n var vnode = ndsinl[kk];\n wing.set(vnode, currentWing);\n }\n }\n } else {\n currentWing = wing.get(node);\n }\n }\n }\n var wings = [];\n for (var i = 0; i < this.layers.length; i++) {\n wings.push(null);\n }\n wing.forEach(function (node, classIndex) {\n if (wings[classIndex] === null) {\n wings[classIndex] = [];\n }\n wings[classIndex].push(node);\n });\n return wings;\n },\n _isVerticalLayout: function () {\n return this.options.subtype.toLowerCase() === 'up' || this.options.subtype.toLowerCase() === 'down' || this.options.subtype.toLowerCase() === 'vertical';\n },\n _isHorizontalLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'left' || this.options.subtype.toLowerCase() === 'horizontal';\n },\n _isIncreasingLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'down';\n },\n _moveThingsAround: function () {\n var i, l, node, layer, n, w;\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n layer.sort(this._gridPositionComparer);\n }\n this.minDistances = [];\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n this.minDistances[l] = [];\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n node.layerIndex = n;\n this.minDistances[l][n] = this.options.nodeDistance;\n if (n < layer.length - 1) {\n if (this._isVerticalLayout()) {\n this.minDistances[l][n] += (node.width + layer[n + 1].width) / 2;\n } else {\n this.minDistances[l][n] += (node.height + layer[n + 1].height) / 2;\n }\n }\n }\n }\n this.downNodes = new Dictionary();\n this.upNodes = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n this.downNodes.set(node, []);\n this.upNodes.set(node, []);\n }, this);\n Utils.forEach(this.graph.links, function (link) {\n var origin = link.source;\n var dest = link.target;\n var down = null, up = null;\n if (origin.layer > dest.layer) {\n down = link.source;\n up = link.target;\n } else {\n up = link.source;\n down = link.target;\n }\n this.downNodes.get(up).push(down);\n this.upNodes.get(down).push(up);\n }, this);\n this.downNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n this.upNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n for (l = 0; l < this.layers.length - 1; ++l) {\n layer = this.layers[l];\n for (w = 0; w < layer.length - 1; w++) {\n var currentNode = layer[w];\n if (!currentNode.isVirtual) {\n continue;\n }\n var currDown = this.downNodes.get(currentNode)[0];\n if (!currDown.isVirtual) {\n continue;\n }\n for (n = w + 1; n < layer.length; ++n) {\n node = layer[n];\n if (!node.isVirtual) {\n continue;\n }\n var downNode = this.downNodes.get(node)[0];\n if (!downNode.isVirtual) {\n continue;\n }\n if (currDown.gridPosition > downNode.gridPosition) {\n var pos = currDown.gridPosition;\n currDown.gridPosition = downNode.gridPosition;\n downNode.gridPosition = pos;\n var i1 = currDown.layerIndex;\n var i2 = downNode.layerIndex;\n this.layers[l + 1][i1] = downNode;\n this.layers[l + 1][i2] = currDown;\n currDown.layerIndex = i2;\n downNode.layerIndex = i1;\n }\n }\n }\n }\n var leftClasses = this._getLeftWing();\n var rightClasses = this._getRightWing();\n var leftPos = this.placeLeftToRight(leftClasses);\n var rightPos = this.placeRightToLeft(rightClasses);\n var x = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n x.set(node, (leftPos.get(node) + rightPos.get(node)) / 2);\n });\n var order = new Dictionary();\n var placed = new Dictionary();\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n var sequenceStart = -1, sequenceEnd = -1;\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n order.set(node, 0);\n placed.set(node, false);\n if (node.isVirtual) {\n if (sequenceStart === -1) {\n sequenceStart = n;\n } else if (sequenceStart === n - 1) {\n sequenceStart = n;\n } else {\n sequenceEnd = n;\n order.set(layer[sequenceStart], 0);\n if (x.get(node) - x.get(layer[sequenceStart]) === this.getMinDist(layer[sequenceStart], node)) {\n placed.set(layer[sequenceStart], true);\n } else {\n placed.set(layer[sequenceStart], false);\n }\n sequenceStart = n;\n }\n }\n }\n }\n var directions = [\n 1,\n -1\n ];\n Utils.forEach(directions, function (d) {\n var start = d === 1 ? 0 : this.layers.length - 1;\n for (var l = start; 0 <= l && l < this.layers.length; l += d) {\n var layer = this.layers[l];\n var virtualStartIndex = this._firstVirtualNode(layer);\n var virtualStart = null;\n var sequence = null;\n if (virtualStartIndex !== -1) {\n virtualStart = layer[virtualStartIndex];\n sequence = [];\n for (i = 0; i < virtualStartIndex; i++) {\n sequence.push(layer[i]);\n }\n } else {\n virtualStart = null;\n sequence = layer;\n }\n if (sequence.length > 0) {\n this._sequencer(x, null, virtualStart, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n if (virtualStart) {\n this.setMinDist(sequence[sequence.length - 1], virtualStart, x.get(virtualStart) - x.get(sequence[sequence.length - 1]));\n }\n }\n while (virtualStart) {\n var virtualEnd = this.nextVirtualNode(layer, virtualStart);\n if (!virtualEnd) {\n virtualStartIndex = virtualStart.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < layer.length; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, null, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n this.setMinDist(virtualStart, sequence[0], x.get(sequence[0]) - x.get(virtualStart));\n }\n } else if (order.get(virtualStart) === d) {\n virtualStartIndex = virtualStart.layerIndex;\n var virtualEndIndex = virtualEnd.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < virtualEndIndex; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, virtualEnd, d, sequence);\n }\n placed.set(virtualStart, true);\n }\n virtualStart = virtualEnd;\n }\n this.adjustDirections(l, d, order, placed);\n }\n }, this);\n var fromLayerIndex = this._isIncreasingLayout() ? 0 : this.layers.length - 1;\n var reachedFinalLayerIndex = function (k, ctx) {\n if (ctx._isIncreasingLayout()) {\n return k < ctx.layers.length;\n } else {\n return k >= 0;\n }\n };\n var layerIncrement = this._isIncreasingLayout() ? +1 : -1, offset = 0;\n function maximumHeight(layer, ctx) {\n var height = Number.MIN_VALUE;\n for (var n = 0; n < layer.length; ++n) {\n var node = layer[n];\n if (ctx._isVerticalLayout()) {\n height = Math.max(height, node.height);\n } else {\n height = Math.max(height, node.width);\n }\n }\n return height;\n }\n for (i = fromLayerIndex; reachedFinalLayerIndex(i, this); i += layerIncrement) {\n layer = this.layers[i];\n var height = maximumHeight(layer, this);\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n if (this._isVerticalLayout()) {\n node.x = x.get(node);\n node.y = offset + height / 2;\n } else {\n node.x = offset + height / 2;\n node.y = x.get(node);\n }\n }\n offset += this.options.layerSeparation + height;\n }\n },\n adjustDirections: function (l, d, order, placed) {\n if (l + d < 0 || l + d >= this.layers.length) {\n return;\n }\n var prevBridge = null, prevBridgeTarget = null;\n var layer = this.layers[l + d];\n for (var n = 0; n < layer.length; ++n) {\n var nextBridge = layer[n];\n if (nextBridge.isVirtual) {\n var nextBridgeTarget = this.getNeighborOnLayer(nextBridge, l);\n if (nextBridgeTarget.isVirtual) {\n if (prevBridge) {\n var p = placed.get(prevBridgeTarget);\n var clayer = this.layers[l];\n var i1 = prevBridgeTarget.layerIndex;\n var i2 = nextBridgeTarget.layerIndex;\n for (var i = i1 + 1; i < i2; ++i) {\n if (clayer[i].isVirtual) {\n p = p && placed.get(clayer[i]);\n }\n }\n if (p) {\n order.set(prevBridge, d);\n var j1 = prevBridge.layerIndex;\n var j2 = nextBridge.layerIndex;\n for (var j = j1 + 1; j < j2; ++j) {\n if (layer[j].isVirtual) {\n order.set(layer[j], d);\n }\n }\n }\n }\n prevBridge = nextBridge;\n prevBridgeTarget = nextBridgeTarget;\n }\n }\n }\n },\n getNeighborOnLayer: function (node, l) {\n var neighbor = this.upNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n neighbor = this.downNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n return null;\n },\n _sequencer: function (x, virtualStart, virtualEnd, dir, sequence) {\n if (sequence.length === 1) {\n this._sequenceSingle(x, virtualStart, virtualEnd, dir, sequence[0]);\n }\n if (sequence.length > 1) {\n var r = sequence.length, t = this.intDiv(r, 2);\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(0, t));\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(t));\n this.combineSequences(x, virtualStart, virtualEnd, dir, sequence);\n }\n },\n _sequenceSingle: function (x, virtualStart, virtualEnd, dir, node) {\n var neighbors = dir === -1 ? this.downNodes.get(node) : this.upNodes.get(node);\n var n = neighbors.length;\n if (n !== 0) {\n if (n % 2 === 1) {\n x.set(node, x.get(neighbors[this.intDiv(n, 2)]));\n } else {\n x.set(node, (x.get(neighbors[this.intDiv(n, 2) - 1]) + x.get(neighbors[this.intDiv(n, 2)])) / 2);\n }\n if (virtualStart) {\n x.set(node, Math.max(x.get(node), x.get(virtualStart) + this.getMinDist(virtualStart, node)));\n }\n if (virtualEnd) {\n x.set(node, Math.min(x.get(node), x.get(virtualEnd) - this.getMinDist(node, virtualEnd)));\n }\n }\n },\n combineSequences: function (x, virtualStart, virtualEnd, dir, sequence) {\n var r = sequence.length, t = this.intDiv(r, 2);\n var leftHeap = [], i, c, n, neighbors, neighbor, pair;\n for (i = 0; i < t; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) >= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n leftHeap.push({\n k: x.get(neighbor) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: 2\n });\n }\n }\n leftHeap.push({\n k: x.get(sequence[i]) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: c\n });\n }\n if (virtualStart) {\n leftHeap.push({\n k: x.get(virtualStart) + this.getMinDist(virtualStart, sequence[t - 1]),\n v: Number.MAX_VALUE\n });\n }\n leftHeap.sort(this._positionDescendingComparer);\n var rightHeap = [];\n for (i = t; i < r; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) <= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n rightHeap.push({\n k: x.get(neighbor) - this.getMinDist(sequence[i], sequence[t]),\n v: 2\n });\n }\n }\n rightHeap.push({\n k: x.get(sequence[i]) - this.getMinDist(sequence[i], sequence[t]),\n v: c\n });\n }\n if (virtualEnd) {\n rightHeap.push({\n k: x.get(virtualEnd) - this.getMinDist(virtualEnd, sequence[t]),\n v: Number.MAX_VALUE\n });\n }\n rightHeap.sort(this._positionAscendingComparer);\n var leftRes = 0, rightRes = 0;\n var m = this.getMinDist(sequence[t - 1], sequence[t]);\n while (x.get(sequence[t]) - x.get(sequence[t - 1]) < m) {\n if (leftRes < rightRes) {\n if (leftHeap.length === 0) {\n x.set(sequence[t - 1], x.get(sequence[t]) - m);\n break;\n } else {\n pair = leftHeap.shift();\n leftRes = leftRes + pair.v;\n x.set(sequence[t - 1], pair.k);\n x.set(sequence[t - 1], Math.max(x.get(sequence[t - 1]), x.get(sequence[t]) - m));\n }\n } else {\n if (rightHeap.length === 0) {\n x.set(sequence[t], x.get(sequence[t - 1]) + m);\n break;\n } else {\n pair = rightHeap.shift();\n rightRes = rightRes + pair.v;\n x.set(sequence[t], pair.k);\n x.set(sequence[t], Math.min(x.get(sequence[t]), x.get(sequence[t - 1]) + m));\n }\n }\n }\n for (i = t - 2; i >= 0; i--) {\n x.set(sequence[i], Math.min(x.get(sequence[i]), x.get(sequence[t - 1]) - this.getMinDist(sequence[i], sequence[t - 1])));\n }\n for (i = t + 1; i < r; i++) {\n x.set(sequence[i], Math.max(x.get(sequence[i]), x.get(sequence[t]) + this.getMinDist(sequence[i], sequence[t])));\n }\n },\n placeLeft: function (node, leftPos, leftClass) {\n var pos = Number.NEGATIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var leftSibling = this.leftSibling(v);\n if (leftSibling && this.nodeLeftClass.get(leftSibling) === this.nodeLeftClass.get(v)) {\n if (!leftPos.containsKey(leftSibling)) {\n this.placeLeft(leftSibling, leftPos, leftClass);\n }\n pos = Math.max(pos, leftPos.get(leftSibling) + this.getMinDist(leftSibling, v));\n }\n }, this);\n if (pos === Number.NEGATIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n leftPos.set(v, pos);\n });\n },\n placeRight: function (node, rightPos, rightClass) {\n var pos = Number.POSITIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var rightSibling = this.rightSibling(v);\n if (rightSibling && this.nodeRightClass.get(rightSibling) === this.nodeRightClass.get(v)) {\n if (!rightPos.containsKey(rightSibling)) {\n this.placeRight(rightSibling, rightPos, rightClass);\n }\n pos = Math.min(pos, rightPos.get(rightSibling) - this.getMinDist(v, rightSibling));\n }\n }, this);\n if (pos === Number.POSITIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n rightPos.set(v, pos);\n });\n },\n leftSibling: function (node) {\n var layer = this.layers[node.layer], layerIndex = node.layerIndex;\n return layerIndex === 0 ? null : layer[layerIndex - 1];\n },\n rightSibling: function (node) {\n var layer = this.layers[node.layer];\n var layerIndex = node.layerIndex;\n return layerIndex === layer.length - 1 ? null : layer[layerIndex + 1];\n },\n _getComposite: function (node) {\n return node.isVirtual ? this._nodesInLink(node) : [node];\n },\n arrangeNodes: function () {\n var i, l, ni, layer, node;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.upstreamPriority = node.upstreamLinkCount;\n node.downstreamPriority = node.downstreamLinkCount;\n }\n }\n var maxLayoutIterations = 2;\n for (var it = 0; it < maxLayoutIterations; it++) {\n for (i = this.layers.length - 1; i >= 1; i--) {\n this.layoutLayer(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n this.layoutLayer(true, i);\n }\n }\n var gridPos = Number.MAX_VALUE;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n gridPos = Math.min(gridPos, node.gridPosition);\n }\n }\n if (gridPos < 0) {\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.gridPosition = node.gridPosition - gridPos;\n }\n }\n }\n },\n layoutLayer: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var sorted = [];\n for (var n = 0; n < considered.length; n++) {\n sorted.push(considered[n]);\n }\n sorted.sort(function (n1, n2) {\n var n1Priority = (n1.upstreamPriority + n1.downstreamPriority) / 2;\n var n2Priority = (n2.upstreamPriority + n2.downstreamPriority) / 2;\n if (Math.abs(n1Priority - n2Priority) < 0.0001) {\n return 0;\n }\n if (n1Priority < n2Priority) {\n return 1;\n }\n return -1;\n });\n Utils.forEach(sorted, function (node) {\n var nodeGridPos = node.gridPosition;\n var nodeBaryCenter = this.calcBaryCenter(node);\n var nodePriority = (node.upstreamPriority + node.downstreamPriority) / 2;\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.0001) {\n return;\n }\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.25 + 0.0001) {\n return;\n }\n if (nodeGridPos < nodeBaryCenter) {\n while (nodeGridPos < nodeBaryCenter) {\n if (!this.moveRight(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n } else {\n while (nodeGridPos > nodeBaryCenter) {\n if (!this.moveLeft(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n }\n }, this);\n if (iconsidered > 0) {\n this.calcDownData(iconsidered - 1);\n }\n if (iconsidered < this.layers.length - 1) {\n this.calcUpData(iconsidered + 1);\n }\n },\n moveRight: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === layer.length - 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n var rightNode = layer[index + 1];\n var rightNodePriority = (rightNode.upstreamPriority + rightNode.downstreamPriority) / 2;\n if (rightNode.gridPosition > node.gridPosition + 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n if (rightNodePriority > priority || Math.abs(rightNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveRight(rightNode, layer, priority)) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n return false;\n },\n moveLeft: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === 0) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n var leftNode = layer[index - 1];\n var leftNodePriority = (leftNode.upstreamPriority + leftNode.downstreamPriority) / 2;\n if (leftNode.gridPosition < node.gridPosition - 1) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n if (leftNodePriority > priority || Math.abs(leftNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveLeft(leftNode, layer, priority)) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n return false;\n },\n mapVirtualNode: function (node, link) {\n this.nodeToLinkMap.set(node, link);\n if (!this.linkToNodeMap.containsKey(link)) {\n this.linkToNodeMap.set(link, []);\n }\n this.linkToNodeMap.get(link).push(node);\n },\n _nodesInLink: function (node) {\n return this.linkToNodeMap.get(this.nodeToLinkMap.get(node));\n },\n _dummify: function () {\n this.linkToNodeMap = new Dictionary();\n this.nodeToLinkMap = new Dictionary();\n var layer, pos, newNode, node, r, newLink, i, l, links = this.graph.links.slice(0);\n var layers = this.layers;\n var addLinkBetweenLayers = function (upLayer, downLayer, link) {\n layers[upLayer].linksTo[downLayer] = layers[upLayer].linksTo[downLayer] || [];\n layers[upLayer].linksTo[downLayer].push(link);\n };\n for (l = 0; l < links.length; l++) {\n var link = links[l];\n var o = link.source;\n var d = link.target;\n var oLayer = o.layer;\n var dLayer = d.layer;\n var oPos = o.gridPosition;\n var dPos = d.gridPosition;\n var step = (dPos - oPos) / Math.abs(dLayer - oLayer);\n var p = o;\n if (oLayer - dLayer > 1) {\n for (i = oLayer - 1; i > dLayer; i--) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - dLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, newLink);\n link.changeSource(p);\n link.depthOfDumminess = oLayer - dLayer - 1;\n } else if (oLayer - dLayer < -1) {\n for (i = oLayer + 1; i < dLayer; i++) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - oLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n pos &= pos;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, link);\n link.changeSource(p);\n link.depthOfDumminess = dLayer - oLayer - 1;\n } else {\n addLinkBetweenLayers(oLayer, dLayer, link);\n }\n }\n },\n _dedummify: function () {\n var dedum = true;\n while (dedum) {\n dedum = false;\n for (var l = 0; l < this.graph.links.length; l++) {\n var link = this.graph.links[l];\n if (!link.depthOfDumminess) {\n continue;\n }\n var points = [];\n points.unshift({\n x: link.target.x,\n y: link.target.y\n });\n points.unshift({\n x: link.source.x,\n y: link.source.y\n });\n var temp = link;\n var depthOfDumminess = link.depthOfDumminess;\n for (var d = 0; d < depthOfDumminess; d++) {\n var node = temp.source;\n var prevLink = node.incoming[0];\n points.unshift({\n x: prevLink.source.x,\n y: prevLink.source.y\n });\n temp = prevLink;\n }\n link.changeSource(temp.source);\n link.depthOfDumminess = 0;\n if (points.length > 2) {\n points.splice(0, 1);\n points.splice(points.length - 1);\n link.points = points;\n } else {\n link.points = [];\n }\n dedum = true;\n break;\n }\n }\n },\n _optimizeCrossings: function () {\n var moves = -1, i;\n var maxIterations = 3;\n var iter = 0;\n while (moves !== 0) {\n if (iter++ > maxIterations) {\n break;\n }\n moves = 0;\n for (i = this.layers.length - 1; i >= 1; i--) {\n moves += this.optimizeLayerCrossings(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n moves += this.optimizeLayerCrossings(true, i);\n }\n }\n },\n calcUpData: function (layer) {\n if (layer === 0) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var upLayer = new Set();\n var temp = this.layers[layer - 1];\n for (i = 0; i < temp.length; i++) {\n upLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (upLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (upLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.uBaryCenter = sum / total;\n node.upstreamLinkCount = total;\n } else {\n node.uBaryCenter = i;\n node.upstreamLinkCount = 0;\n }\n }\n },\n calcDownData: function (layer) {\n if (layer === this.layers.length - 1) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var downLayer = new Set();\n var temp = this.layers[layer + 1];\n for (i = 0; i < temp.length; i++) {\n downLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (downLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (downLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.dBaryCenter = sum / total;\n node.downstreamLinkCount = total;\n } else {\n node.dBaryCenter = i;\n node.downstreamLinkCount = 0;\n }\n }\n },\n optimizeLayerCrossings: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var presorted = considered.slice(0);\n if (down) {\n this.calcUpData(iconsidered);\n } else {\n this.calcDownData(iconsidered);\n }\n var that = this;\n considered.sort(function (n1, n2) {\n var n1BaryCenter = that.calcBaryCenter(n1), n2BaryCenter = that.calcBaryCenter(n2);\n if (Math.abs(n1BaryCenter - n2BaryCenter) < 0.0001) {\n if (n1.degree() === n2.degree()) {\n return that.compareByIndex(n1, n2);\n } else if (n1.degree() < n2.degree()) {\n return 1;\n }\n return -1;\n }\n var compareValue = (n2BaryCenter - n1BaryCenter) * 1000;\n if (compareValue > 0) {\n return -1;\n } else if (compareValue < 0) {\n return 1;\n }\n return that.compareByIndex(n1, n2);\n });\n var i, moves = 0;\n for (i = 0; i < considered.length; i++) {\n if (considered[i] !== presorted[i]) {\n moves++;\n }\n }\n if (moves > 0) {\n var inode = 0;\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n node.gridPosition = inode++;\n }\n }\n return moves;\n },\n _swapPairs: function () {\n var maxIterations = this.options.layeredIterations;\n var iter = 0;\n while (true) {\n if (iter++ > maxIterations) {\n break;\n }\n var downwards = iter % 4 <= 1;\n var secondPass = iter % 4 === 1;\n for (var l = downwards ? 0 : this.layers.length - 1; downwards ? l <= this.layers.length - 1 : l >= 0; l += downwards ? 1 : -1) {\n var layer = this.layers[l];\n var hasSwapped = false;\n var calcCrossings = true;\n var memCrossings = 0;\n for (var n = 0; n < layer.length - 1; n++) {\n var up = 0;\n var down = 0;\n var crossBefore = 0;\n if (calcCrossings) {\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n crossBefore = up + down;\n } else {\n crossBefore = memCrossings;\n }\n if (crossBefore === 0) {\n continue;\n }\n var node1 = layer[n];\n var node2 = layer[n + 1];\n var node1GridPos = node1.gridPosition;\n var node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n up = 0;\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n down = 0;\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n var crossAfter = up + down;\n var revert = false;\n if (secondPass) {\n revert = crossAfter >= crossBefore;\n } else {\n revert = crossAfter > crossBefore;\n }\n if (revert) {\n node1 = layer[n];\n node2 = layer[n + 1];\n node1GridPos = node1.gridPosition;\n node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n memCrossings = crossBefore;\n calcCrossings = false;\n } else {\n hasSwapped = true;\n calcCrossings = true;\n }\n }\n if (hasSwapped) {\n if (l !== this.layers.length - 1) {\n this.calcUpData(l + 1);\n }\n if (l !== 0) {\n this.calcDownData(l - 1);\n }\n }\n }\n }\n },\n countLinksCrossingBetweenTwoLayers: function (ulayer, dlayer) {\n var links = this.layers[ulayer].linksTo[dlayer];\n var link1, link2, n11, n12, n21, n22, l1, l2;\n var crossings = 0;\n var length = links.length;\n for (l1 = 0; l1 < length; l1++) {\n link1 = links[l1];\n for (l2 = l1 + 1; l2 < length; l2++) {\n link2 = links[l2];\n if (link1.target.layer === dlayer) {\n n11 = link1.source;\n n12 = link1.target;\n } else {\n n11 = link1.target;\n n12 = link1.source;\n }\n if (link2.target.layer === dlayer) {\n n21 = link2.source;\n n22 = link2.target;\n } else {\n n21 = link2.target;\n n22 = link2.source;\n }\n var n11gp = n11.gridPosition;\n var n12gp = n12.gridPosition;\n var n21gp = n21.gridPosition;\n var n22gp = n22.gridPosition;\n if ((n11gp - n21gp) * (n12gp - n22gp) < 0) {\n crossings++;\n }\n }\n }\n return crossings;\n },\n calcBaryCenter: function (node) {\n var upstreamLinkCount = node.upstreamLinkCount;\n var downstreamLinkCount = node.downstreamLinkCount;\n var uBaryCenter = node.uBaryCenter;\n var dBaryCenter = node.dBaryCenter;\n if (upstreamLinkCount > 0 && downstreamLinkCount > 0) {\n return (uBaryCenter + dBaryCenter) / 2;\n }\n if (upstreamLinkCount > 0) {\n return uBaryCenter;\n }\n if (downstreamLinkCount > 0) {\n return dBaryCenter;\n }\n return 0;\n },\n _gridPositionComparer: function (x, y) {\n if (x.gridPosition < y.gridPosition) {\n return -1;\n }\n if (x.gridPosition > y.gridPosition) {\n return 1;\n }\n return 0;\n },\n _positionAscendingComparer: function (x, y) {\n return x.k < y.k ? -1 : x.k > y.k ? 1 : 0;\n },\n _positionDescendingComparer: function (x, y) {\n return x.k < y.k ? 1 : x.k > y.k ? -1 : 0;\n },\n _firstVirtualNode: function (layer) {\n for (var c = 0; c < layer.length; c++) {\n if (layer[c].isVirtual) {\n return c;\n }\n }\n return -1;\n },\n compareByIndex: function (o1, o2) {\n var i1 = o1.index;\n var i2 = o2.index;\n if (i1 < i2) {\n return 1;\n }\n if (i1 > i2) {\n return -1;\n }\n return 0;\n },\n intDiv: function (numerator, denominator) {\n return (numerator - numerator % denominator) / denominator;\n },\n nextVirtualNode: function (layer, node) {\n var nodeIndex = node.layerIndex;\n for (var i = nodeIndex + 1; i < layer.length; ++i) {\n if (layer[i].isVirtual) {\n return layer[i];\n }\n }\n return null;\n }\n });\n var LayoutState = kendo.Class.extend({\n init: function (diagram, graphOrNodes) {\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram given';\n }\n this.diagram = diagram;\n this.nodeMap = new Dictionary();\n this.linkMap = new Dictionary();\n this.capture(graphOrNodes ? graphOrNodes : diagram);\n },\n capture: function (diagramOrGraphOrNodes) {\n var node, nodes, shape, i, conn, link, links;\n if (diagramOrGraphOrNodes instanceof diagram.Graph) {\n for (i = 0; i < diagramOrGraphOrNodes.nodes.length; i++) {\n node = diagramOrGraphOrNodes.nodes[i];\n shape = node.associatedShape;\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n for (i = 0; i < diagramOrGraphOrNodes.links.length; i++) {\n link = diagramOrGraphOrNodes.links[i];\n conn = link.associatedConnection;\n this.linkMap.set(conn.visual.id, link.points());\n }\n } else if (diagramOrGraphOrNodes instanceof Array) {\n nodes = diagramOrGraphOrNodes;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n } else if (diagramOrGraphOrNodes.hasOwnProperty('links') && diagramOrGraphOrNodes.hasOwnProperty('nodes')) {\n nodes = diagramOrGraphOrNodes.nodes;\n links = diagramOrGraphOrNodes.links;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n for (i = 0; i < links.length; i++) {\n link = links[i];\n conn = link.associatedConnection;\n if (conn) {\n this.linkMap.set(conn.visual.id, link.points);\n }\n }\n } else {\n var shapes = this.diagram.shapes;\n var connections = this.diagram.connections;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n this.nodeMap.set(shape.visual.id, shape.bounds());\n }\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n this.linkMap.set(conn.visual.id, conn.points());\n }\n }\n }\n });\n deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n SpringLayout: SpringLayout,\n TreeLayout: TreeLayout,\n GraphAdapter: DiagramToHyperTreeAdapter,\n LayeredLayout: LayeredLayout,\n LayoutBase: LayoutBase,\n LayoutState: LayoutState\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', OPTION_LIST_SUFFIX = '_optionlist', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '
    ',\n overflowContainer: '
      '\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).show();\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN).hide();\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow && this.options.splitContainerId) {\n return $('#' + this.options.splitContainerId).find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html('' + options.text + '');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n if (options.togglable) {\n this.toggle(options.selected);\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('
    • ').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
    • ');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('');\n this.popupElement = $('
        ');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown', '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('
      • ').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + OPTION_LIST_SUFFIX).attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n return;\n }\n that.adjustPopupWidth(e.sender);\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK, 'a.k-button', preventClick);\n },\n adjustPopupWidth: function (popup) {\n var anchor = popup.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(popup.element).addClass('k-split-wrapper');\n if (popup.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(popup.element) - popup.element.width());\n } else {\n width = computedWidth;\n }\n popup.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n },\n remove: function () {\n this.popup.element.off(CLICK, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n if (this.options.enable || this.popup.visible()) {\n this.popup.toggle();\n }\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).hide();\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      • '), items = options.menuButtons, item, splitContainerId;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n this.mainButton = new OverflowButton($.extend({}, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n type: 'button',\n splitContainerId: splitContainerId\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
         
        ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      •  
      • ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var TemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n if (!(element instanceof jQuery)) {\n element = $('
        ').html(element);\n } else {\n element = element.wrap('
        ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n }\n });\n kendo.toolbar.TemplateItem = TemplateItem;\n var OverflowTemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n if (!(element instanceof jQuery)) {\n element = $('
      • ').html(element);\n } else {\n element = element.wrap('
      • ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n function toggleActive(e) {\n if (!e.target.is('.k-toggle-button')) {\n e.target.toggleClass(STATE_ACTIVE, e.type == 'press');\n }\n }\n function actionSheetWrap(element) {\n element = $(element);\n return element.hasClass('km-actionsheet') ? element.closest('.km-popup-wrapper') : element.addClass('km-widget km-actionsheet').wrap('
        ').parent().wrap('
        ').parent();\n }\n function preventClick(e) {\n if ($(e.target).closest('a.k-button').length) {\n e.preventDefault();\n }\n }\n function findFocusableSibling(element, dir) {\n var getSibling = dir === 'next' ? $.fn.next : $.fn.prev;\n var getter = dir === 'next' ? $.fn.first : $.fn.last;\n var candidate = getSibling.call(element);\n if (candidate.is(':kendoFocusable') || !candidate.length) {\n return candidate;\n }\n if (candidate.find(':kendoFocusable').length) {\n return getter.call(candidate.find(':kendoFocusable'));\n }\n return findFocusableSibling(candidate, dir);\n }\n var Group = Class.extend({\n init: function (name) {\n this.name = name;\n this.buttons = [];\n },\n add: function (button) {\n this.buttons[this.buttons.length] = button;\n },\n remove: function (button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n select: function (button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i++) {\n tmp = this.buttons[i];\n tmp.select(false);\n }\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\n }\n });\n var ToolBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.wrapper = that.element;\n element.addClass(TOOLBAR + ' k-widget');\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n that.isMobile = typeof options.mobile === 'boolean' ? options.mobile : that.element.closest('.km-root')[0];\n that.animation = that.isMobile ? { open: { effects: 'fade' } } : {};\n if (that.isMobile) {\n element.addClass('km-widget');\n ICON = 'km-icon';\n ICON_PREFIX = 'km-';\n BUTTON = 'km-button';\n BUTTON_GROUP = 'km-buttongroup km-widget';\n STATE_ACTIVE = 'km-state-active';\n STATE_DISABLED = 'km-state-disabled';\n }\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: '.' + OVERFLOW_ANCHOR,\n tap: proxy(that._toggleOverflow, that)\n });\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\n if (options.items && options.items.length) {\n for (var i = 0; i < options.items.length; i++) {\n that.add(options.items[i]);\n }\n that._shrink(that.element.innerWidth());\n }\n that.userEvents = new kendo.UserEvents(document, {\n threshold: 5,\n allowSelection: true,\n filter: '[' + KENDO_UID_ATTR + '=' + this.uid + '] a.' + BUTTON + ', ' + '[' + KENDO_UID_ATTR + '=' + this.uid + '] .' + OVERFLOW_BUTTON,\n tap: proxy(that._buttonClick, that),\n press: toggleActive,\n release: toggleActive\n });\n that.element.on(CLICK, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(CLICK, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(CLICK, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n tool.element.appendTo(that.element);\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.hide();\n item.toolbar.getParentGroup().refresh();\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.overflow.hide();\n item.overflow.getParentGroup().refresh();\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.show();\n item.toolbar.getParentGroup().refresh();\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.toolbar.show();\n item.overflow.getParentGroup().refresh();\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown', '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find('.' + OVERFLOW_CONTAINER).children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n } else {\n hasVisibleChildren = this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n }\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: 'visible',\n width: ''\n });\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n }\n },\n _buttonClick: function (e) {\n var that = this, popup, target, item, splitContainer, isSplitButtonArrow = e.target.closest('.' + SPLIT_BUTTON_ARROW).length, handler, eventData, urlTarget;\n e.preventDefault();\n if (isSplitButtonArrow) {\n that._toggle(e);\n return;\n }\n target = $(e.target).closest('.' + BUTTON, that.element);\n if (target.hasClass(OVERFLOW_ANCHOR)) {\n return;\n }\n item = target.data('button');\n if (!item && that.popup) {\n target = $(e.target).closest('.' + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent('li').data('button');\n }\n if (!item || !item.options.enable) {\n return;\n }\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n item.toggle(!item.options.selected, true);\n eventData = {\n target: target,\n group: item.options.group,\n checked: item.options.selected,\n id: item.options.id\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = {\n sender: that,\n target: target,\n id: item.options.id\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(CLICK, eventData);\n }\n if (item.options.url) {\n if (item.options.attributes && item.options.attributes.target) {\n urlTarget = item.options.attributes.target;\n }\n window.open(item.options.url, urlTarget || '_self');\n }\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n splitContainer = target.closest('.k-split-container');\n if (splitContainer[0]) {\n popup = splitContainer.data('kendoPopup');\n (popup ? popup : splitContainer.parents('.km-popup-wrapper').data('kendoPopup')).close();\n }\n },\n _navigatable: function () {\n var that = this;\n that.element.attr('tabindex', 0).on('focusin', function (ev) {\n var target = $(ev.target);\n var element = $(this).find(':kendoFocusable:first');\n if (!target.is('.' + TOOLBAR) || element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n element[0].focus();\n }).on('keydown', proxy(that._keydown, that));\n },\n _keydown: function (e) {\n var target = $(e.target), keyCode = e.keyCode, items = this.element.children(':not(.k-separator):visible'), direction = this._isRtl ? -1 : 1;\n if (keyCode === keys.TAB) {\n var element = target.parentsUntil(this.element).last(), lastHasFocus = false, firstHasFocus = false;\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (items.last().is(':kendoFocusable')) {\n items.last().focus();\n } else {\n items.last().find(':kendoFocusable').last().focus();\n }\n }\n if (!e.shiftKey && items.index(element) === items.length - 1) {\n if (element.is('.' + BUTTON_GROUP)) {\n lastHasFocus = target.is(':last-child');\n } else {\n lastHasFocus = true;\n }\n }\n var isFirstTool = items.index(element) === items.not('.k-overflow-anchor').first().index();\n if (e.shiftKey && isFirstTool) {\n if (element.is('.' + BUTTON_GROUP)) {\n firstHasFocus = target.is(':first-child');\n } else {\n firstHasFocus = true;\n }\n }\n if (lastHasFocus && this.overflowAnchor && this.overflowAnchor.css('visibility') !== 'hidden') {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.focus();\n }\n }\n this._preventNextFocus = false;\n }\n if (e.altKey && keyCode === keys.DOWN) {\n var splitButton = $(document.activeElement).data('splitButton');\n var isOverflowAnchor = $(document.activeElement).is('.' + OVERFLOW_ANCHOR);\n if (splitButton) {\n splitButton.toggle();\n } else if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n return;\n }\n if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is('input, checkbox')) {\n e.preventDefault();\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n }\n this.userEvents.trigger('tap', { target: target });\n return;\n }\n if (keyCode === keys.HOME) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor) {\n items.eq(1).focus();\n } else {\n items.first().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.END) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor && $(this.overflowAnchor).css('visibility') != 'hidden') {\n this.overflowAnchor.focus();\n } else {\n items.last().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.RIGHT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, 1 * direction)) {\n this._getNextElement(e.target, 1 * direction).focus();\n e.preventDefault();\n } else if (keyCode === keys.LEFT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, -1 * direction)) {\n this._getNextElement(e.target, -1 * direction).focus();\n e.preventDefault();\n }\n },\n _getNextElement: function (item, direction) {\n var items = this.element.children(':not(.k-separator):visible');\n var itemIndex = items.index(item) === -1 ? items.index(item.parentElement) : items.index(item);\n var startIndex = this.overflowAnchor ? 1 : 0;\n var directionNumber = direction;\n var searchIndex = direction === 1 ? items.length - 1 : startIndex;\n var index = direction === 1 ? startIndex : items.length - 1;\n var focusableItem = items[itemIndex + direction];\n this._preventNextFocus = false;\n if ($(item).closest('.' + BUTTON_GROUP).length && !$(item).is(direction === 1 ? ':last-child' : ':first-child')) {\n return $(item).closest('.' + BUTTON_GROUP).children()[$(item).closest('.' + BUTTON_GROUP).children().index(item) + direction];\n }\n if (this.overflowAnchor && item === this.overflowAnchor[0] && direction === -1) {\n focusableItem = items[items.length - 1];\n }\n if (itemIndex === searchIndex) {\n focusableItem = !this.overflowAnchor || this.overflowAnchor && $(this.overflowAnchor).css('visibility') === 'hidden' ? items[index] : this.overflowAnchor;\n }\n while (!$(focusableItem).is(':kendoFocusable')) {\n if (direction === -1 && $(focusableItem).closest('.' + BUTTON_GROUP).length) {\n focusableItem = $(focusableItem).children(':not(label, div)').last();\n } else {\n focusableItem = $(focusableItem).children(':not(label, div)').first();\n }\n if (!focusableItem.length) {\n directionNumber = directionNumber + direction;\n focusableItem = items[itemIndex + directionNumber];\n if (!focusableItem) {\n return this.overflowAnchor;\n }\n }\n this._preventNextFocus = $(focusableItem).closest('.' + BUTTON_GROUP).length ? false : true;\n }\n return focusableItem;\n },\n _getPrevFocusable: function (element) {\n if (element.is('html')) {\n return element;\n }\n var elementToFocus, prevElement, prevElements = element.prevAll();\n prevElements.each(function () {\n prevElement = $(this);\n if (prevElement.is(':kendoFocusable')) {\n elementToFocus = prevElement;\n return false;\n } else if (prevElement.find(':kendoFocusable').length > 0) {\n elementToFocus = prevElement.find(':kendoFocusable').last();\n return false;\n }\n });\n if (elementToFocus) {\n return elementToFocus;\n } else {\n return this._getPrevFocusable(element.parent());\n }\n },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton');\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n splitButton.toggle();\n },\n _toggleOverflow: function () {\n this.popup.toggle();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n if (!this.options.resizable) {\n return;\n }\n this.popup.close();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._markVisibles();\n this._toggleOverflowAnchor();\n },\n _childrenWidth: function () {\n var childrenWidth = 0;\n this.element.children(':visible:not(\\'.' + STATE_HIDDEN + '\\')').each(function () {\n childrenWidth += outerWidth($(this), true);\n });\n return Math.ceil(childrenWidth);\n },\n _shrink: function (containerWidth) {\n var commandElement, visibleCommands;\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(':visible:not([data-overflow=\\'never\\'], .' + OVERFLOW_ANCHOR + ')');\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n this._hideItem(commandElement);\n }\n }\n }\n },\n _stretch: function (containerWidth) {\n var commandElement, hiddenCommands;\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(':hidden:not(\\'.' + STATE_HIDDEN + '\\')');\n for (var i = 0; i < hiddenCommands.length; i++) {\n commandElement = hiddenCommands.eq(i);\n if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n break;\n }\n }\n }\n },\n _hideItem: function (item) {\n item.hide();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n if (item.length && containerWidth > this._childrenWidth() + outerWidth(item, true)) {\n item.show();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', UNSELECTING = 'k-state-unselecting', INPUTSELECTOR = 'input,a,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up', msie = kendo.support.browser.msie, supportEventDelegation = false;\n (function ($) {\n (function () {\n $('
        ').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').click().end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('
        ');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that),\n touchAction: multiple ? 'none' : 'pan-x pan-y'\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [CHANGE],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target, e);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE, e);\n } else {\n that.value(target, e);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function (e) {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target, e);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val, e) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE, e);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(this.options.inputSelectors)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(this.options.inputSelectors)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end, e) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE, e);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: [\n 'core',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK, CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = that._toDateObject(link);\n if (link.href.indexOf('#') != -1) {\n e.preventDefault();\n }\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n return;\n }\n if (that._view.name != 'month' || options.selectable == 'single') {\n that._click($(link));\n }\n }).on('mouseup' + ns, 'table.k-content, .k-footer', function () {\n that._focusView(that.options.focusOnNav !== false);\n }).attr(ID);\n if (id) {\n that._cellID = id + '_cell_selected';\n }\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = that._toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: { weekColumnHeader: '' }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._footer(that.footer);\n that._index = views[that.options.start];\n that.navigate();\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.focus();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled;\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = that._toDateObject(target.find('a'));\n that._class(FOCUSED, that._toDateObject(target.find('a')));\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey) {\n if ($(eventArgs.event.currentTarget).is(CELLSELECTORVALID)) {\n that._toggleSelection($(eventArgs.event.currentTarget));\n } else {\n that._cellsBySelector(CELLSELECTORVALID).each(function (index, element) {\n var value = that._toDateObject($(element).find('a'));\n that._deselect(value);\n });\n that._addSelectedCellsToArray();\n }\n } else if (eventArgs.event.shiftKey) {\n that._rangeSelection(that._cell);\n } else if ($(eventArgs.event.currentTarget).is(CELLSELECTOR)) {\n that.value(that._toDateObject($(eventArgs.event.currentTarget).find('a')));\n } else {\n that._selectDates = [];\n that._addSelectedCellsToArray();\n }\n that.trigger(CHANGE);\n },\n _destroySelectable: function () {\n var that = this;\n if (that.selectable) {\n that.selectable.destroy();\n that.selectable = null;\n }\n },\n _toggleSelection: function (currentCell) {\n var that = this, date = that._toDateObject(currentCell.find('a'));\n if (currentCell.hasClass('k-state-selected')) {\n that._selectDates.push(date);\n } else {\n that._deselect(date);\n }\n },\n _rangeSelection: function (toDateCell, startDate) {\n var that = this, fromDate = startDate || that._toDateObject(that.selectable.value().first().find('a')), toDate = that._toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? that._toDateObject(that.selectable._lastActive.find('a')) : new Date(+that._value);\n } else {\n that.selectable._lastActive = startDate ? that._cellByDate(that._view.toDateString(startDate), CELLSELECTORVALID) : that.selectable.value().first();\n }\n that._selectDates = [];\n daysDifference = daysBetweenTwoDates(fromDate, toDate);\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that._visualizeSelectedDatesInView();\n },\n _cellsBySelector: function (selector) {\n var that = this;\n return that._table.find(selector);\n },\n _addSelectedCellsToArray: function () {\n var that = this;\n that.selectable.value().each(function (index, item) {\n var date = that._toDateObject($(item.firstChild));\n if (!that.options.disableDates(date)) {\n that._selectDates.push(date);\n }\n });\n },\n _deselect: function (date) {\n var that = this;\n var currentDateIndex = that._selectDates.map(Number).indexOf(+date);\n if (currentDateIndex != -1) {\n that._selectDates.splice(currentDateIndex, 1);\n }\n },\n _dateInView: function (date) {\n var that = this, firstDateInView = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':first').find('a')), lastDateInView = that._toDateObject(that._cellsBySelector(CELLSELECTOR + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = that._toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (isInRange(currentValue, min, max)) {\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(that._toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (isInRange(currentValue, min, max)) {\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(restrictValue(currentValue, options.min, options.max));\n }\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? that._toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this, from = options.from, to = options.to, active = that._active;\n if (!from) {\n to.insertAfter(that.element[0].firstChild);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n to.insertAfter(that.element[0].firstChild);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('
        ');\n that._focusView(active, from);\n from.parent().css({\n position: 'relative',\n width: viewWidth * 2,\n 'float': LEFT,\n 'margin-left': future ? 0 : -viewWidth\n });\n to[future ? 'insertAfter' : 'insertBefore'](from);\n extend(horizontal, {\n effects: SLIDE + ':' + (future ? 'right' : LEFT),\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.unwrap();\n that._focusView(active);\n }\n });\n from.parent().kendoStop(true, true).kendoAnimate(horizontal);\n }\n },\n _vertical: function (from, to) {\n var that = this, vertical = that.options.animation.vertical, effects = vertical.effects, active = that._active, cell, position;\n if (effects && effects.indexOf('zoom') != -1) {\n to.css({\n position: 'absolute',\n top: outerHeight(from.prev()),\n left: 0\n }).insertBefore(from);\n if (transitionOrigin) {\n cell = that._cellByDate(that._view.toDateString(that._current));\n position = cell.position();\n position = position.left + parseInt(cell.width() / 2, 10) + 'px' + ' ' + (position.top + parseInt(cell.height() / 2, 10) + 'px');\n to.css(transitionOrigin, position);\n }\n from.kendoStop(true, true).kendoAnimate({\n effects: 'fadeOut',\n duration: 600,\n complete: function () {\n from.off(ns).remove();\n that._oldTable = null;\n to.css({\n position: 'static',\n top: 0,\n left: 0\n });\n that._focusView(active);\n }\n });\n to.kendoStop(true, true).kendoAnimate(vertical);\n }\n },\n _cellByDate: function (value, selector) {\n return this._table.find(selector ? selector : 'td:not(.' + OTHERMONTH + ')').filter(function () {\n return $(this.firstChild).attr(kendo.attr(VALUE)) === value;\n });\n },\n _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell) {\n cell.removeAttr(ARIA_SELECTED).removeAttr(ARIA_LABEL).removeAttr(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').removeClass(className);\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\n that._table.removeAttr('aria-activedescendant').attr('aria-activedescendant', id);\n }\n },\n _bindTable: function (table) {\n table.on(FOCUS_WITH_NS, this._addClassProxy).on(BLUR, this._removeClassProxy);\n },\n _click: function (link) {\n var that = this, options = that.options, currentValue = new Date(+that._current), value = that._toDateObject(link);\n adjustDST(value, 0);\n if (that._view.name == 'month' && that.options.disableDates(value)) {\n value = that._value;\n }\n that._view.setDate(currentValue, value);\n that.navigateDown(restrictValue(currentValue, options.min, options.max));\n },\n _focus: function (value) {\n var that = this, view = that._view;\n if (view.compare(value, that._current) !== 0) {\n that.navigate(value);\n } else {\n that._current = value;\n that._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
        ').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, links;\n if (!element.find('.k-header')[0]) {\n element.html('
        ' + '' + '' + '' + '
        ');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).click(false);\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month)').has('.k-link').first();\n currentValue = that._toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _toDateObject: function (link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n },\n _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty;\n that.month = {\n content: template('' + (content || '#=data.value#') + '', { useWithBlock: !!content }),\n empty: template('' + (empty || ' ') + '', { useWithBlock: !!empty }),\n weekNumber: template('' + (weekNumber || '#= data.weekNumber #') + '', { useWithBlock: !!weekNumber })\n };\n that.footer = footer !== false ? template(footer || '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #', { useWithBlock: false }) : null;\n }\n });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), html = '';\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n content: options.content,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max;\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString;\n return view({\n start: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max;\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n return view({\n start: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\n ]\n };\n function title(date, min, max, modular) {\n var start = date.getFullYear(), minYear = min.getFullYear(), maxYear = max.getFullYear(), end;\n start = start - start % modular;\n end = start + (modular - 1);\n if (start < minYear) {\n start = minYear;\n }\n if (end > maxYear) {\n end = maxYear;\n }\n return start + '-' + end;\n }\n function view(options) {\n var idx = 0, data, min = options.min, max = options.max, start = options.start, setter = options.setter, build = options.build, weekNumberBuild = options.weekNumberBuild, length = options.cells || 12, isWeekColumnVisible = options.isWeekColumnVisible, cellsPerRow = options.perRow || 4, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, html = options.html || '
        ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
        ';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += isInRange(start, min, max) ? content(data) : empty(data);\n setter(start, 1);\n }\n return html + '
        ';\n }\n function compare(date1, date2, modifier) {\n var year1 = date1.getFullYear(), start = date2.getFullYear(), end = start, result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (year1 > end) {\n result = 1;\n } else if (year1 < start) {\n result = -1;\n }\n return result;\n }\n function getToday() {\n var today = new DATE();\n return new DATE(today.getFullYear(), today.getMonth(), today.getDate());\n }\n function restrictValue(value, min, max) {\n var today = getToday();\n if (value) {\n today = new DATE(+value);\n }\n if (min > today) {\n today = new DATE(+min);\n } else if (max < today) {\n today = new DATE(+max);\n }\n return today;\n }\n function isInRange(date, min, max) {\n return +date >= +min && +date <= +max;\n }\n function shiftArray(array, idx) {\n return array.slice(idx).concat(array.slice(0, idx));\n }\n function setDate(date, value, multiplier) {\n value = value instanceof DATE ? value.getFullYear() : date.getFullYear() + multiplier * value;\n date.setFullYear(value);\n }\n function daysBetweenTwoDates(startDate, endDate) {\n if (+endDate < +startDate) {\n var temp = +startDate;\n calendar.views[0].setDate(startDate, endDate);\n calendar.views[0].setDate(endDate, new Date(temp));\n }\n var fromDateUTC = Date.UTC(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n var endDateUTC = Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n return Math.ceil((+endDateUTC - +fromDateUTC) / kendo.date.MS_PER_DAY);\n }\n function addDaysToArray(array, numberOfDays, fromDate, disableDates) {\n for (var i = 0; i <= numberOfDays; i++) {\n var nextDay = new Date(fromDate.getTime());\n nextDay = new Date(nextDay.setDate(nextDay.getDate() + i));\n if (!disableDates(nextDay)) {\n array.push(nextDay);\n }\n }\n }\n function mousetoggle(e) {\n var disabled = $(this).hasClass('k-state-disabled');\n if (!disabled) {\n $(this).toggleClass(HOVER, MOUSEENTER.indexOf(e.type) > -1 || e.type == FOCUS);\n }\n }\n function prevent(e) {\n e.preventDefault();\n }\n function createDate(year, month, date) {\n var leapYear = 1904;\n var dateObject = new DATE(leapYear, month, date);\n dateObject.setFullYear(year);\n return dateObject;\n }\n function getCalendarInfo(culture) {\n return getCulture(culture).calendars.standard;\n }\n function normalize(options) {\n var start = views[options.start], depth = views[options.depth], culture = getCulture(options.culture);\n options.format = extractFormat(options.format || culture.calendars.standard.patterns.d);\n if (isNaN(start)) {\n start = 0;\n options.start = MONTH;\n }\n if (depth === undefined || depth > start) {\n options.depth = MONTH;\n }\n if (options.dates === null) {\n options.dates = [];\n }\n }\n function makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && window.kendo.jQuery.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && window.kendo.jQuery.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\n calendar.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dateinput', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dateinput',\n name: 'DateInput',\n category: 'web',\n description: 'The DateInput widget allows to edit date by typing.',\n depends: ['core']\n };\n (function ($, undefined) {\n var global = window;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var keys = kendo.keys;\n var ns = '.kendoDateInput';\n var proxy = $.proxy;\n var objectToString = {}.toString;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange.kendoDateInput input' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var STATEDEFAULT = 'k-state-default';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var knownSymbols = 'dMyHhmftsz';\n var DateInput = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n options.min = kendo.parseDate(element.attr('min')) || kendo.parseDate(options.min);\n options.max = kendo.parseDate(element.attr('max')) || kendo.parseDate(options.max);\n var insidePicker = (element.parent().attr('class') || '').indexOf('k-picker-wrap') >= 0;\n if (insidePicker) {\n that.wrapper = element.parent();\n } else {\n that.wrapper = element.wrap('').parent();\n that.wrapper.addClass(element[0].className);\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n $('').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('paste' + ns, proxy(that._paste, that)).on('keydown' + ns, proxy(that._keydown, that)).on(INPUT_EVENT_NAME, proxy(that._input, that)).on('mouseup' + ns, proxy(that._mouseUp, that)).on('DOMMouseScroll' + ns + ' mousewheel' + ns, proxy(that._scroll, that));\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('paste' + ns).off(INPUT_EVENT_NAME).off('mouseup' + ns).off('DOMMouseScroll' + ns + ' mousewheel' + ns);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper;\n that._unbindInput();\n if (!readonly && !disable) {\n wrapper.addClass(STATEDEFAULT).removeClass(STATEDISABLED);\n element.removeAttr(DISABLED).removeAttr(READONLY);\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n element.removeAttr(READONLY);\n }\n if (readonly) {\n element.attr(READONLY, readonly);\n }\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n this._dateTime.modifyPart(symbol, key == 38 ? 1 : -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\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;\n var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var newHours;\n switch (symbol) {\n case 'd':\n var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newDate)) {\n return;\n }\n while (newDate > 31) {\n newDate = parseInt(newDate.toString().slice(1), 10);\n }\n if (newDate < 1) {\n date = false;\n } else {\n newValue.setDate(newDate);\n if (newValue.getMonth() !== value.getMonth()) {\n return;\n }\n date = true;\n }\n break;\n case 'M':\n var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n if (!isNaN(newMonth)) {\n while (newMonth > 12) {\n newMonth = parseInt(newMonth.toString().slice(1), 10);\n }\n if (newMonth < 1) {\n month = false;\n } else {\n newValue.setMonth(newMonth - 1);\n if (newValue.getMonth() !== newMonth - 1) {\n newValue.setDate(1);\n newValue.setMonth(newMonth - 1);\n }\n month = true;\n }\n } else {\n var monthNames = calendar.months.names;\n typedMonthPart += currentChar.toLowerCase();\n while (typedMonthPart.length > 0) {\n for (var i = 0; i < monthNames.length; i++) {\n if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n newValue.setMonth(i);\n month = true;\n value = newValue;\n return true;\n }\n }\n typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n }\n return false;\n }\n break;\n case 'y':\n var newYear = (year ? newValue.getFullYear() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newYear)) {\n return;\n }\n while (newYear > 9999) {\n newYear = parseInt(newYear.toString().slice(1), 10);\n }\n if (newYear < 1) {\n year = false;\n } else {\n newValue.setFullYear(newYear);\n year = true;\n }\n break;\n case 'h':\n newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 12) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n hours = true;\n break;\n case 'H':\n newHours = (hours ? newValue.getHours() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 23) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(newHours);\n hours = true;\n break;\n case 'm':\n var newMinutes = (minutes ? newValue.getMinutes() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newMinutes)) {\n return;\n }\n while (newMinutes > 59) {\n newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n }\n newValue.setMinutes(newMinutes);\n minutes = true;\n break;\n case 's':\n var newSeconds = (seconds ? newValue.getSeconds() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newSeconds)) {\n return;\n }\n while (newSeconds > 59) {\n newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n }\n newValue.setSeconds(newSeconds);\n seconds = true;\n break;\n case 't':\n if (hours) {\n typedDayPeriodPart += currentChar.toLowerCase();\n while (typedDayPeriodPart.length > 0) {\n if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 || calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n newValue.setHours((newValue.getHours() + 12) % 24);\n value = newValue;\n return true;\n }\n typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n }\n return false;\n }\n break;\n default:\n break;\n }\n value = newValue;\n return true;\n };\n this.toPair = function (format, culture, messages) {\n if (!format) {\n return [\n '',\n ''\n ];\n }\n culture = kendo.getCulture(culture);\n calendar = culture.calendars.standard;\n format = calendar.patterns[format] || format;\n days = calendar.days;\n months = calendar.months;\n placeholders = messages;\n return [\n format.replace(dateFormatRegExp, generateMatcher(false)),\n format.replace(dateFormatRegExp, generateMatcher(true))\n ];\n };\n this.getDateObject = function () {\n return year && month && date && hours && minutes && seconds && milliseconds ? new Date(value.getTime()) : null;\n };\n if (!initDate) {\n value = new Date();\n var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n for (var i = 0; i < sampleFormat.length; i++) {\n setExisting(sampleFormat[i], false);\n }\n } else {\n value = new Date(initDate.getTime());\n }\n };\n function approximateStringMatching(oldText, oldFormat, newText, caret) {\n var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n oldText = oldText.substring(0, caret + oldText.length - newText.length);\n newText = newText.substring(0, caret);\n var diff = [];\n var i;\n if (oldText === newText && caret > 0) {\n diff.push([\n oldFormat[caret - 1],\n newText[caret - 1]\n ]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n var deletedSymbol = '';\n for (i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n deletedSymbol = oldFormat[i];\n diff.push([\n deletedSymbol,\n ''\n ]);\n }\n }\n return diff;\n }\n if (newText[newText.length - 1] === ' ' || newText[newText.length - 1] === oldTextSeparator) {\n return [[\n oldFormat[caret - 1],\n ' '\n ]];\n }\n if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n var symbol = oldFormat[0];\n for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[\n symbol,\n newText[caret - 1]\n ]];\n }\n return [[\n oldFormat[caret - 1],\n newText[caret - 1]\n ]];\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datepicker', [\n 'kendo.calendar',\n 'kendo.popup',\n 'kendo.dateinput'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datepicker',\n name: 'DatePicker',\n category: 'web',\n description: 'The DatePicker widget allows the user to select a date from a calendar or by direct input.',\n depends: [\n 'calendar',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parse = kendo.parseDate, keys = kendo.keys, support = kendo.support, template = kendo.template, activeElement = kendo._activeElement, DIV = '
        ', SPAN = '', ns = '.kendoDatePicker', CLICK = 'click' + ns, UP = support.mouseAndTouchPresent ? kendo.applyEventMap('up', ns.slice(1)) : CLICK, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, ID = 'id', MIN = 'min', MAX = 'max', MONTH = 'month', ARIA_DISABLED = 'aria-disabled', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container').appendTo(body);\n that.options = options = options || {};\n id = options.id;\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div);\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n this.popup.destroy();\n },\n open: function () {\n var that = this;\n that._calendar();\n that.popup.open();\n },\n close: function () {\n this.popup.close();\n },\n min: function (value) {\n this._option(MIN, value);\n },\n max: function (value) {\n this._option(MAX, value);\n },\n toggle: function () {\n var that = this;\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n move: function (e) {\n var that = this, key = e.keyCode, calendar = that.calendar, selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER, handled = false;\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n } else if (that.popup.visible()) {\n if (key == keys.ESC || selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n that.close();\n e.preventDefault();\n return true;\n }\n if (key != keys.SPACEBAR) {\n that._current = calendar._move(e);\n }\n handled = true;\n }\n return handled;\n },\n current: function (date) {\n this._current = date;\n this.calendar._focus(date);\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.close();\n }\n },\n _option: function (option, value) {\n var that = this;\n var calendar = that.calendar;\n that.options[option] = value;\n if (calendar) {\n calendar[option](value);\n }\n }\n };\n DateView.normalize = normalize;\n kendo.DateView = DateView;\n var DatePicker = Widget.extend({\n init: function (element, options) {\n var that = this, disabled, div;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.disableDates = kendo.calendar.disabled(options.disableDates);\n options.min = parse(element.attr('min')) || parse(options.min);\n options.max = parse(element.attr('max')) || parse(options.max);\n normalize(options);\n that._initialOptions = extend({}, options);\n that._wrapper();\n that.dateView = new DateView(extend({}, options, {\n id: element.attr(ID),\n anchor: that.wrapper,\n change: function () {\n that._change(this.value());\n that.close();\n },\n close: function (e) {\n if (that.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n element.attr(ARIA_EXPANDED, false);\n div.attr(ARIA_HIDDEN, true);\n }\n },\n open: function (e) {\n var options = that.options, date;\n if (that.trigger(OPEN)) {\n e.preventDefault();\n } else {\n if (that.element.val() !== that._oldText) {\n date = parse(element.val(), options.parseFormats, options.culture);\n that.dateView[date ? 'current' : 'value'](date);\n }\n element.attr(ARIA_EXPANDED, true);\n div.attr(ARIA_HIDDEN, false);\n that._updateARIA(date);\n }\n }\n }));\n div = that.dateView.div;\n that._icon();\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n element.addClass('k-input').attr({\n role: 'combobox',\n 'aria-expanded': false,\n 'aria-owns': that.dateView._dateViewID\n });\n that._reset();\n that._template();\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n if (options.dateInput) {\n that._dateInput = new ui.DateInput(element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max,\n value: options.value\n });\n }\n that._old = that._update(options.value || that.element.val());\n that._oldText = element.val();\n kendo.notify(that);\n },\n events: [\n OPEN,\n CLOSE,\n CHANGE\n ],\n options: {\n name: 'DatePicker',\n value: null,\n footer: '',\n format: '',\n culture: '',\n parseFormats: [],\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n start: MONTH,\n depth: MONTH,\n animation: {},\n month: {},\n dates: [],\n disableDates: null,\n ARIATemplate: 'Current focused date is #=kendo.toString(data.current, \"D\")#',\n dateInput: false,\n weekNumber: false\n },\n setOptions: function (options) {\n var that = this;\n var value = that._value;\n Widget.fn.setOptions.call(that, options);\n options = that.options;\n options.min = parse(options.min);\n options.max = parse(options.max);\n normalize(options);\n that.dateView.setOptions(options);\n if (that._dateInput) {\n that._dateInput.setOptions({\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max,\n value: options.value\n });\n }\n if (value) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n that._updateARIA(value);\n }\n },\n _editable: function (options) {\n var that = this, icon = that._dateIcon.off(ns), element = that.element.off(ns), wrapper = that._inputWrapper.off(ns), readonly = options.readonly, disable = options.disable;\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n element.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n icon.on(UP, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.dateView.destroy();\n that.element.off(ns);\n that._dateIcon.off(ns);\n that._inputWrapper.off(ns);\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n open: function () {\n this.dateView.open();\n },\n close: function () {\n this.dateView.close();\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option(MAX, value);\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._old = that._update(value);\n if (that._old === null) {\n that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _blur: function () {\n var that = this, value = that.element.val();\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function (e) {\n var that = this;\n that.dateView.toggle();\n that._focusElement(e.type);\n },\n _focusElement: function (eventType) {\n var element = this.element;\n if ((!support.touch || support.mouseAndTouchPresent && !(eventType || '').match(/touch/i)) && element[0] !== activeElement()) {\n element.focus();\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('').insertAfter(element);\n }\n that._dateIcon = icon.attr({\n 'role': 'button',\n 'aria-controls': that.dateView._dateViewID\n });\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, formattedValue;\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\n that.element.val(date === null ? value : formattedValue);\n }\n return date;\n }\n if (date !== null && isEqualDatePart(date, min)) {\n date = restrictValue(date, min, max);\n } else if (!isInRange(date, min, max)) {\n date = null;\n }\n that._value = date;\n that.dateView.value(date);\n if (that._dateInput && date) {\n that._dateInput.value(date || value);\n } else {\n that.element.val(kendo.toString(date || value, options.format, options.culture));\n }\n that._updateARIA(date);\n return date;\n },\n _wrapper: function () {\n var that = this, element = that.element, wrapper;\n wrapper = element.parents('.k-datepicker');\n if (!wrapper[0]) {\n wrapper = element.wrap(SPAN).parent().addClass('k-picker-wrap k-state-default');\n wrapper = wrapper.wrap(SPAN).parent();\n }\n wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n that.wrapper = wrapper.addClass('k-widget k-datepicker k-header').addClass(element[0].className);\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _updateARIA: function (date) {\n var cell;\n var that = this;\n var calendar = that.dateView.calendar;\n that.element.removeAttr('aria-activedescendant');\n if (calendar) {\n cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.numerictextbox', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'numerictextbox',\n name: 'NumericTextBox',\n category: 'web',\n description: 'The NumericTextBox widget can format and display numeric, percentage or currency textbox.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, caret = kendo.caret, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, parse = kendo.parseFloat, placeholderSupported = kendo.support.placeholder, getCulture = kendo.getCulture, CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', SPIN = 'spin', ns = '.kendoNumericTextBox', TOUCHEND = 'touchend', MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = 'mouseenter' + ns + ' ' + MOUSELEAVE, DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', FOCUS = 'focus', POINT = '.', CLASS_ICON = 'k-icon', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focusout' + ns, proxy(that._focusout, that)).attr('role', 'spinbutton');\n options.placeholder = options.placeholder || element.attr('placeholder');\n min = that.min(element.attr('min'));\n max = that.max(element.attr('max'));\n step = that._parse(element.attr('step'));\n if (options.min === NULL && min !== NULL) {\n options.min = min;\n }\n if (options.max === NULL && max !== NULL) {\n options.max = max;\n }\n if (!isStep && step !== NULL) {\n options.step = step;\n }\n that._initialOptions = extend({}, options);\n that._reset();\n that._wrapper();\n that._arrows();\n that._validation();\n that._input();\n if (!kendo.support.mobileOS) {\n that._text.on(FOCUS + ns, proxy(that._click, that));\n } else {\n that._text.on(TOUCHEND + ns + ' ' + FOCUS + ns, function () {\n if (kendo.support.browser.edge) {\n that._text.one(FOCUS + ns, function () {\n that._toggleText(false);\n element.focus();\n });\n } else {\n that._toggleText(false);\n element.focus();\n }\n });\n }\n element.attr('aria-valuemin', options.min !== NULL ? options.min * options.factor : options.min).attr('aria-valuemax', options.max !== NULL ? options.max * options.factor : options.max);\n options.format = extractFormat(options.format);\n value = options.value;\n that.value(value !== NULL ? value : element.val());\n disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value'\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keypress' + ns).off('keyup' + ns).off('paste' + ns);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._arrowsWrap.toggle(that.options.spinners);\n that._inputWrapper.toggleClass('k-expand-padding', !that.options.spinners);\n that._text.prop('placeholder', that.options.placeholder);\n that._placeholder(that.options.placeholder);\n that.element.attr({\n 'aria-valuemin': that.options.min !== NULL ? that.options.min * that.options.factor : that.options.min,\n 'aria-valuemax': that.options.max !== NULL ? that.options.max * that.options.factor : that.options.max\n });\n that.options.format = extractFormat(that.options.format);\n if (options.value !== undefined) {\n that.value(options.value);\n }\n },\n destroy: function () {\n var that = this;\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.' + CLASS_ICON);\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n that._arrowsWrap = arrows.wrapAll('').parent();\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _validation: function () {\n var that = this;\n var element = that.element;\n that._validationIcon = $('').hide().insertAfter(element);\n },\n _blur: function () {\n var that = this;\n that._toggleText(true);\n that._change(that.element.val());\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('([\\\\d\\\\' + group + ']+)(\\\\' + format[POINT] + ')?(\\\\d+)?');\n }\n if (extractRegExp) {\n result = extractRegExp.exec(value);\n }\n if (result) {\n caretPosition = result[0].replace(groupRegExp, '').length;\n if (value.indexOf('(') != -1 && that._value < 0) {\n caretPosition++;\n }\n }\n that._focusin();\n caret(that.element[0], caretPosition);\n });\n },\n _change: function (value) {\n var that = this, factor = that.options.factor;\n if (factor && factor !== 1) {\n value = kendo.parseFloat(value);\n if (value !== null) {\n value = value / factor;\n }\n }\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n that._removeInvalidState();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('').insertBefore(element).addClass(CLASSNAME);\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n that._initialTitle = element.title;\n text[0].title = element.title;\n text[0].tabIndex = element.tabIndex;\n text[0].style.cssText = element.style.cssText;\n text.prop('placeholder', options.placeholder);\n if (accessKey) {\n text.attr('accesskey', accessKey);\n element.accessKey = '';\n }\n that._text = text.addClass(element.className).attr({\n 'role': 'spinbutton',\n 'aria-valuemin': options.min !== NULL ? options.min * options.factor : options.min,\n 'aria-valuemax': options.max !== NULL ? options.max * options.factor : options.max\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n that._key = key;\n if (key == keys.DOWN) {\n that._step(-1);\n } else if (key == keys.UP) {\n that._step(1);\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n } else {\n that._typing = true;\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n return;\n }\n var that = this;\n var min = that.options.min;\n var element = that.element;\n var selection = caret(element);\n var selectionStart = selection[0];\n var selectionEnd = selection[1];\n var character = String.fromCharCode(e.which);\n var numberFormat = that._format(that.options.format);\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n var value = element.val();\n var isValid;\n if (isNumPadDecimal) {\n character = numberFormat[POINT];\n }\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n isValid = that._numericRegex(numberFormat).test(value);\n if (isValid && isNumPadDecimal) {\n element.val(value);\n caret(element, selectionStart + character.length);\n e.preventDefault();\n } else if (min !== null && min >= 0 && value.charAt(0) === '-' || !isValid) {\n that._addInvalidState();\n e.preventDefault();\n }\n that._key = 0;\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0 && that.options.restrictDecimals) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, value = that._parse(element.val()) || 0;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value += that.options.step * step;\n that._update(that._adjust(value));\n that._typing = false;\n that.trigger(SPIN);\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggleText: function (toggle) {\n var that = this;\n that._text.toggle(toggle);\n that.element.toggle(!toggle);\n },\n _parse: function (value, culture) {\n return parse(value, this._culture(culture), this.options.format);\n },\n _round: function (value, precision) {\n var rounder = this.options.round ? kendo._round : truncate;\n return rounder(value, precision);\n },\n _update: function (value) {\n var that = this, options = that.options, factor = options.factor, format = options.format, decimals = options.decimals, culture = that._culture(), numberFormat = that._format(format, culture), isNotNull;\n if (decimals === NULL) {\n decimals = numberFormat.decimals;\n }\n value = that._parse(value, culture);\n isNotNull = value !== NULL;\n if (isNotNull) {\n value = parseFloat(that._round(value, decimals), 10);\n }\n that._value = value = that._adjust(value);\n that._placeholder(kendo.toString(value, format, culture));\n if (isNotNull) {\n if (factor) {\n value = parseFloat(that._round(value * factor, decimals), 10);\n }\n value = value.toString();\n if (value.indexOf('e') !== -1) {\n value = that._round(+value, decimals);\n }\n value = value.replace(POINT, numberFormat[POINT]);\n } else {\n value = null;\n }\n that.element.val(value);\n that.element.add(that._text).attr('aria-valuenow', value);\n },\n _placeholder: function (value) {\n var input = this._text;\n input.val(value);\n if (!placeholderSupported && !value) {\n input.val(this.options.placeholder);\n }\n input.attr('title', this._initialTitle || input.val());\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMElement = element[0], wrapper;\n wrapper = element.parents('.k-numerictextbox');\n if (!wrapper.is('span.k-numerictextbox')) {\n wrapper = element.hide().wrap('').parent();\n wrapper = wrapper.wrap('').parent();\n }\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '';\n that.wrapper = wrapper.addClass('k-widget k-numerictextbox').addClass(DOMElement.className).css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '' + '' + '';\n }\n function truncate(value, precision) {\n var parts = parseFloat(value, 10).toString().split(POINT);\n if (parts[1]) {\n parts[1] = parts[1].substring(0, precision);\n }\n return parts.join(POINT);\n }\n ui.plugin(NumericTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editable', [\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
        ' + '#=message#
        ', CHANGE = 'change';\n var EQUAL_SET = 'equalSet';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, .k-combobox .k-input, [' + kendo.attr('role') + '=listbox], [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file])').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n name: options.field,\n title: options.title\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options), format = options.format;\n if (format) {\n format = kendo._extractFormat(format);\n }\n attr[kendo.attr('format')] = format;\n $('').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n this.list.prepend($('').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append(' ').append(that.element);\n span = wrapper.find(SELECTOR);\n }\n that.span = span;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select');\n that._arrowIcon = that._arrow.find('.k-icon');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('').parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n that._focused = that.wrapper = wrapper.addClass('k-widget k-dropdown k-header').addClass(DOMelement.className).css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/dom', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.toolbar',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.dropdownlist',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout'\n ], f);\n}(function () {\n (function ($, undefined) {\n var dataviz = kendo.dataviz, draw = kendo.drawing, geom = kendo.geometry, diagram = dataviz.diagram, Widget = kendo.ui.Widget, Class = kendo.Class, proxy = $.proxy, deepExtend = kendo.deepExtend, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, Canvas = diagram.Canvas, Group = diagram.Group, Rectangle = diagram.Rectangle, Circle = diagram.Circle, CompositeTransform = diagram.CompositeTransform, Rect = diagram.Rect, Path = diagram.Path, DeleteShapeUnit = diagram.DeleteShapeUnit, DeleteConnectionUnit = diagram.DeleteConnectionUnit, TextBlock = diagram.TextBlock, Image = diagram.Image, Point = diagram.Point, Intersect = diagram.Intersect, ConnectionEditAdorner = diagram.ConnectionEditAdorner, UndoRedoService = diagram.UndoRedoService, ToolService = diagram.ToolService, Selector = diagram.Selector, ResizingAdorner = diagram.ResizingAdorner, ConnectorsAdorner = diagram.ConnectorsAdorner, Cursors = diagram.Cursors, Utils = diagram.Utils, Observable = kendo.Observable, ToBackUnit = diagram.ToBackUnit, ToFrontUnit = diagram.ToFrontUnit, PolylineRouter = diagram.PolylineRouter, CascadingRouter = diagram.CascadingRouter, isUndefined = Utils.isUndefined, isDefined = Utils.isDefined, defined = draw.util.defined, isArray = $.isArray, isFunction = kendo.isFunction, isString = Utils.isString, isPlainObject = $.isPlainObject, math = Math;\n var SASS_THEMES = [\n 'sass',\n 'default-v2',\n 'bootstrap-v4'\n ];\n var NS = '.kendoDiagram', CASCADING = 'cascading', ITEMBOUNDSCHANGE = 'itemBoundsChange', CHANGE = 'change', CLICK = 'click', DRAG = 'drag', DRAG_END = 'dragEnd', DRAG_START = 'dragStart', MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ERROR = 'error', AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', MAXINT = 9007199254740992, SELECT = 'select', ITEMROTATE = 'itemRotate', PAN = 'pan', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', NONE = 'none', DEFAULT_CANVAS_WIDTH = 600, DEFAULT_CANVAS_HEIGHT = 600, DEFAULT_SHAPE_TYPE = 'rectangle', DEFAULT_SHAPE_WIDTH = 100, DEFAULT_SHAPE_HEIGHT = 100, DEFAULT_SHAPE_MINWIDTH = 20, DEFAULT_SHAPE_MINHEIGHT = 20, DEFAULT_SHAPE_POSITION = 0, DEFAULT_CONNECTION_BACKGROUND = 'Yellow', MAX_VALUE = Number.MAX_VALUE, MIN_VALUE = -Number.MAX_VALUE, ABSOLUTE = 'absolute', TRANSFORMED = 'transformed', ROTATED = 'rotated', TRANSPARENT = 'transparent', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y', MOUSEWHEEL_NS = 'DOMMouseScroll' + NS + ' mousewheel' + NS, MOBILE_ZOOM_RATE = 0.05, MOBILE_PAN_DISTANCE = 5, BUTTON_TEMPLATE = '#=text#', CONNECTION_CONTENT_OFFSET = 5;\n diagram.DefaultConnectors = [\n { name: TOP },\n { name: BOTTOM },\n { name: LEFT },\n { name: RIGHT },\n {\n name: AUTO,\n position: function (shape) {\n return shape.getPosition('center');\n }\n }\n ];\n var defaultButtons = {\n cancel: {\n text: 'Cancel',\n imageClass: 'k-i-cancel',\n className: 'k-diagram-cancel',\n iconClass: 'k-icon'\n },\n update: {\n text: 'Update',\n imageClass: 'k-i-checkmark',\n className: 'k-diagram-update',\n iconClass: 'k-icon'\n }\n };\n diagram.shapeDefaults = function (extra) {\n var defaults = {\n type: DEFAULT_SHAPE_TYPE,\n path: '',\n autoSize: true,\n visual: null,\n x: DEFAULT_SHAPE_POSITION,\n y: DEFAULT_SHAPE_POSITION,\n minWidth: DEFAULT_SHAPE_MINWIDTH,\n minHeight: DEFAULT_SHAPE_MINHEIGHT,\n width: DEFAULT_SHAPE_WIDTH,\n height: DEFAULT_SHAPE_HEIGHT,\n hover: {},\n editable: {\n connect: true,\n tools: []\n },\n connectors: diagram.DefaultConnectors,\n rotation: { angle: 0 }\n };\n Utils.simpleExtend(defaults, extra);\n return defaults;\n };\n function mwDelta(e) {\n var origEvent = e.originalEvent, delta = 0;\n if (origEvent.wheelDelta) {\n delta = -origEvent.wheelDelta / 40;\n delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\n } else if (origEvent.detail) {\n delta = origEvent.detail;\n }\n return delta;\n }\n function isAutoConnector(connector) {\n return connector.options.name.toLowerCase() === AUTO.toLowerCase();\n }\n function closestConnector(point, connectors) {\n var minimumDistance = MAXINT, resCtr, connector;\n for (var i = 0; i < connectors.length; i++) {\n connector = connectors[i];\n if (!isAutoConnector(connector)) {\n var dist = point.distanceTo(connector.position());\n if (dist < minimumDistance) {\n minimumDistance = dist;\n resCtr = connector;\n }\n }\n }\n return resCtr;\n }\n function indicesOfItems(group, visuals) {\n var i, indices = [], visual;\n var children = group.drawingContainer().children;\n var length = children.length;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n for (var j = 0; j < length; j++) {\n if (children[j] == visual.drawingContainer()) {\n indices.push(j);\n break;\n }\n }\n }\n return indices;\n }\n var DiagramElement = Observable.extend({\n init: function (options) {\n var that = this;\n that.dataItem = (options || {}).dataItem;\n Observable.fn.init.call(that);\n that.options = deepExtend({ id: diagram.randomId() }, that.options, options);\n that.isSelected = false;\n that.visual = new Group({\n id: that.options.id,\n autoSize: that.options.autoSize\n });\n that.id = that.options.id;\n that._template();\n },\n options: {\n hover: {},\n cursor: Cursors.grip,\n content: { align: 'center middle' },\n selectable: true,\n serializable: true,\n enable: true\n },\n _getCursor: function (point) {\n if (this.adorner) {\n return this.adorner._getCursor(point);\n }\n return this.options.cursor;\n },\n visible: function (value) {\n if (isUndefined(value)) {\n return this.visual.visible();\n } else {\n this.visual.visible(value);\n }\n },\n bounds: function () {\n },\n refresh: function () {\n this.visual.redraw();\n },\n position: function (point) {\n this.options.x = point.x;\n this.options.y = point.y;\n this.visual.position(point);\n },\n toString: function () {\n return this.options.id;\n },\n serialize: function () {\n var json = deepExtend({}, { options: this.options });\n if (this.dataItem) {\n json.dataItem = this.dataItem.toString();\n }\n return json;\n },\n _content: function (content) {\n if (content !== undefined) {\n var options = this.options;\n if (diagram.Utils.isString(content)) {\n options.content.text = content;\n } else {\n deepExtend(options.content, content);\n }\n var contentOptions = options.content;\n var contentVisual = this._contentVisual;\n if (!contentVisual) {\n this._createContentVisual(contentOptions);\n } else {\n this._updateContentVisual(contentOptions);\n }\n }\n return this.options.content.text;\n },\n _createContentVisual: function (options) {\n if (options.text) {\n this._contentVisual = new TextBlock(options);\n this._contentVisual._includeInBBox = false;\n this.visual.append(this._contentVisual);\n }\n },\n _updateContentVisual: function (options) {\n this._contentVisual.redraw(options);\n },\n _hitTest: function (point) {\n var bounds = this.bounds();\n return this.visible() && bounds.contains(point) && this.options.enable;\n },\n _template: function () {\n var that = this;\n if (that.options.content.template) {\n var data = that.dataItem || {}, elementTemplate = kendo.template(that.options.content.template, { paramName: 'dataItem' });\n that.options.content.text = elementTemplate(data);\n }\n },\n _canSelect: function () {\n return this.options.selectable !== false;\n },\n toJSON: function () {\n return { id: this.options.id };\n }\n });\n var Connector = Class.extend({\n init: function (shape, options) {\n this.options = deepExtend({}, this.options, options);\n this.connections = [];\n this.shape = shape;\n },\n options: {\n width: 7,\n height: 7,\n fill: { color: DEFAULT_CONNECTION_BACKGROUND },\n hover: {}\n },\n position: function () {\n if (this.options.position) {\n return this.options.position(this.shape);\n } else {\n return this.shape.getPosition(this.options.name);\n }\n },\n toJSON: function () {\n return {\n shapeId: this.shape.toString(),\n connector: this.options.name\n };\n }\n });\n Connector.parse = function (diagram, str) {\n var tempStr = str.split(':'), id = tempStr[0], name = tempStr[1] || AUTO;\n for (var i = 0; i < diagram.shapes.length; i++) {\n var shape = diagram.shapes[i];\n if (shape.options.id == id) {\n return shape.getConnector(name.trim());\n }\n }\n };\n var Shape = DiagramElement.extend({\n init: function (options, diagram) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.diagram = diagram;\n this.updateOptionsFromModel();\n options = that.options;\n that.connectors = [];\n that.type = options.type;\n that.createShapeVisual();\n that.updateBounds();\n that.content(that.content());\n that._createConnectors();\n },\n options: diagram.shapeDefaults(),\n _setOptionsFromModel: function (model) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n this.options = deepExtend({}, this.options, modelOptions);\n this.redrawVisual();\n },\n updateOptionsFromModel: function (model, field) {\n if (this.diagram && this.diagram._isEditable) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n if (model && field) {\n if (!dataviz.inArray(field, [\n 'x',\n 'y',\n 'width',\n 'height'\n ])) {\n if (this.options.visual) {\n this._redrawVisual();\n } else if (modelOptions.type) {\n this.options = deepExtend({}, this.options, modelOptions);\n this._redrawVisual();\n }\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n } else {\n var bounds = this.bounds();\n bounds[field] = model[field];\n this.bounds(bounds);\n }\n } else {\n this.options = deepExtend({}, this.options, modelOptions);\n }\n }\n },\n _redrawVisual: function () {\n this.visual.clear();\n this._contentVisual = null;\n this.options.dataItem = this.dataItem;\n this.createShapeVisual();\n this.updateBounds();\n },\n redrawVisual: function () {\n this._redrawVisual();\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n },\n updateModel: function (syncChanges) {\n var diagram = this.diagram;\n if (diagram && diagram._isEditable) {\n var bounds = this._bounds;\n var model = this.dataItem;\n if (model) {\n diagram._suspendModelRefresh();\n if (defined(model.x) && bounds.x !== model.x) {\n model.set('x', bounds.x);\n }\n if (defined(model.y) && bounds.y !== model.y) {\n model.set('y', bounds.y);\n }\n if (defined(model.width) && bounds.width !== model.width) {\n model.set('width', bounds.width);\n }\n if (defined(model.height) && bounds.height !== model.height) {\n model.set('height', bounds.height);\n }\n this.dataItem = model;\n diagram._resumeModelRefresh();\n if (syncChanges) {\n diagram._syncShapeChanges();\n }\n }\n }\n },\n updateBounds: function () {\n var bounds = this.visual._measure(true);\n var options = this.options;\n this.bounds(new Rect(options.x, options.y, bounds.width, bounds.height));\n this._rotate();\n this._alignContent();\n },\n content: function (content) {\n var result = this._content(content);\n this._alignContent();\n return result;\n },\n _alignContent: function () {\n var contentOptions = this.options.content || {};\n var contentVisual = this._contentVisual;\n if (contentVisual && contentOptions.align) {\n var containerRect = this.visual._measure();\n var aligner = new diagram.RectAlign(containerRect);\n var contentBounds = contentVisual.drawingElement.bbox(null);\n var contentRect = new Rect(0, 0, contentBounds.width(), contentBounds.height());\n var alignedBounds = aligner.align(contentRect, contentOptions.align);\n contentVisual.position(alignedBounds.topLeft());\n }\n },\n _createConnectors: function () {\n var options = this.options, length = options.connectors.length, connectorDefaults = options.connectorDefaults, connector, i;\n for (i = 0; i < length; i++) {\n connector = new Connector(this, deepExtend({}, connectorDefaults, options.connectors[i]));\n this.connectors.push(connector);\n }\n },\n bounds: function (value) {\n var bounds;\n if (value) {\n if (isString(value)) {\n switch (value) {\n case TRANSFORMED:\n bounds = this._transformedBounds();\n break;\n case ABSOLUTE:\n bounds = this._transformedBounds();\n var pan = this.diagram._pan;\n bounds.x += pan.x;\n bounds.y += pan.y;\n break;\n case ROTATED:\n bounds = this._rotatedBounds();\n break;\n default:\n bounds = this._bounds;\n }\n } else {\n this._setBounds(value);\n this._triggerBoundsChange();\n if (!(this.diagram && this.diagram._layouting)) {\n this.refreshConnections();\n }\n }\n } else {\n bounds = this._bounds;\n }\n return bounds;\n },\n _setBounds: function (rect) {\n var options = this.options;\n var topLeft = rect.topLeft();\n var x = options.x = topLeft.x;\n var y = options.y = topLeft.y;\n var width = options.width = math.max(rect.width, options.minWidth);\n var height = options.height = math.max(rect.height, options.minHeight);\n this._bounds = new Rect(x, y, width, height);\n this.visual.redraw({\n x: x,\n y: y,\n width: width,\n height: height\n });\n },\n position: function (point) {\n if (point) {\n this.bounds(new Rect(point.x, point.y, this._bounds.width, this._bounds.height));\n } else {\n return this._bounds.topLeft();\n }\n },\n clone: function () {\n var json = this.serialize();\n json.options.id = diagram.randomId();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Shape(json.options);\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (isUndefined(value)) {\n value = true;\n }\n if (this._canSelect()) {\n if (this.isSelected != value) {\n selected = [];\n deselected = [];\n this.isSelected = value;\n if (this.isSelected) {\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n Utils.remove(diagram._selectedItems, this);\n deselected.push(this);\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n rotate: function (angle, center, undoable) {\n var rotate = this.visual.rotate();\n if (angle !== undefined) {\n if (undoable !== false && this.diagram && this.diagram.undoRedoService && angle !== rotate.angle) {\n this.diagram.undoRedoService.add(new diagram.RotateUnit(this.diagram._resizingAdorner, [this], [rotate.angle]), false);\n }\n var b = this.bounds(), sc = new Point(b.width / 2, b.height / 2), deltaAngle, newPosition;\n if (center) {\n deltaAngle = angle - rotate.angle;\n newPosition = b.center().rotate(center, 360 - deltaAngle).minus(sc);\n this._rotationOffset = this._rotationOffset.plus(newPosition.minus(b.topLeft()));\n this.position(newPosition);\n }\n this.visual.rotate(angle, sc);\n this.options.rotation.angle = angle;\n if (this.diagram && this.diagram._connectorsAdorner) {\n this.diagram._connectorsAdorner.refresh();\n }\n this.refreshConnections();\n if (this.diagram) {\n this.diagram.trigger(ITEMROTATE, { item: this });\n }\n }\n return rotate;\n },\n connections: function (type) {\n var result = [], i, j, con, cons, ctr;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n cons = ctr.connections;\n for (j = 0, cons; j < cons.length; j++) {\n con = cons[j];\n if (type == 'out') {\n var source = con.source();\n if (source.shape && source.shape == this) {\n result.push(con);\n }\n } else if (type == 'in') {\n var target = con.target();\n if (target.shape && target.shape == this) {\n result.push(con);\n }\n } else {\n result.push(con);\n }\n }\n }\n return result;\n },\n refreshConnections: function () {\n $.each(this.connections(), function () {\n this.refresh();\n });\n },\n getConnector: function (nameOrPoint) {\n var i, ctr;\n if (isString(nameOrPoint)) {\n nameOrPoint = nameOrPoint.toLocaleLowerCase();\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr.options.name.toLocaleLowerCase() == nameOrPoint) {\n return ctr;\n }\n }\n } else if (nameOrPoint instanceof Point) {\n return closestConnector(nameOrPoint, this.connectors);\n } else {\n return this.connectors.length ? this.connectors[0] : null;\n }\n },\n getPosition: function (side) {\n var b = this.bounds(), fnName = side.charAt(0).toLowerCase() + side.slice(1);\n if (isFunction(b[fnName])) {\n return this._transformPoint(b[fnName]());\n }\n return b.center();\n },\n redraw: function (options) {\n if (options) {\n var shapeOptions = this.options;\n var boundsChange;\n this.shapeVisual.redraw(this._visualOptions(options));\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.bounds(new Rect(shapeOptions.x, shapeOptions.y, shapeOptions.width, shapeOptions.height));\n boundsChange = true;\n }\n if (options.connectors) {\n shapeOptions.connectors = options.connectors;\n this._updateConnectors();\n }\n shapeOptions = deepExtend(shapeOptions, options);\n if (options.rotation || boundsChange) {\n this._rotate();\n }\n if (shapeOptions.content) {\n this.content(shapeOptions.content);\n }\n }\n },\n _updateConnectors: function () {\n var connections = this.connections();\n this.connectors = [];\n this._createConnectors();\n var connection;\n var source;\n var target;\n for (var idx = 0; idx < connections.length; idx++) {\n connection = connections[idx];\n source = connection.source();\n target = connection.target();\n if (source.shape && source.shape === this) {\n connection.source(this.getConnector(source.options.name) || null);\n } else if (target.shape && target.shape === this) {\n connection.target(this.getConnector(target.options.name) || null);\n }\n connection.updateModel();\n }\n },\n _diffNumericOptions: diagram.diffNumericOptions,\n _visualOptions: function (options) {\n return {\n data: options.path,\n source: options.source,\n hover: options.hover,\n fill: options.fill,\n stroke: options.stroke\n };\n },\n _triggerBoundsChange: function () {\n if (this.diagram) {\n this.diagram.trigger(ITEMBOUNDSCHANGE, {\n item: this,\n bounds: this._bounds.clone()\n });\n }\n },\n _transformPoint: function (point) {\n var rotate = this.rotate(), bounds = this.bounds(), tl = bounds.topLeft();\n if (rotate.angle) {\n point.rotate(rotate.center().plus(tl), 360 - rotate.angle);\n }\n return point;\n },\n _transformedBounds: function () {\n var bounds = this.bounds(), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(this.diagram.modelToView(tl), this.diagram.modelToView(br));\n },\n _rotatedBounds: function () {\n var bounds = this.bounds().rotatedBounds(this.rotate().angle), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(tl, br);\n },\n _rotate: function () {\n var rotation = this.options.rotation;\n if (rotation && rotation.angle) {\n this.rotate(rotation.angle);\n }\n this._rotationOffset = new Point();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.shapeVisual.redraw({\n stroke: stroke,\n fill: fill\n });\n if (options.editable && options.editable.connect) {\n this.diagram._showConnectors(this, value);\n }\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var bounds = this.bounds(), rotatedPoint, angle = this.rotate().angle;\n if (value.isEmpty && !value.isEmpty()) {\n return Intersect.rects(value, bounds, angle ? angle : 0);\n } else {\n rotatedPoint = value.clone().rotate(bounds.center(), angle);\n if (bounds.contains(rotatedPoint)) {\n return this;\n }\n }\n }\n },\n toJSON: function () {\n return { shapeId: this.options.id };\n },\n createShapeVisual: function () {\n var options = this.options;\n var visualOptions = this._visualOptions(options);\n var visualTemplate = options.visual;\n var type = (options.type + '').toLocaleLowerCase();\n var shapeVisual;\n visualOptions.width = options.width;\n visualOptions.height = options.height;\n if (isFunction(visualTemplate)) {\n shapeVisual = visualTemplate.call(this, options);\n } else if (visualOptions.data) {\n shapeVisual = new Path(visualOptions);\n translateToOrigin(shapeVisual);\n } else if (type == 'rectangle') {\n shapeVisual = new Rectangle(visualOptions);\n } else if (type == 'circle') {\n shapeVisual = new Circle(visualOptions);\n } else if (type == 'text') {\n shapeVisual = new TextBlock(visualOptions);\n } else if (type == 'image') {\n shapeVisual = new Image(visualOptions);\n } else {\n shapeVisual = new Path(visualOptions);\n }\n this.shapeVisual = shapeVisual;\n this.visual.append(this.shapeVisual);\n }\n });\n var Connection = DiagramElement.extend({\n init: function (from, to, options) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.updateOptionsFromModel();\n this._initRouter();\n that.path = new diagram.Polyline(that.options);\n that.path.fill(TRANSPARENT);\n that.visual.append(that.path);\n that._sourcePoint = that._targetPoint = new Point();\n that._setSource(from);\n that._setTarget(to);\n that.content(that.options.content);\n that.definers = [];\n if (defined(options) && options.points) {\n that.points(options.points);\n }\n },\n options: {\n hover: { stroke: {} },\n startCap: NONE,\n endCap: NONE,\n points: [],\n selectable: true,\n fromConnector: AUTO,\n toConnector: AUTO\n },\n _setOptionsFromModel: function (model) {\n this.updateOptionsFromModel(model || this.dataItem);\n },\n updateOptionsFromModel: function (model) {\n if (this.diagram && this.diagram._isEditable) {\n var dataMap = this.diagram._dataMap;\n var options = filterConnectionDataItem(model || this.dataItem);\n if (model) {\n if (defined(options.from)) {\n var from = dataMap[options.from];\n if (from && defined(options.fromConnector)) {\n from = from.getConnector(options.fromConnector);\n }\n this.source(from);\n } else if (defined(options.fromX) && defined(options.fromY)) {\n this.source(new Point(options.fromX, options.fromY));\n }\n if (defined(options.to)) {\n var to = dataMap[options.to];\n if (to && defined(options.toConnector)) {\n to = to.getConnector(options.toConnector);\n }\n this.target(to);\n } else if (defined(options.toX) && defined(options.toY)) {\n this.target(new Point(options.toX, options.toY));\n }\n if (defined(options.type) && this.type() !== options.type) {\n this.points([]);\n this.type(options.type);\n }\n this.dataItem = model;\n this._template();\n this.redraw(this.options);\n } else {\n this.options = deepExtend({}, options, this.options);\n }\n }\n },\n updateModel: function (syncChanges) {\n if (this.diagram && this.diagram._isEditable) {\n if (this.diagram.connectionsDataSource) {\n var model = this.diagram.connectionsDataSource.getByUid(this.dataItem.uid);\n if (model) {\n this.diagram._suspendModelRefresh();\n if (defined(this.options.fromX) && this.options.fromX !== null) {\n clearField('from', model);\n clearField('fromConnector', model);\n model.set('fromX', this.options.fromX);\n model.set('fromY', this.options.fromY);\n } else {\n model.set('from', this.options.from);\n if (defined(model.fromConnector)) {\n model.set('fromConnector', this.sourceConnector ? this.sourceConnector.options.name : null);\n }\n clearField('fromX', model);\n clearField('fromY', model);\n }\n if (defined(this.options.toX) && this.options.toX !== null) {\n clearField('to', model);\n clearField('toConnector', model);\n model.set('toX', this.options.toX);\n model.set('toY', this.options.toY);\n } else {\n model.set('to', this.options.to);\n if (defined(model.toConnector)) {\n model.set('toConnector', this.targetConnector ? this.targetConnector.options.name : null);\n }\n clearField('toX', model);\n clearField('toY', model);\n }\n if (defined(this.options.type) && defined(model.type)) {\n model.set('type', this.options.type);\n }\n this.dataItem = model;\n this.diagram._resumeModelRefresh();\n if (syncChanges) {\n this.diagram._syncConnectionChanges();\n }\n }\n }\n }\n },\n sourcePoint: function () {\n return this._resolvedSourceConnector ? this._resolvedSourceConnector.position() : this._sourcePoint;\n },\n _setSource: function (source) {\n var shapeSource = source instanceof Shape;\n var defaultConnector = this.options.fromConnector || AUTO;\n var dataItem;\n if (shapeSource && !source.getConnector(defaultConnector)) {\n return;\n }\n if (source !== undefined) {\n this.from = source;\n }\n this._removeFromSourceConnector();\n if (source === null) {\n if (this.sourceConnector) {\n this._sourcePoint = (this._resolvedSourceConnector || this.sourceConnector).position();\n this._clearSourceConnector();\n this._setFromOptions(null, this._sourcePoint);\n }\n } else if (source instanceof Connector) {\n dataItem = source.shape.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source;\n this.sourceConnector.connections.push(this);\n } else if (source instanceof Point) {\n this._setFromOptions(null, source);\n this._sourcePoint = source;\n if (this.sourceConnector) {\n this._clearSourceConnector();\n }\n } else if (shapeSource) {\n dataItem = source.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source.getConnector(defaultConnector);\n this.sourceConnector.connections.push(this);\n }\n },\n source: function (source, undoable) {\n if (isDefined(source)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, source));\n }\n this._setSource(source);\n this.refresh();\n }\n return this.sourceConnector ? this.sourceConnector : this._sourcePoint;\n },\n _setFromOptions: function (from, fromPoint) {\n this.options.from = from;\n if (fromPoint) {\n this.options.fromX = fromPoint.x;\n this.options.fromY = fromPoint.y;\n } else {\n this.options.fromX = null;\n this.options.fromY = null;\n }\n },\n sourceDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.left = null;\n this._sourceDefiner = value;\n this.source(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._sourceDefiner) {\n this._sourceDefiner = new diagram.PathDefiner(this.sourcePoint(), null, null);\n }\n return this._sourceDefiner;\n }\n },\n targetPoint: function () {\n return this._resolvedTargetConnector ? this._resolvedTargetConnector.position() : this._targetPoint;\n },\n _setTarget: function (target) {\n var shapeTarget = target instanceof Shape;\n var defaultConnector = this.options.toConnector || AUTO;\n var dataItem;\n if (shapeTarget && !target.getConnector(defaultConnector)) {\n return;\n }\n if (target !== undefined) {\n this.to = target;\n }\n this._removeFromTargetConnector();\n if (target === null) {\n if (this.targetConnector) {\n this._targetPoint = (this._resolvedTargetConnector || this.targetConnector).position();\n this._clearTargetConnector();\n this._setToOptions(null, this._targetPoint);\n }\n } else if (target instanceof Connector) {\n dataItem = target.shape.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target;\n this.targetConnector.connections.push(this);\n } else if (target instanceof Point) {\n this._setToOptions(null, target);\n this._targetPoint = target;\n if (this.targetConnector) {\n this._clearTargetConnector();\n }\n } else if (shapeTarget) {\n dataItem = target.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target.getConnector(defaultConnector);\n this.targetConnector.connections.push(this);\n }\n },\n target: function (target, undoable) {\n if (isDefined(target)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, undefined, target));\n }\n this._setTarget(target);\n this.refresh();\n }\n return this.targetConnector ? this.targetConnector : this._targetPoint;\n },\n _setToOptions: function (to, toPoint) {\n this.options.to = to;\n if (toPoint) {\n this.options.toX = toPoint.x;\n this.options.toY = toPoint.y;\n } else {\n this.options.toX = null;\n this.options.toY = null;\n }\n },\n targetDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.right = null;\n this._targetDefiner = value;\n this.target(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._targetDefiner) {\n this._targetDefiner = new diagram.PathDefiner(this.targetPoint(), null, null);\n }\n return this._targetDefiner;\n }\n },\n _updateConnectors: function () {\n this._updateConnector(this.source(), 'source');\n this._updateConnector(this.target(), 'target');\n },\n _updateConnector: function (instance, name) {\n var that = this;\n var diagram = that.diagram;\n if (instance instanceof Connector && !diagram.getShapeById(instance.shape.id)) {\n var dataItem = instance.shape.dataItem;\n var connectorName = instance.options.name;\n var setNewTarget = function () {\n var shape = diagram._dataMap[dataItem.id];\n instance = shape.getConnector(connectorName);\n that[name](instance, false);\n that.updateModel();\n };\n if (diagram._dataMap[dataItem.id]) {\n setNewTarget();\n } else {\n var inactiveItem = diagram._inactiveShapeItems.getByUid(dataItem.uid);\n if (inactiveItem) {\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(setNewTarget));\n }\n }\n } else {\n that[name](instance, false);\n }\n },\n content: function (content) {\n var result = this._content(content);\n if (defined(content)) {\n this._alignContent();\n }\n return result;\n },\n _createContentVisual: function (options) {\n var visual;\n if (isFunction(options.visual)) {\n visual = options.visual.call(this, options);\n } else if (options.text) {\n visual = new TextBlock(options);\n }\n if (visual) {\n this._contentVisual = visual;\n visual._includeInBBox = false;\n this.visual.append(visual);\n }\n return visual;\n },\n _updateContentVisual: function (options) {\n if (isFunction(options.visual)) {\n this.visual.remove(this._contentVisual);\n this._createContentVisual(options);\n } else {\n this._contentVisual.redraw(options);\n }\n },\n _alignContent: function () {\n if (this._contentVisual) {\n var offset = CONNECTION_CONTENT_OFFSET;\n var points = this.allPoints();\n var endIdx = math.floor(points.length / 2);\n var startIdx = endIdx - 1;\n while (startIdx > 0 && points[startIdx].equals(points[endIdx])) {\n startIdx--;\n endIdx++;\n }\n var endPoint = points[endIdx];\n var startPoint = points[startIdx];\n var boundingBox = this._contentVisual._measure();\n var width = boundingBox.width;\n var height = boundingBox.height;\n var alignToPath = points.length % 2 === 0;\n var distance = startPoint.distanceTo(endPoint);\n if (alignToPath && points.length > 2 && distance > 0 && (startPoint.y === endPoint.y && distance < width || startPoint.x === endPoint.x && distance < height)) {\n alignToPath = false;\n offset = 0;\n }\n var point;\n if (alignToPath) {\n var angle = draw.util.deg(math.atan2(endPoint.y - startPoint.y, endPoint.x - startPoint.x));\n point = new Point((endPoint.x - startPoint.x) / 2 + startPoint.x, (endPoint.y - startPoint.y) / 2 + startPoint.y);\n if (math.abs(angle) === 90) {\n point.x += offset;\n point.y -= height / 2;\n } else if (angle % 180 === 0) {\n point.x -= width / 2;\n point.y -= height + offset;\n } else if (angle < -90 || 0 < angle && angle < 90) {\n point.y -= height;\n } else if (angle < 0 || angle > 90) {\n point.x -= width;\n point.y -= height;\n }\n } else {\n var midIdx = math.floor(points.length / 2);\n point = points[midIdx].clone();\n startPoint = points[midIdx - 1];\n endPoint = points[midIdx + 1];\n var offsetX = startPoint.x <= point.x && endPoint.x <= point.x ? offset : -boundingBox.width - offset;\n var offsetY = startPoint.y <= point.y && endPoint.y <= point.y ? offset : -boundingBox.height - offset;\n point.x += offsetX;\n point.y += offsetY;\n }\n this._contentVisual.position(point);\n }\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (this._canSelect()) {\n if (this.isSelected !== value) {\n this.isSelected = value;\n selected = [];\n deselected = [];\n if (this.isSelected) {\n this.adorner = new ConnectionEditAdorner(this, this.options.selection);\n diagram._adorn(this.adorner, true);\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n if (this.adorner) {\n diagram._adorn(this.adorner, false);\n Utils.remove(diagram._selectedItems, this);\n this.adorner = undefined;\n deselected.push(this);\n }\n }\n if (this.adorner) {\n this.adorner.refresh();\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n bounds: function (value) {\n if (value && !isString(value)) {\n this._bounds = value;\n } else {\n return this._bounds;\n }\n },\n type: function (value) {\n var options = this.options;\n if (value) {\n if (value !== options.type) {\n options.type = value;\n this._initRouter();\n this.refresh();\n }\n } else {\n return options.type;\n }\n },\n _initRouter: function () {\n var type = (this.options.type || '').toLowerCase();\n if (type == CASCADING) {\n this._router = new CascadingRouter(this);\n } else {\n this._router = new PolylineRouter(this);\n }\n },\n points: function (value) {\n if (value) {\n this.definers = [];\n for (var i = 0; i < value.length; i++) {\n var definition = value[i];\n if (definition instanceof diagram.Point) {\n this.definers.push(new diagram.PathDefiner(definition));\n } else if (definition.hasOwnProperty('x') && definition.hasOwnProperty('y')) {\n this.definers.push(new diagram.PathDefiner(new Point(definition.x, definition.y)));\n } else {\n throw 'A Connection point needs to be a Point or an object with x and y properties.';\n }\n }\n } else {\n var pts = [];\n if (isDefined(this.definers)) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n return pts;\n }\n },\n allPoints: function () {\n var pts = [this.sourcePoint()];\n if (this.definers) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n pts.push(this.targetPoint());\n return pts;\n },\n refresh: function () {\n this._resolveConnectors();\n this._refreshPath();\n this._alignContent();\n if (this.adorner) {\n this.adorner.refresh();\n }\n },\n _resolveConnectors: function () {\n var connection = this, sourcePoint, targetPoint, sourceConnectors, targetConnectors, source = connection.source(), target = connection.target();\n if (source instanceof Point) {\n sourcePoint = source;\n } else if (source instanceof Connector) {\n if (isAutoConnector(source)) {\n sourceConnectors = source.shape.connectors;\n } else {\n sourceConnectors = [source];\n }\n }\n if (target instanceof Point) {\n targetPoint = target;\n } else if (target instanceof Connector) {\n if (isAutoConnector(target)) {\n targetConnectors = target.shape.connectors;\n } else {\n targetConnectors = [target];\n }\n }\n if (sourcePoint) {\n if (targetConnectors) {\n connection._resolvedTargetConnector = closestConnector(sourcePoint, targetConnectors);\n }\n } else if (sourceConnectors) {\n if (targetPoint) {\n connection._resolvedSourceConnector = closestConnector(targetPoint, sourceConnectors);\n } else if (targetConnectors) {\n this._resolveAutoConnectors(sourceConnectors, targetConnectors);\n }\n }\n },\n _resolveAutoConnectors: function (sourceConnectors, targetConnectors) {\n var minNonConflict = MAXINT;\n var minDist = MAXINT;\n var minNonConflictSource, minNonConflictTarget;\n var sourcePoint, targetPoint;\n var minSource, minTarget;\n var sourceConnector, targetConnector;\n var sourceIdx, targetIdx;\n var dist;\n for (sourceIdx = 0; sourceIdx < sourceConnectors.length; sourceIdx++) {\n sourceConnector = sourceConnectors[sourceIdx];\n if (!isAutoConnector(sourceConnector)) {\n sourcePoint = sourceConnector.position();\n for (targetIdx = 0; targetIdx < targetConnectors.length; targetIdx++) {\n targetConnector = targetConnectors[targetIdx];\n if (!isAutoConnector(targetConnector)) {\n targetPoint = targetConnector.position();\n dist = math.round(sourcePoint.distanceTo(targetPoint));\n if (dist < minNonConflict && this.diagram && this._testRoutePoints(sourcePoint, targetPoint, sourceConnector, targetConnector)) {\n minNonConflict = dist;\n minNonConflictSource = sourceConnector;\n minNonConflictTarget = targetConnector;\n }\n if (dist < minDist) {\n minSource = sourceConnector;\n minTarget = targetConnector;\n minDist = dist;\n }\n }\n }\n }\n }\n if (minNonConflictSource) {\n minSource = minNonConflictSource;\n minTarget = minNonConflictTarget;\n }\n this._resolvedSourceConnector = minSource;\n this._resolvedTargetConnector = minTarget;\n },\n _testRoutePoints: function (sourcePoint, targetPoint, sourceConnector, targetConnector) {\n var router = this._router;\n var passRoute = true;\n if (router instanceof CascadingRouter) {\n var points = router.routePoints(sourcePoint, targetPoint, sourceConnector, targetConnector), start, end, rect, exclude;\n exclude = this._getRouteExclude(sourcePoint, targetPoint, sourceConnector.shape, targetConnector.shape);\n points.unshift(sourcePoint);\n points.push(targetPoint);\n for (var idx = 1; idx < points.length; idx++) {\n start = points[idx - 1];\n end = points[idx];\n rect = new Rect(math.min(start.x, end.x), math.min(start.y, end.y), math.abs(start.x - end.x), math.abs(start.y - end.y));\n if (rect.width > 0) {\n rect.x++;\n rect.width -= 2;\n }\n if (rect.height > 0) {\n rect.y++;\n rect.height -= 2;\n }\n if (!rect.isEmpty() && this.diagram._shapesQuadTree.hitTestRect(rect, exclude)) {\n passRoute = false;\n break;\n }\n }\n }\n return passRoute;\n },\n _getRouteExclude: function (sourcePoint, targetPoint, sourceShape, targetShape) {\n var exclude = [];\n if (this._isPointInsideShape(sourcePoint, sourceShape)) {\n exclude.push(sourceShape);\n }\n if (this._isPointInsideShape(targetPoint, targetShape)) {\n exclude.push(targetShape);\n }\n return exclude;\n },\n _isPointInsideShape: function (point, shape) {\n var bounds = shape.bounds(), rotatedPoint, angle = shape.rotate().angle, pointX, pointY, boundsX = bounds.x, boundsY = bounds.y;\n rotatedPoint = point.clone().rotate(bounds.center(), angle);\n pointX = rotatedPoint.x;\n pointY = rotatedPoint.y;\n return pointX > boundsX && pointX < boundsX + bounds.width && pointY > boundsY && pointY < boundsY + bounds.height;\n },\n redraw: function (options) {\n if (options) {\n this.options = deepExtend({}, this.options, options);\n var points = this.options.points;\n if (defined(points) && points.length > 0) {\n this.points(points);\n this._refreshPath();\n }\n if (options && options.content || options.text) {\n this.content(options.content);\n }\n this.path.redraw({\n fill: options.fill,\n stroke: options.stroke,\n startCap: options.startCap,\n endCap: options.endCap\n });\n }\n },\n clone: function () {\n var json = this.serialize();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Connection(this.from, this.to, json.options);\n },\n serialize: function () {\n var from = this.from.toJSON ? this.from.toJSON : this.from.toString(), to = this.to.toJSON ? this.to.toJSON : this.to.toString();\n var json = deepExtend({}, {\n options: this.options,\n from: from,\n to: to\n });\n if (defined(this.dataItem)) {\n json.dataItem = this.dataItem.toString();\n }\n json.options.points = this.points();\n return json;\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var p = new Point(value.x, value.y), from = this.sourcePoint(), to = this.targetPoint();\n if (value.isEmpty && !value.isEmpty() && value.contains(from) && value.contains(to)) {\n return this;\n }\n if (this._router.hitTest(p)) {\n return this;\n }\n }\n },\n _hover: function (value) {\n var color = (this.options.stroke || {}).color;\n if (value && isDefined(this.options.hover.stroke.color)) {\n color = this.options.hover.stroke.color;\n }\n this.path.redraw({ stroke: { color: color } });\n },\n _refreshPath: function () {\n if (!defined(this.path)) {\n return;\n }\n this._drawPath();\n this.bounds(this._router.getBounds());\n },\n _drawPath: function () {\n if (this._router) {\n this._router.route();\n }\n var source = this.sourcePoint();\n var target = this.targetPoint();\n var points = this.points();\n this.path.redraw({ points: [source].concat(points, [target]) });\n },\n _clearSourceConnector: function () {\n this.sourceConnector = undefined;\n this._resolvedSourceConnector = undefined;\n },\n _clearTargetConnector: function () {\n this.targetConnector = undefined;\n this._resolvedTargetConnector = undefined;\n },\n _removeFromSourceConnector: function () {\n if (this.sourceConnector) {\n Utils.remove(this.sourceConnector.connections, this);\n }\n },\n _removeFromTargetConnector: function () {\n if (this.targetConnector) {\n Utils.remove(this.targetConnector.connections, this);\n }\n },\n toJSON: function () {\n var connection = this;\n var from, to, point;\n if (connection.from && connection.from.toJSON) {\n from = connection.from.toJSON();\n } else {\n point = connection._sourcePoint;\n from = {\n x: point.x,\n y: point.y\n };\n }\n if (connection.to && connection.to.toJSON) {\n to = connection.to.toJSON();\n } else {\n point = connection._targetPoint;\n to = {\n x: point.x,\n y: point.y\n };\n }\n return {\n from: from,\n to: to\n };\n }\n });\n var Diagram = Widget.extend({\n init: function (element, userOptions) {\n var that = this;\n kendo.destroy(element);\n Widget.fn.init.call(that, element, userOptions);\n that._initTheme();\n that._initElements();\n that._extendLayoutOptions(that.options);\n that._initDefaults(userOptions);\n that._interactionDefaults();\n that._initCanvas();\n that.mainLayer = new Group({ id: 'main-layer' });\n that.canvas.append(that.mainLayer);\n that._shapesQuadTree = new ShapesQuadTree(that);\n that._pan = new Point();\n that._adorners = [];\n that.adornerLayer = new Group({ id: 'adorner-layer' });\n that.canvas.append(that.adornerLayer);\n that._createHandlers();\n that._initialize();\n that._resizingAdorner = new ResizingAdorner(that, { editable: that.options.editable });\n that._connectorsAdorner = new ConnectorsAdorner(that);\n that._adorn(that._resizingAdorner, true);\n that._adorn(that._connectorsAdorner, true);\n that.selector = new Selector(that);\n that._clipboard = [];\n that.pauseMouseHandlers = false;\n that._fetchFreshData();\n that._createGlobalToolBar();\n that._createOptionElements();\n that.zoom(that.options.zoom);\n that.canvas.draw();\n },\n options: {\n name: 'Diagram',\n theme: 'default',\n layout: '',\n zoomRate: 0.1,\n zoom: 1,\n zoomMin: 0,\n zoomMax: 2,\n dataSource: {},\n draggable: true,\n template: '',\n autoBind: true,\n editable: {\n rotate: {},\n resize: {},\n text: true,\n tools: [],\n drag: {\n snap: {\n size: 10,\n angle: 10\n }\n },\n remove: true\n },\n pannable: {},\n selectable: { key: 'none' },\n tooltip: {\n enabled: true,\n format: '{0}'\n },\n copy: {\n enabled: true,\n offsetX: 20,\n offsetY: 20\n },\n shapeDefaults: diagram.shapeDefaults({ undoable: true }),\n connectionDefaults: {\n editable: { tools: [] },\n type: CASCADING\n },\n shapes: [],\n connections: []\n },\n events: [\n ZOOM_END,\n ZOOM_START,\n PAN,\n SELECT,\n ITEMROTATE,\n ITEMBOUNDSCHANGE,\n CHANGE,\n CLICK,\n MOUSE_ENTER,\n MOUSE_LEAVE,\n 'toolBarClick',\n 'save',\n 'cancel',\n 'edit',\n 'remove',\n 'add',\n 'dataBound',\n DRAG_START,\n DRAG,\n DRAG_END\n ],\n items: function () {\n return $();\n },\n _createGlobalToolBar: function () {\n var editable = this.options.editable;\n if (editable) {\n var tools = editable.tools;\n if (this._isEditable && tools !== false && (!tools || tools.length === 0)) {\n tools = [\n 'createShape',\n 'undo',\n 'redo',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n }\n if (tools && tools.length) {\n this.toolBar = new DiagramToolBar(this, {\n tools: tools || {},\n click: proxy(this._toolBarClick, this),\n modal: false\n });\n this.toolBar.element.css({ textAlign: 'left' });\n this.element.prepend(this.toolBar.element);\n this._resize();\n }\n }\n },\n createShape: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var dataSource = this.dataSource;\n var view = dataSource.view() || [];\n var index = view.length;\n var model = createModel(dataSource, {});\n var shape = this._createShape(model, {});\n if (!this.trigger('add', { shape: shape })) {\n dataSource.insert(index, model);\n var inactiveItem = this._inactiveShapeItems.getByUid(model.uid);\n inactiveItem.element = shape;\n this.edit(shape);\n }\n }\n },\n _createShape: function (dataItem, options) {\n options = deepExtend({}, this.options.shapeDefaults, options);\n options.dataItem = dataItem;\n var shape = new Shape(options, this);\n return shape;\n },\n createConnection: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var connectionsDataSource = this.connectionsDataSource;\n var view = connectionsDataSource.view() || [];\n var index = view.length;\n var model = createModel(connectionsDataSource, {});\n var connection = this._createConnection(model);\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[model.uid] = connection;\n connectionsDataSource.insert(index, model);\n this.addConnection(connection, false);\n this.edit(connection);\n }\n }\n },\n _createConnection: function (dataItem, source, target) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(source || new Point(), target || new Point(), options);\n return connection;\n },\n editModel: function (dataItem, editorType) {\n this.cancelEdit();\n var editors, template;\n var editable = this.options.editable;\n if (editorType == 'shape') {\n editors = editable.shapeEditors;\n template = editable.shapeTemplate;\n } else if (editorType == 'connection') {\n var connectionSelectorHandler = proxy(connectionSelector, this);\n editors = deepExtend({}, {\n from: connectionSelectorHandler,\n to: connectionSelectorHandler\n }, editable.connectionEditors);\n template = editable.connectionTemplate;\n } else {\n return;\n }\n this.editor = new PopupEditor(this.element, {\n update: proxy(this._update, this),\n cancel: proxy(this._cancel, this),\n model: dataItem,\n type: editorType,\n target: this,\n editors: editors,\n template: template\n });\n this.trigger('edit', this._editArgs());\n },\n edit: function (item) {\n if (item.dataItem) {\n var editorType = item instanceof Shape ? 'shape' : 'connection';\n this.editModel(item.dataItem, editorType);\n }\n },\n cancelEdit: function () {\n if (this.editor) {\n this._getEditDataSource().cancelChanges(this.editor.model);\n this._destroyEditor();\n }\n },\n saveEdit: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n }\n },\n _update: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n this._destroyEditor();\n }\n },\n _cancel: function () {\n if (this.editor && !this.trigger('cancel', this._editArgs())) {\n var model = this.editor.model;\n this._getEditDataSource().cancelChanges(model);\n var element = this._connectionsDataMap[model.uid] || this._dataMap[model.id];\n if (element) {\n element._setOptionsFromModel(model);\n }\n this._destroyEditor();\n }\n },\n _getEditDataSource: function () {\n return this.editor.options.type === 'shape' ? this.dataSource : this.connectionsDataSource;\n },\n _editArgs: function () {\n var result = { container: this.editor.wrapper };\n result[this.editor.options.type] = this.editor.model;\n return result;\n },\n _destroyEditor: function () {\n if (this.editor) {\n this.editor.close();\n this.editor = null;\n }\n },\n _initElements: function () {\n this.wrapper = this.element.empty().css('position', 'relative').attr('tabindex', 0).addClass('k-widget k-diagram');\n this.scrollable = $('
        ').appendTo(this.element);\n },\n _initDefaults: function (userOptions) {\n var options = this.options;\n var editable = options.editable;\n var shapeDefaults = options.shapeDefaults;\n var connectionDefaults = options.connectionDefaults;\n var userShapeDefaults = (userOptions || {}).shapeDefaults;\n if (editable === false) {\n shapeDefaults.editable = false;\n connectionDefaults.editable = false;\n } else {\n copyDefaultOptions(editable, shapeDefaults.editable, [\n 'drag',\n 'remove',\n 'connect'\n ]);\n copyDefaultOptions(editable, connectionDefaults.editable, [\n 'drag',\n 'remove'\n ]);\n }\n if (userShapeDefaults && userShapeDefaults.connectors) {\n options.shapeDefaults.connectors = userShapeDefaults.connectors;\n }\n },\n _interactionDefaults: function () {\n var options = this.options;\n var selectable = options.selectable;\n var pannable = options.pannable;\n var mobile = kendo.support.mobileOS;\n if (selectable && !defined(selectable.multiple)) {\n options.selectable = deepExtend({ multiple: mobile ? false : true }, options.selectable);\n }\n if (pannable && !defined(pannable.key)) {\n options.pannable = deepExtend({ key: mobile ? 'none' : 'ctrl' }, options.pannable);\n }\n },\n _initCanvas: function () {\n var canvasContainer = $('
        ').appendTo(this.scrollable)[0];\n var viewPort = this.viewport();\n this.canvas = new Canvas(canvasContainer, {\n width: viewPort.width || DEFAULT_CANVAS_WIDTH,\n height: viewPort.height || DEFAULT_CANVAS_HEIGHT\n });\n },\n _createHandlers: function () {\n var that = this;\n var element = that.element;\n element.on(MOUSEWHEEL_NS, proxy(that._wheel, that)).on('keydown' + NS, proxy(that._keydown, that));\n that._userEvents = new kendo.UserEvents(this.scrollable, {\n multiTouch: true,\n fastTap: true,\n tap: proxy(that._tap, that),\n start: proxy(that._dragStart, that),\n move: proxy(that._drag, that),\n end: proxy(that._dragEnd, that),\n gesturestart: proxy(that._gestureStart, that),\n gesturechange: proxy(that._gestureChange, that),\n gestureend: proxy(that._gestureEnd, that)\n });\n that.toolService = new ToolService(that);\n this.scrollable.on('mouseover' + NS, proxy(that._mouseover, that)).on('mouseout' + NS, proxy(that._mouseout, that)).on('mousemove' + NS, proxy(that._mouseMove, that)).on('mousedown' + NS, proxy(that._mouseDown, that)).on('mouseup' + NS, proxy(that._mouseUp, that));\n this._syncHandler = proxy(that._syncChanges, that);\n that._resizeHandler = proxy(that.resize, that, false);\n kendo.onResize(that._resizeHandler);\n this.bind(ZOOM_START, proxy(that._destroyToolBar, that));\n this.bind(PAN, proxy(that._destroyToolBar, that));\n },\n _dragStart: function (e) {\n this._pauseMouseHandlers = true;\n var point = this._eventPositions(e, true);\n var event = e.event;\n if (this.toolService.start(point, this._meta(event))) {\n this._destroyToolBar();\n event.preventDefault();\n }\n },\n _drag: function (e) {\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.move(p, this._meta(event))) {\n event.preventDefault();\n }\n },\n _dragEnd: function (e) {\n this._pauseMouseHandlers = false;\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.end(p, this._meta(event))) {\n this._createToolBar();\n event.preventDefault();\n }\n },\n _mouseMove: function (e) {\n if (!this._pauseMouseHandlers) {\n var p = this._eventPositions(e);\n this.toolService._updateHoveredItem(p);\n this.toolService._updateCursor(p);\n }\n },\n _mouseDown: function () {\n this._pauseMouseHandlers = true;\n },\n _mouseUp: function () {\n this._pauseMouseHandlers = false;\n },\n _tap: function (e) {\n var toolService = this.toolService;\n var selectable = this.options.selectable;\n var point = this._eventPositions(e);\n var focused = this.focus();\n toolService._updateHoveredItem(point);\n if (toolService.hoveredItem) {\n var item = toolService.hoveredItem;\n this.trigger('click', {\n item: item,\n point: point\n });\n if (selectable && item.options.selectable !== false) {\n var multiple = selectable.multiple !== false;\n var ctrlPressed = kendo.support.mobileOS || this._meta(e.event).ctrlKey;\n if (item.isSelected) {\n if (ctrlPressed) {\n this._destroyToolBar();\n item.select(false);\n } else {\n this._createToolBar(focused);\n }\n } else {\n this._destroyToolBar();\n this.select(item, { addToSelection: multiple && ctrlPressed });\n this._createToolBar(focused);\n }\n }\n } else if (selectable) {\n this._destroyToolBar();\n this.deselect();\n }\n },\n _keydown: function (e) {\n if (this.toolService.keyDown(e.keyCode, this._meta(e))) {\n e.preventDefault();\n }\n },\n _wheel: function (e) {\n var delta = mwDelta(e), p = this._eventPositions(e), meta = deepExtend(this._meta(e), { delta: delta });\n if (this.toolService.wheel(p, meta)) {\n e.preventDefault();\n }\n },\n _meta: function (e) {\n return {\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n shiftKey: e.shiftKey,\n type: e.type\n };\n },\n _eventPositions: function (e, start) {\n var point;\n if (e.touch) {\n var field = start ? 'startLocation' : 'location';\n point = new Point(e.x[field], e.y[field]);\n } else {\n var event = e.originalEvent;\n point = new Point(event.pageX, event.pageY);\n }\n return this.documentToModel(point);\n },\n _gestureStart: function (e) {\n this._destroyToolBar();\n this.scroller.disable();\n var initialCenter = this.documentToModel(new Point(e.center.x, e.center.y));\n var eventArgs = {\n point: initialCenter,\n zoom: this.zoom()\n };\n if (this.trigger(ZOOM_START, eventArgs)) {\n return;\n }\n this._gesture = e;\n this._initialCenter = initialCenter;\n },\n _gestureChange: function (e) {\n var previousGesture = this._gesture;\n var initialCenter = this._initialCenter;\n var center = this.documentToView(new Point(e.center.x, e.center.y));\n var scaleDelta = e.distance / previousGesture.distance;\n var zoom = this._zoom;\n var updateZoom = false;\n if (math.abs(scaleDelta - 1) >= MOBILE_ZOOM_RATE) {\n this._zoom = zoom = this._getValidZoom(zoom * scaleDelta);\n this.options.zoom = zoom;\n this._gesture = e;\n updateZoom = true;\n }\n var zoomedPoint = initialCenter.times(zoom);\n var pan = center.minus(zoomedPoint);\n if (updateZoom || this._pan.distanceTo(pan) >= MOBILE_PAN_DISTANCE) {\n this._panTransform(pan);\n this._updateAdorners();\n }\n e.preventDefault();\n },\n _gestureEnd: function () {\n if (this.options.pannable !== false) {\n this.scroller.enable();\n }\n this.trigger(ZOOM_END, {\n point: this._initialCenter,\n zoom: this.zoom()\n });\n },\n _resize: function () {\n var viewport = this.viewport();\n if (this.canvas) {\n this.canvas.size(viewport);\n }\n if (this.scrollable && this.toolBar) {\n this.scrollable.height(viewport.height);\n }\n },\n _mouseover: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(true, node.srcElement);\n }\n },\n _mouseout: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(false, node.srcElement);\n }\n },\n _initTheme: function () {\n var that = this;\n var themeName = ((that.options || {}).theme || '').toLowerCase();\n var themes = dataviz.ui.themes || {};\n var themeOptions;\n if (SASS_THEMES.indexOf(themeName) != -1) {\n themeOptions = dataviz.autoTheme().diagram;\n } else {\n themeOptions = (themes[themeName] || {}).diagram;\n }\n that.options = deepExtend({}, themeOptions, that.options);\n if (that.options.editable === true) {\n deepExtend(that.options, { editable: (themeOptions || {}).editable });\n }\n },\n _createOptionElements: function () {\n var options = this.options;\n var shapesLength = options.shapes.length;\n if (shapesLength) {\n this._createShapes();\n }\n if (options.connections.length) {\n this._createConnections();\n }\n if (shapesLength && options.layout) {\n this.layout(options.layout);\n }\n },\n _createShapes: function () {\n var that = this, options = that.options, shapes = options.shapes, shape, i;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n that.addShape(shape);\n }\n },\n _createConnections: function () {\n var diagram = this, options = diagram.options, defaults = options.connectionDefaults, connections = options.connections, conn, source, target, i;\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n source = diagram._findConnectionTarget(conn.from);\n target = diagram._findConnectionTarget(conn.to);\n diagram.connect(source, target, deepExtend({}, defaults, conn));\n }\n },\n _findConnectionTarget: function (options) {\n options = options || {};\n var diagram = this;\n var shapeId = isString(options) ? options : options.shapeId || options.id;\n var target;\n if (shapeId) {\n target = diagram.getShapeById(shapeId);\n if (options.connector) {\n target = target.getConnector(options.connector);\n }\n } else {\n target = new Point(options.x || 0, options.y || 0);\n }\n return target;\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (this._userEvents) {\n this._userEvents.destroy();\n }\n kendo.unbindResize(that._resizeHandler);\n that.clear();\n that.element.off(NS);\n that.scroller.wrapper.off(NS);\n that.canvas.destroy(true);\n that.canvas = undefined;\n that._destroyEditor();\n that.destroyScroller();\n that._destroyGlobalToolBar();\n that._destroyToolBar();\n },\n destroyScroller: function () {\n var scroller = this.scroller;\n if (!scroller) {\n return;\n }\n scroller.destroy();\n scroller.element.remove();\n this.scroller = null;\n },\n save: function () {\n var json = {\n shapes: [],\n connections: []\n };\n var i, connection, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n if (shape.options.serializable) {\n json.shapes.push(shape.options);\n }\n }\n for (i = 0; i < this.connections.length; i++) {\n connection = this.connections[i];\n json.connections.push(deepExtend({}, connection.options, connection.toJSON()));\n }\n return json;\n },\n focus: function () {\n if (!this.element.is(kendo._activeElement())) {\n var element = this.element, scrollContainer = element[0], containers = [], offsets = [], documentElement = document.documentElement, i;\n do {\n scrollContainer = scrollContainer.parentNode;\n if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n containers.push(scrollContainer);\n offsets.push(scrollContainer.scrollTop);\n }\n } while (scrollContainer != documentElement);\n element.focus();\n for (i = 0; i < containers.length; i++) {\n containers[i].scrollTop = offsets[i];\n }\n return true;\n }\n },\n load: function (options) {\n this.clear();\n this.setOptions(options);\n this._createShapes();\n this._createConnections();\n },\n setOptions: function (options) {\n deepExtend(this.options, options);\n },\n clear: function () {\n var that = this;\n that.select(false);\n that.mainLayer.clear();\n that._shapesQuadTree.clear();\n that._initialize();\n },\n connect: function (source, target, options) {\n var connection;\n if (this.connectionsDataSource && this._isEditable) {\n var dataItem = this.connectionsDataSource.add({});\n connection = this._connectionsDataMap[dataItem.uid];\n connection.source(source);\n connection.target(target);\n connection.redraw(options);\n connection.updateModel();\n } else {\n connection = new Connection(source, target, deepExtend({}, this.options.connectionDefaults, options));\n this.addConnection(connection);\n }\n return connection;\n },\n connected: function (source, target) {\n for (var i = 0; i < this.connections.length; i++) {\n var c = this.connections[i];\n if (c.from == source && c.to == target) {\n return true;\n }\n }\n return false;\n },\n addConnection: function (connection, undoable) {\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddConnectionUnit(connection, this), false);\n }\n connection.diagram = this;\n connection._setOptionsFromModel();\n connection.refresh();\n this.mainLayer.append(connection.visual);\n this.connections.push(connection);\n this.trigger(CHANGE, {\n added: [connection],\n removed: []\n });\n return connection;\n },\n _addConnection: function (connection, undoable) {\n var connectionsDataSource = this.connectionsDataSource;\n var dataItem;\n if (connectionsDataSource && this._isEditable) {\n dataItem = createModel(connectionsDataSource, cloneDataItem(connection.dataItem));\n connection.dataItem = dataItem;\n connection.updateModel();\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[dataItem.uid] = connection;\n connectionsDataSource.add(dataItem);\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n } else if (!this.trigger('add', { connection: connection })) {\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n },\n addShape: function (item, undoable) {\n var shape, shapeDefaults = this.options.shapeDefaults;\n if (item instanceof Shape) {\n shape = item;\n } else if (!(item instanceof kendo.Class)) {\n shapeDefaults = deepExtend({}, shapeDefaults, item || {});\n shape = new Shape(shapeDefaults, this);\n } else {\n return;\n }\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddShapeUnit(shape, this), false);\n }\n this.shapes.push(shape);\n if (shape.diagram !== this) {\n this._shapesQuadTree.insert(shape);\n shape.diagram = this;\n }\n this.mainLayer.append(shape.visual);\n this.trigger(CHANGE, {\n added: [shape],\n removed: []\n });\n return shape;\n },\n _addShape: function (shape, undoable) {\n var that = this;\n var dataSource = that.dataSource;\n var dataItem;\n if (dataSource && this._isEditable) {\n dataItem = createModel(dataSource, cloneDataItem(shape.dataItem));\n shape.dataItem = dataItem;\n shape.updateModel();\n if (!this.trigger('add', { shape: shape })) {\n this.dataSource.add(dataItem);\n var inactiveItem = this._inactiveShapeItems.getByUid(dataItem.uid);\n inactiveItem.element = shape;\n inactiveItem.undoable = undoable;\n return shape;\n }\n } else if (!this.trigger('add', { shape: shape })) {\n return this.addShape(shape, undoable);\n }\n },\n remove: function (items, undoable) {\n items = isArray(items) ? items.slice(0) : [items];\n var elements = splitDiagramElements(items);\n var shapes = elements.shapes;\n var connections = elements.connections;\n var i;\n if (!defined(undoable)) {\n undoable = true;\n }\n if (undoable) {\n this.undoRedoService.begin();\n }\n this._suspendModelRefresh();\n for (i = shapes.length - 1; i >= 0; i--) {\n this._removeItem(shapes[i], undoable, connections);\n }\n for (i = connections.length - 1; i >= 0; i--) {\n this._removeItem(connections[i], undoable);\n }\n this._resumeModelRefresh();\n if (undoable) {\n this.undoRedoService.commit(false);\n }\n this.trigger(CHANGE, {\n added: [],\n removed: items\n });\n },\n _removeShapeDataItem: function (item) {\n if (this._isEditable) {\n this.dataSource.remove(item.dataItem);\n delete this._dataMap[item.dataItem.id];\n }\n },\n _removeConnectionDataItem: function (item) {\n if (this._isEditable) {\n this.connectionsDataSource.remove(item.dataItem);\n delete this._connectionsDataMap[item.dataItem.uid];\n }\n },\n _triggerRemove: function (items) {\n var toRemove = [];\n var item, args, editable;\n for (var idx = 0; idx < items.length; idx++) {\n item = items[idx];\n editable = item.options.editable;\n if (item instanceof Shape) {\n args = { shape: item };\n } else {\n args = { connection: item };\n }\n if (editable && editable.remove !== false && !this.trigger('remove', args)) {\n toRemove.push(item);\n }\n }\n return toRemove;\n },\n undo: function () {\n this.undoRedoService.undo();\n },\n redo: function () {\n this.undoRedoService.redo();\n },\n select: function (item, options) {\n if (isDefined(item)) {\n options = deepExtend({ addToSelection: false }, options);\n var addToSelection = options.addToSelection, items = [], selected = [], i, element;\n if (!addToSelection) {\n this.deselect();\n }\n this._internalSelection = true;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items = [item];\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(true)) {\n selected.push(element);\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n } else {\n return this._selectedItems;\n }\n },\n selectAll: function () {\n this.select(this.shapes.concat(this.connections));\n },\n selectArea: function (rect) {\n var i, items, item;\n this._internalSelection = true;\n var selected = [];\n if (rect instanceof Rect) {\n items = this.shapes.concat(this.connections);\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if ((!rect || item._hitTest(rect)) && item.options.enable) {\n if (item.select(true)) {\n selected.push(item);\n }\n }\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n },\n deselect: function (item) {\n this._internalSelection = true;\n var deselected = [], items = [], element, i;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items.push(item);\n } else if (!isDefined(item)) {\n items = this._selectedItems.slice(0);\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(false)) {\n deselected.push(element);\n }\n }\n this._selectionChanged([], deselected);\n this._internalSelection = false;\n },\n toFront: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToFrontUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toFront(result.visuals);\n this._fixOrdering(result, true);\n }\n },\n toBack: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToBackUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toBack(result.visuals);\n this._fixOrdering(result, false);\n }\n },\n bringIntoView: function (item, options) {\n var viewport = this.viewport();\n var aligner = new diagram.RectAlign(viewport);\n var current, rect, original, newPan;\n if (viewport.width === 0 || viewport.height === 0) {\n return;\n }\n options = deepExtend({\n animate: false,\n align: 'center middle'\n }, options);\n if (options.align == 'none') {\n options.align = 'center middle';\n }\n if (item instanceof DiagramElement) {\n rect = item.bounds(TRANSFORMED);\n } else if (isArray(item)) {\n rect = this.boundingBox(item);\n } else if (item instanceof Rect) {\n rect = item.clone();\n }\n original = rect.clone();\n rect.zoom(this._zoom);\n if (rect.width > viewport.width || rect.height > viewport.height) {\n this._zoom = this._getValidZoom(math.min(viewport.width / original.width, viewport.height / original.height));\n rect = original.clone().zoom(this._zoom);\n }\n this._zoomMainLayer();\n current = rect.clone();\n aligner.align(rect, options.align);\n newPan = rect.topLeft().minus(current.topLeft());\n this.pan(newPan.times(-1), options.animate);\n },\n alignShapes: function (direction) {\n if (isUndefined(direction)) {\n direction = 'Left';\n }\n var items = this.select(), val, item, i;\n if (items.length === 0) {\n return;\n }\n switch (direction.toLowerCase()) {\n case 'left':\n case 'top':\n val = MAX_VALUE;\n break;\n case 'right':\n case 'bottom':\n val = MIN_VALUE;\n break;\n }\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n switch (direction.toLowerCase()) {\n case 'left':\n val = math.min(val, item.options.x);\n break;\n case 'top':\n val = math.min(val, item.options.y);\n break;\n case 'right':\n val = math.max(val, item.options.x);\n break;\n case 'bottom':\n val = math.max(val, item.options.y);\n break;\n }\n }\n }\n var undoStates = [];\n var shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n shapes.push(item);\n undoStates.push(item.bounds());\n switch (direction.toLowerCase()) {\n case 'left':\n case 'right':\n item.position(new Point(val, item.options.y));\n break;\n case 'top':\n case 'bottom':\n item.position(new Point(item.options.x, val));\n break;\n }\n }\n }\n var unit = new diagram.TransformUnit(shapes, undoStates);\n this.undoRedoService.add(unit, false);\n },\n zoom: function (zoom, options) {\n if (zoom) {\n var staticPoint = options ? options.point : new diagram.Point(0, 0);\n zoom = this._zoom = this._getValidZoom(zoom);\n if (!isUndefined(staticPoint)) {\n staticPoint = new diagram.Point(math.round(staticPoint.x), math.round(staticPoint.y));\n var zoomedPoint = staticPoint.times(zoom);\n var viewportVector = this.modelToView(staticPoint);\n var raw = viewportVector.minus(zoomedPoint);\n this._storePan(new diagram.Point(math.round(raw.x), math.round(raw.y)));\n }\n if (options) {\n options.zoom = zoom;\n }\n this._panTransform();\n this.canvas.surface.hideTooltip();\n this._updateAdorners();\n }\n return this._zoom;\n },\n _getPan: function (pan) {\n var canvas = this.canvas;\n if (!canvas.translate) {\n pan = pan.plus(this._pan);\n }\n return pan;\n },\n pan: function (pan, animate) {\n if (pan instanceof Point) {\n var that = this;\n var scroller = that.scroller;\n pan = that._getPan(pan);\n pan = pan.times(-1);\n if (animate) {\n scroller.animatedScrollTo(pan.x, pan.y, function () {\n that._updateAdorners();\n });\n } else {\n scroller.scrollTo(pan.x, pan.y);\n that._updateAdorners();\n }\n } else {\n return this._pan.times(-1);\n }\n },\n viewport: function () {\n var element = this.element;\n var width = element.width();\n var height = element.height();\n if (this.toolBar) {\n height -= outerHeight(this.toolBar.element);\n }\n return new Rect(0, 0, width, height);\n },\n copy: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 1;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n }\n },\n cut: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 0;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n this.remove(this._clipboard, true);\n }\n },\n paste: function () {\n if (this._clipboard.length > 0) {\n var item, copied, i;\n var mapping = {};\n var elements = splitDiagramElements(this._clipboard);\n var connections = elements.connections;\n var shapes = elements.shapes;\n var offset = {\n x: this._copyOffset * this.options.copy.offsetX,\n y: this._copyOffset * this.options.copy.offsetY\n };\n this.deselect();\n for (i = 0; i < shapes.length; i++) {\n item = shapes[i];\n copied = item.clone();\n mapping[item.id] = copied;\n copied.position(new Point(item.options.x + offset.x, item.options.y + offset.y));\n copied.diagram = this;\n copied = this._addShape(copied);\n if (copied) {\n copied.select();\n }\n }\n for (i = 0; i < connections.length; i++) {\n item = connections[i];\n copied = this._addConnection(item.clone());\n if (copied) {\n this._updateCopiedConnection(copied, item, 'source', mapping, offset);\n this._updateCopiedConnection(copied, item, 'target', mapping, offset);\n copied.select(true);\n copied.updateModel();\n }\n }\n this._syncChanges();\n this._copyOffset += 1;\n }\n },\n _updateCopiedConnection: function (connection, sourceConnection, connectorName, mapping, offset) {\n var onActivate, inactiveItem, targetShape;\n var target = sourceConnection[connectorName]();\n var diagram = this;\n if (target instanceof Connector && mapping[target.shape.id]) {\n targetShape = mapping[target.shape.id];\n if (diagram.getShapeById(targetShape.id)) {\n connection[connectorName](targetShape.getConnector(target.options.name));\n } else {\n inactiveItem = diagram._inactiveShapeItems.getByUid(targetShape.dataItem.uid);\n if (inactiveItem) {\n onActivate = function (item) {\n targetShape = diagram._dataMap[item.id];\n connection[connectorName](targetShape.getConnector(target.options.name));\n connection.updateModel();\n };\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(onActivate));\n }\n }\n } else {\n connection[connectorName](new Point(sourceConnection[connectorName + 'Point']().x + offset.x, sourceConnection[connectorName + 'Point']().y + offset.y));\n }\n },\n boundingBox: function (items, origin) {\n var rect = Rect.empty(), temp, di = isDefined(items) ? this._getDiagramItems(items) : { shapes: this.shapes };\n if (di.shapes.length > 0) {\n var item = di.shapes[0];\n rect = item.bounds(ROTATED);\n for (var i = 1; i < di.shapes.length; i++) {\n item = di.shapes[i];\n temp = item.bounds(ROTATED);\n if (origin === true) {\n temp.x -= item._rotationOffset.x;\n temp.y -= item._rotationOffset.y;\n }\n rect = rect.union(temp);\n }\n }\n return rect;\n },\n _containerOffset: function () {\n var containerOffset = this.element.offset();\n if (this.toolBar) {\n containerOffset.top += outerHeight(this.toolBar.element);\n }\n return containerOffset;\n },\n documentToView: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x - containerOffset.left, point.y - containerOffset.top);\n },\n viewToDocument: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x + containerOffset.left, point.y + containerOffset.top);\n },\n viewToModel: function (point) {\n return this._transformWithMatrix(point, this._matrixInvert);\n },\n modelToView: function (point) {\n return this._transformWithMatrix(point, this._matrix);\n },\n modelToLayer: function (point) {\n return this._transformWithMatrix(point, this._layerMatrix);\n },\n layerToModel: function (point) {\n return this._transformWithMatrix(point, this._layerMatrixInvert);\n },\n documentToModel: function (point) {\n var viewPoint = this.documentToView(point);\n if (!this.canvas.translate) {\n viewPoint.x = viewPoint.x + this.scroller.scrollLeft;\n viewPoint.y = viewPoint.y + this.scroller.scrollTop;\n }\n return this.viewToModel(viewPoint);\n },\n modelToDocument: function (point) {\n return this.viewToDocument(this.modelToView(point));\n },\n _transformWithMatrix: function (point, matrix) {\n var result = point;\n if (point instanceof Point) {\n if (matrix) {\n result = matrix.apply(point);\n }\n } else {\n var tl = this._transformWithMatrix(point.topLeft(), matrix), br = this._transformWithMatrix(point.bottomRight(), matrix);\n result = Rect.fromPoints(tl, br);\n }\n return result;\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setConnectionsDataSource: function (dataSource) {\n this.options.connectionsDataSource = dataSource;\n this._connectionDataSource();\n if (this.options.autoBind) {\n this.connectionsDataSource.fetch();\n }\n },\n layout: function (options) {\n this._layouting = true;\n var type;\n if (isUndefined(options)) {\n options = this.options.layout;\n }\n if (isUndefined(options) || isUndefined(options.type)) {\n type = 'Tree';\n } else {\n type = options.type;\n }\n var l;\n switch (type.toLowerCase()) {\n case 'tree':\n l = new diagram.TreeLayout(this);\n break;\n case 'layered':\n l = new diagram.LayeredLayout(this);\n break;\n case 'forcedirected':\n case 'force':\n case 'spring':\n case 'springembedder':\n l = new diagram.SpringLayout(this);\n break;\n default:\n throw 'Layout algorithm \\'' + type + '\\' is not supported.';\n }\n var initialState = new diagram.LayoutState(this);\n var finalState = l.layout(options);\n if (finalState) {\n var unit = new diagram.LayoutUndoUnit(initialState, finalState, options ? options.animate : null);\n this.undoRedoService.add(unit);\n }\n this._layouting = false;\n this._redrawConnections();\n },\n getShapeById: function (id) {\n var found;\n found = Utils.first(this.shapes, function (s) {\n return s.visual.id === id;\n });\n if (found) {\n return found;\n }\n found = Utils.first(this.connections, function (c) {\n return c.visual.id === id;\n });\n return found;\n },\n getShapeByModelId: function (id) {\n var shape;\n if (this._isEditable) {\n shape = this._dataMap[id];\n } else {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).id === id;\n });\n }\n return shape;\n },\n getShapeByModelUid: function (uid) {\n var shape;\n if (this._isEditable) {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).uid === uid;\n });\n } else {\n shape = this._dataMap[uid];\n }\n return shape;\n },\n getConnectionByModelId: function (id) {\n var connection;\n if (this.connectionsDataSource) {\n connection = Utils.first(this.connections, function (connection) {\n return (connection.dataItem || {}).id === id;\n });\n }\n return connection;\n },\n getConnectionByModelUid: function (uid) {\n var connection;\n if (this.connectionsDataSource) {\n connection = this._connectionsDataMap[uid];\n }\n return connection;\n },\n _extendLayoutOptions: function (options) {\n if (options.layout) {\n options.layout = deepExtend({}, diagram.LayoutBase.fn.defaultOptions || {}, options.layout);\n }\n },\n _selectionChanged: function (selected, deselected) {\n if (selected.length || deselected.length) {\n this.trigger(SELECT, {\n selected: selected,\n deselected: deselected\n });\n }\n },\n _getValidZoom: function (zoom) {\n return math.min(math.max(zoom, this.options.zoomMin), this.options.zoomMax);\n },\n _panTransform: function (pos) {\n var diagram = this, pan = pos || diagram._pan;\n if (diagram.canvas.translate) {\n diagram.scroller.scrollTo(pan.x, pan.y);\n diagram._zoomMainLayer();\n } else {\n diagram._storePan(pan);\n diagram._transformMainLayer();\n }\n },\n _finishPan: function () {\n this.trigger(PAN, {\n total: this._pan,\n delta: Number.NaN\n });\n },\n _storePan: function (pan) {\n this._pan = pan;\n this._storeViewMatrix();\n },\n _zoomMainLayer: function () {\n var zoom = this._zoom;\n var transform = new CompositeTransform(0, 0, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _transformMainLayer: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _storeLayerMatrix: function (canvasTransform) {\n this._layerMatrix = canvasTransform.toMatrix();\n this._layerMatrixInvert = canvasTransform.invert().toMatrix();\n },\n _storeViewMatrix: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n this._matrix = transform.toMatrix();\n this._matrixInvert = transform.invert().toMatrix();\n },\n _toIndex: function (items, indices) {\n var result = this._getDiagramItems(items);\n this.mainLayer.toIndex(result.visuals, indices);\n this._fixOrdering(result, false);\n },\n _fixOrdering: function (result, toFront) {\n var shapePos = toFront ? this.shapes.length - 1 : 0, conPos = toFront ? this.connections.length - 1 : 0, i, item;\n for (i = 0; i < result.shapes.length; i++) {\n item = result.shapes[i];\n Utils.remove(this.shapes, item);\n Utils.insert(this.shapes, item, shapePos);\n }\n for (i = 0; i < result.cons.length; i++) {\n item = result.cons[i];\n Utils.remove(this.connections, item);\n Utils.insert(this.connections, item, conPos);\n }\n },\n _getDiagramItems: function (items) {\n var i, result = {}, args = items;\n result.visuals = [];\n result.shapes = [];\n result.cons = [];\n if (!items) {\n args = this._selectedItems.slice();\n } else if (!isArray(items)) {\n args = [items];\n }\n for (i = 0; i < args.length; i++) {\n var item = args[i];\n if (item instanceof Shape) {\n result.shapes.push(item);\n result.visuals.push(item.visual);\n } else if (item instanceof Connection) {\n result.cons.push(item);\n result.visuals.push(item.visual);\n }\n }\n return result;\n },\n _removeItem: function (item, undoable, removedConnections) {\n item.select(false);\n if (item instanceof Shape) {\n this._removeShapeDataItem(item);\n this._removeShape(item, undoable, removedConnections);\n } else if (item instanceof Connection) {\n this._removeConnectionDataItem(item);\n this._removeConnection(item, undoable);\n }\n this.mainLayer.remove(item.visual);\n },\n _removeShape: function (shape, undoable, removedConnections) {\n var i, connection, connector, sources = [], targets = [];\n this.toolService._removeHover();\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteShapeUnit(shape));\n }\n Utils.remove(this.shapes, shape);\n this._shapesQuadTree.remove(shape);\n for (i = 0; i < shape.connectors.length; i++) {\n connector = shape.connectors[i];\n for (var j = 0; j < connector.connections.length; j++) {\n connection = connector.connections[j];\n if (!removedConnections || !dataviz.inArray(connection, removedConnections)) {\n if (connection.sourceConnector == connector) {\n sources.push(connection);\n } else if (connection.targetConnector == connector) {\n targets.push(connection);\n }\n }\n }\n }\n for (i = 0; i < sources.length; i++) {\n sources[i].source(null, undoable);\n sources[i].updateModel();\n }\n for (i = 0; i < targets.length; i++) {\n targets[i].target(null, undoable);\n targets[i].updateModel();\n }\n },\n _removeConnection: function (connection, undoable) {\n if (connection.sourceConnector) {\n Utils.remove(connection.sourceConnector.connections, connection);\n }\n if (connection.targetConnector) {\n Utils.remove(connection.targetConnector.connections, connection);\n }\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteConnectionUnit(connection));\n }\n Utils.remove(this.connections, connection);\n },\n _removeDataItems: function (items, recursive) {\n var item, children, shape, idx;\n items = isArray(items) ? items : [items];\n while (items.length) {\n item = items.shift();\n shape = this._dataMap[item.uid];\n if (shape) {\n this._removeShapeConnections(shape);\n this._removeItem(shape, false);\n delete this._dataMap[item.uid];\n if (recursive && item.hasChildren && item.loaded()) {\n children = item.children.data();\n for (idx = 0; idx < children.length; idx++) {\n items.push(children[idx]);\n }\n }\n }\n }\n },\n _removeShapeConnections: function (shape) {\n var connections = shape.connections();\n var idx;\n if (connections) {\n for (idx = 0; idx < connections.length; idx++) {\n this._removeItem(connections[idx], false);\n }\n }\n },\n _addDataItem: function (dataItem, undoable) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape, undoable !== false);\n this._dataMap[dataItem.id] = shape;\n return shape;\n },\n _addDataItemByUid: function (dataItem) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.uid];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape);\n this._dataMap[dataItem.uid] = shape;\n return shape;\n },\n _addDataItems: function (items, parent) {\n var item, idx, shape, parentShape, connection;\n for (idx = 0; idx < items.length; idx++) {\n item = items[idx];\n shape = this._addDataItemByUid(item);\n parentShape = this._addDataItemByUid(parent);\n if (parentShape && !this.connected(parentShape, shape)) {\n connection = this.connect(parentShape, shape);\n }\n }\n },\n _refreshSource: function (e) {\n var that = this, node = e.node, action = e.action, items = e.items, options = that.options, idx, dataBound;\n if (e.field) {\n for (idx = 0; idx < items.length; idx++) {\n if (this._dataMap[items[idx].uid]) {\n this._dataMap[items[idx].uid].redrawVisual();\n }\n }\n return;\n }\n if (action == 'remove') {\n this._removeDataItems(e.items, true);\n } else {\n if ((!action || action === 'itemloaded') && !this._bindingRoots) {\n this._bindingRoots = true;\n dataBound = true;\n }\n if (!action && !node) {\n that.clear();\n }\n this._addDataItems(items, node);\n for (idx = 0; idx < items.length; idx++) {\n items[idx].load();\n }\n }\n if (options.layout && (dataBound || action == 'remove' || action == 'add')) {\n that.layout(options.layout);\n }\n if (dataBound) {\n this.trigger('dataBound');\n this._bindingRoots = false;\n }\n },\n _addItem: function (item) {\n if (item instanceof Shape) {\n this.addShape(item);\n } else if (item instanceof Connection) {\n this.addConnection(item);\n }\n },\n _createToolBar: function (preventClosing) {\n var diagram = this.toolService.diagram;\n if (!this.singleToolBar && diagram.select().length === 1) {\n var element = diagram.select()[0];\n if (element && element.options.editable !== false) {\n var editable = element.options.editable;\n var tools = editable.tools;\n if (this._isEditable && tools.length === 0) {\n if (element instanceof Shape) {\n tools = [\n 'edit',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n } else if (element instanceof Connection) {\n tools = ['edit'];\n }\n if (editable && editable.remove !== false) {\n tools.push('delete');\n }\n }\n if (tools && tools.length) {\n var padding = 20;\n var point;\n this.singleToolBar = new DiagramToolBar(diagram, {\n tools: tools,\n click: proxy(this._toolBarClick, this),\n modal: true,\n popupZIndex: parseInt(diagram.element.closest('.k-window').css('zIndex'), 10) + 10\n });\n var popupWidth = outerWidth(this.singleToolBar._popup.element);\n var popupHeight = outerHeight(this.singleToolBar._popup.element);\n if (element instanceof Shape) {\n var shapeBounds = this.modelToView(element.bounds(ROTATED));\n point = new Point(shapeBounds.x, shapeBounds.y).minus(new Point((popupWidth - shapeBounds.width) / 2, popupHeight + padding));\n } else if (element instanceof Connection) {\n var connectionBounds = this.modelToView(element.bounds());\n point = new Point(connectionBounds.x, connectionBounds.y).minus(new Point((popupWidth - connectionBounds.width - 20) / 2, popupHeight + padding));\n }\n if (point) {\n if (!this.canvas.translate) {\n point = point.minus(new Point(this.scroller.scrollLeft, this.scroller.scrollTop));\n }\n point = this.viewToDocument(point);\n point = new Point(math.max(point.x, 0), math.max(point.y, 0));\n this.singleToolBar.showAt(point);\n if (preventClosing) {\n this.singleToolBar._popup.one('close', preventDefault);\n }\n } else {\n this._destroyToolBar();\n }\n }\n }\n }\n },\n _toolBarClick: function (e) {\n this.trigger('toolBarClick', e);\n this._destroyToolBar();\n },\n _normalizePointZoom: function (point) {\n return point.times(1 / this.zoom());\n },\n _initialize: function () {\n this.shapes = [];\n this._selectedItems = [];\n this.connections = [];\n this._dataMap = {};\n this._connectionsDataMap = {};\n this._inactiveShapeItems = new InactiveItemsCollection();\n this._deferredConnectionUpdates = [];\n this.undoRedoService = new UndoRedoService({\n undone: this._syncHandler,\n redone: this._syncHandler\n });\n this.id = diagram.randomId();\n },\n _fetchFreshData: function () {\n var that = this;\n that._dataSource();\n if (that._isEditable) {\n that._connectionDataSource();\n }\n if (that.options.autoBind) {\n if (that._isEditable) {\n this._loadingShapes = true;\n this._loadingConnections = true;\n that.dataSource.fetch();\n that.connectionsDataSource.fetch();\n } else {\n that.dataSource.fetch();\n }\n }\n },\n _dataSource: function () {\n if (defined(this.options.connectionsDataSource)) {\n this._isEditable = true;\n var dsOptions = this.options.dataSource || {};\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.dataSource && this._shapesRefreshHandler) {\n this.dataSource.unbind('change', this._shapesRefreshHandler).unbind('requestStart', this._shapesRequestStartHandler).unbind('error', this._shapesErrorHandler);\n } else {\n this._shapesRefreshHandler = proxy(this._refreshShapes, this);\n this._shapesRequestStartHandler = proxy(this._shapesRequestStart, this);\n this._shapesErrorHandler = proxy(this._error, this);\n }\n this.dataSource = kendo.data.DataSource.create(ds).bind('change', this._shapesRefreshHandler).bind('requestStart', this._shapesRequestStartHandler).bind('error', this._shapesErrorHandler);\n } else {\n this._treeDataSource();\n this._isEditable = false;\n }\n },\n _connectionDataSource: function () {\n var dsOptions = this.options.connectionsDataSource;\n if (dsOptions) {\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.connectionsDataSource && this._connectionsRefreshHandler) {\n this.connectionsDataSource.unbind('change', this._connectionsRefreshHandler).unbind('requestStart', this._connectionsRequestStartHandler).unbind('error', this._connectionsErrorHandler);\n } else {\n this._connectionsRefreshHandler = proxy(this._refreshConnections, this);\n this._connectionsRequestStartHandler = proxy(this._connectionsRequestStart, this);\n this._connectionsErrorHandler = proxy(this._connectionsError, this);\n }\n this.connectionsDataSource = kendo.data.DataSource.create(ds).bind('change', this._connectionsRefreshHandler).bind('requestStart', this._connectionsRequestStartHandler).bind('error', this._connectionsErrorHandler);\n }\n },\n _shapesRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingShapes = true;\n }\n },\n _connectionsRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingConnections = true;\n }\n },\n _error: function () {\n this._loadingShapes = false;\n },\n _connectionsError: function () {\n this._loadingConnections = false;\n },\n _refreshShapes: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeShapes(e.items);\n }\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateShapes(e.items, e.field);\n }\n } else if (e.action === 'add') {\n this._inactiveShapeItems.add(e.items);\n } else if (e.action === 'sync') {\n this._syncShapes(e.items);\n } else {\n this.refresh();\n }\n },\n _shouldRefresh: function () {\n return !this._suspended;\n },\n _suspendModelRefresh: function () {\n this._suspended = (this._suspended || 0) + 1;\n },\n _resumeModelRefresh: function () {\n this._suspended = math.max((this._suspended || 0) - 1, 0);\n },\n refresh: function () {\n this._loadingShapes = false;\n if (!this._loadingConnections) {\n this._rebindShapesAndConnections();\n }\n },\n _rebindShapesAndConnections: function () {\n this.clear();\n this._addShapes(this.dataSource.view());\n if (this.connectionsDataSource) {\n this._addConnections(this.connectionsDataSource.view(), false);\n }\n if (this.options.layout) {\n this.layout(this.options.layout);\n } else {\n this._redrawConnections();\n }\n this.trigger('dataBound');\n },\n refreshConnections: function () {\n this._loadingConnections = false;\n if (!this._loadingShapes) {\n this._rebindShapesAndConnections();\n }\n },\n _redrawConnections: function () {\n var connections = this.connections;\n for (var idx = 0; idx < connections.length; idx++) {\n connections[idx].refresh();\n }\n },\n _removeShapes: function (items) {\n var dataMap = this._dataMap;\n var item, i;\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (dataMap[item.id]) {\n this.remove(dataMap[item.id], false);\n dataMap[item.id] = null;\n }\n }\n },\n _syncShapes: function () {\n var diagram = this;\n var inactiveItems = diagram._inactiveShapeItems;\n inactiveItems.forEach(function (inactiveItem) {\n var dataItem = inactiveItem.dataItem;\n var shape = inactiveItem.element;\n if (!dataItem.isNew()) {\n if (shape) {\n shape._setOptionsFromModel();\n diagram.addShape(shape, inactiveItem.undoable);\n diagram._dataMap[dataItem.id] = shape;\n } else {\n diagram._addDataItem(dataItem);\n }\n inactiveItem.activate();\n inactiveItems.remove(dataItem);\n }\n });\n },\n _updateShapes: function (items, field) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n shape.updateOptionsFromModel(dataItem, field);\n }\n }\n },\n _addShapes: function (dataItems) {\n for (var i = 0; i < dataItems.length; i++) {\n this._addDataItem(dataItems[i], false);\n }\n },\n _refreshConnections: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeConnections(e.items);\n }\n } else if (e.action === 'add') {\n this._addConnections(e.items);\n } else if (e.action === 'sync') {\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateConnections(e.items);\n }\n } else {\n this.refreshConnections();\n }\n },\n _removeConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n this.remove(this._connectionsDataMap[items[i].uid], false);\n this._connectionsDataMap[items[i].uid] = null;\n }\n },\n _updateConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var connection = this._connectionsDataMap[dataItem.uid];\n connection.updateOptionsFromModel(dataItem);\n }\n },\n _addConnections: function (connections, undoable) {\n var length = connections.length;\n for (var i = 0; i < length; i++) {\n var dataItem = connections[i];\n this._addConnectionDataItem(dataItem, undoable);\n }\n },\n _addConnectionDataItem: function (dataItem, undoable) {\n if (!this._connectionsDataMap[dataItem.uid]) {\n var from = this._validateConnector(dataItem.from);\n if (!defined(from) || from === null) {\n from = new Point(dataItem.fromX, dataItem.fromY);\n }\n var to = this._validateConnector(dataItem.to);\n if (!defined(to) || to === null) {\n to = new Point(dataItem.toX, dataItem.toY);\n }\n if (defined(from) && defined(to)) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(from, to, options);\n this._connectionsDataMap[dataItem.uid] = connection;\n this.addConnection(connection, undoable);\n }\n }\n },\n _validateConnector: function (value) {\n var connector;\n if (defined(value) && value !== null) {\n connector = this._dataMap[value];\n }\n return connector;\n },\n _treeDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (dataSource instanceof kendo.data.DataSource && !(dataSource instanceof kendo.data.HierarchicalDataSource)) {\n throw new Error('Incorrect DataSource type. If a single dataSource instance is set to the diagram then it should be a HierarchicalDataSource. You should set only the options instead of an instance or a HierarchicalDataSource instance or supply connectionsDataSource as well.');\n }\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'text' },\n { field: 'url' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' }\n ];\n }\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n }\n that._refreshHandler = proxy(that._refreshSource, that);\n that._errorHandler = proxy(that._error, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._refreshHandler).bind(ERROR, that._errorHandler);\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(ERROR, that._errorHandler);\n },\n _adorn: function (adorner, isActive) {\n if (isActive !== undefined && adorner) {\n if (isActive) {\n this._adorners.push(adorner);\n this.adornerLayer.append(adorner.visual);\n } else {\n Utils.remove(this._adorners, adorner);\n this.adornerLayer.remove(adorner.visual);\n }\n }\n },\n _showConnectors: function (shape, value) {\n if (value) {\n this._connectorsAdorner.show(shape);\n } else {\n this._connectorsAdorner.destroy();\n }\n },\n _updateAdorners: function () {\n var adorners = this._adorners;\n for (var i = 0; i < adorners.length; i++) {\n var adorner = adorners[i];\n if (adorner.refreshBounds) {\n adorner.refreshBounds();\n }\n adorner.refresh();\n }\n },\n _refresh: function () {\n for (var i = 0; i < this.connections.length; i++) {\n this.connections[i].refresh();\n }\n },\n _destroyToolBar: function () {\n if (this.singleToolBar) {\n this.singleToolBar.hide();\n this.singleToolBar.destroy();\n this.singleToolBar = null;\n }\n },\n _destroyGlobalToolBar: function () {\n if (this.toolBar) {\n this.toolBar.hide();\n this.toolBar.destroy();\n this.toolBar = null;\n }\n },\n exportDOMVisual: function () {\n var viewBox = this.canvas._viewBox;\n var scrollOffset = geom.transform().translate(-viewBox.x, -viewBox.y);\n var viewRect = new geom.Rect([\n 0,\n 0\n ], [\n viewBox.width,\n viewBox.height\n ]);\n var clipPath = draw.Path.fromRect(viewRect);\n var wrap = new draw.Group({ transform: scrollOffset });\n var clipWrap = new draw.Group({ clip: clipPath });\n var root = this.canvas.drawingElement.children[0];\n clipWrap.append(wrap);\n wrap.children.push(root);\n return clipWrap;\n },\n exportVisual: function () {\n var scale = geom.transform().scale(1 / this._zoom);\n var wrap = new draw.Group({ transform: scale });\n var root = this.mainLayer.drawingElement;\n wrap.children.push(root);\n return wrap;\n },\n _syncChanges: function () {\n this._syncShapeChanges();\n this._syncConnectionChanges();\n },\n _syncShapeChanges: function () {\n if (this.dataSource && this._isEditable) {\n this.dataSource.sync();\n }\n },\n _syncConnectionChanges: function () {\n var that = this;\n if (that.connectionsDataSource && that._isEditable) {\n $.when.apply($, that._deferredConnectionUpdates).then(function () {\n that.connectionsDataSource.sync();\n });\n that.deferredConnectionUpdates = [];\n }\n }\n });\n dataviz.ExportMixin.extend(Diagram.fn, true);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Diagram.fn);\n }\n function filterShapeDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.text = dataItem.text;\n }\n if (defined(dataItem.x) && dataItem.x !== null) {\n result.x = dataItem.x;\n }\n if (defined(dataItem.y) && dataItem.y !== null) {\n result.y = dataItem.y;\n }\n if (defined(dataItem.width) && dataItem.width !== null) {\n result.width = dataItem.width;\n }\n if (defined(dataItem.height) && dataItem.height !== null) {\n result.height = dataItem.height;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n return result;\n }\n function filterConnectionDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.content = dataItem.text;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n if (defined(dataItem.from) && dataItem.from !== null) {\n result.from = dataItem.from;\n }\n if (defined(dataItem.fromConnector) && dataItem.fromConnector !== null) {\n result.fromConnector = dataItem.fromConnector;\n }\n if (defined(dataItem.fromX) && dataItem.fromX !== null) {\n result.fromX = dataItem.fromX;\n }\n if (defined(dataItem.fromY) && dataItem.fromY !== null) {\n result.fromY = dataItem.fromY;\n }\n if (defined(dataItem.to) && dataItem.to !== null) {\n result.to = dataItem.to;\n }\n if (defined(dataItem.toConnector) && dataItem.toConnector !== null) {\n result.toConnector = dataItem.toConnector;\n }\n if (defined(dataItem.toX) && dataItem.toX !== null) {\n result.toX = dataItem.toX;\n }\n if (defined(dataItem.toY) && dataItem.toY !== null) {\n result.toY = dataItem.toY;\n }\n return result;\n }\n var DiagramToolBar = kendo.Observable.extend({\n init: function (diagram, options) {\n kendo.Observable.fn.init.call(this);\n this.diagram = diagram;\n this.options = deepExtend({}, this.options, options);\n this._tools = [];\n this.createToolBar();\n this.createTools();\n this.appendTools();\n if (this.options.modal) {\n this.createPopup();\n }\n this.bind(this.events, options);\n },\n events: ['click'],\n createPopup: function () {\n this.container = $('
        ').append(this.element);\n this._popup = this.container.kendoPopup({}).getKendoPopup();\n },\n appendTools: function () {\n for (var i = 0; i < this._tools.length; i++) {\n var tool = this._tools[i];\n if (tool.buttons && tool.buttons.length || !defined(tool.buttons)) {\n this._toolBar.add(tool);\n }\n }\n },\n createToolBar: function () {\n this.element = $('
        ');\n this._toolBar = this.element.kendoToolBar({\n click: proxy(this.click, this),\n resizable: false\n }).getKendoToolBar();\n this.element.css('border', 'none');\n },\n createTools: function () {\n for (var i = 0; i < this.options.tools.length; i++) {\n this.createTool(this.options.tools[i]);\n }\n },\n createTool: function (tool) {\n if (!isPlainObject(tool)) {\n tool = { name: tool };\n }\n var toolName = tool.name + 'Tool';\n if (this[toolName]) {\n this[toolName](tool);\n } else {\n this._tools.push(deepExtend({}, tool, { attributes: this._setAttributes({ action: tool.name }) }));\n }\n },\n showAt: function (point) {\n var popupZIndex = parseInt(this.options.popupZIndex, 10);\n if (this._popup) {\n this._popup.open(point.x, point.y);\n if (popupZIndex) {\n this._popup.wrapper.css('zIndex', popupZIndex);\n }\n }\n },\n hide: function () {\n if (this._popup) {\n this._popup.close();\n }\n },\n newGroup: function () {\n return {\n type: 'buttonGroup',\n buttons: []\n };\n },\n editTool: function () {\n this._tools.push({\n icon: 'edit',\n showText: 'overflow',\n type: 'button',\n text: 'Edit',\n attributes: this._setAttributes({ action: 'edit' })\n });\n },\n deleteTool: function () {\n this._tools.push({\n icon: 'close',\n showText: 'overflow',\n type: 'button',\n text: 'Delete',\n attributes: this._setAttributes({ action: 'delete' })\n });\n },\n rotateAnticlockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-left',\n showText: 'overflow',\n text: 'RotateAnticlockwise',\n group: 'rotate',\n attributes: this._setAttributes({\n action: 'rotateAnticlockwise',\n step: options.step\n })\n });\n },\n rotateClockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-right',\n attributes: this._setAttributes({\n action: 'rotateClockwise',\n step: options.step\n }),\n showText: 'overflow',\n text: 'RotateClockwise',\n group: 'rotate'\n });\n },\n createShapeTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'shape',\n showText: 'overflow',\n text: 'CreateShape',\n group: 'create',\n attributes: this._setAttributes({ action: 'createShape' })\n });\n },\n createConnectionTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'connector',\n showText: 'overflow',\n text: 'CreateConnection',\n group: 'create',\n attributes: this._setAttributes({ action: 'createConnection' })\n });\n },\n undoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'undo',\n showText: 'overflow',\n text: 'Undo',\n group: 'history',\n attributes: this._setAttributes({ action: 'undo' })\n });\n },\n redoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'redo',\n showText: 'overflow',\n text: 'Redo',\n group: 'history',\n attributes: this._setAttributes({ action: 'redo' })\n });\n },\n _appendGroup: function (name) {\n var prop = '_' + name + 'Group';\n if (!this[prop]) {\n this[prop] = this.newGroup();\n this._tools.push(this[prop]);\n }\n },\n _setAttributes: function (attributes) {\n var attr = {};\n if (attributes.action) {\n attr[kendo.attr('action')] = attributes.action;\n }\n if (attributes.step) {\n attr[kendo.attr('step')] = attributes.step;\n }\n return attr;\n },\n _getAttributes: function (element) {\n var attr = {};\n var action = element.attr(kendo.attr('action'));\n if (action) {\n attr.action = action;\n }\n var step = element.attr(kendo.attr('step'));\n if (step) {\n attr.step = step;\n }\n return attr;\n },\n click: function (e) {\n var attributes = this._getAttributes($(e.target));\n var action = attributes.action;\n if (action && this[action]) {\n this[action](attributes);\n }\n this.trigger('click', this.eventData(action, e.target));\n },\n eventData: function (action, target) {\n var elements = this.selectedElements(), length = elements.length, shapes = [], connections = [], element;\n for (var idx = 0; idx < length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections,\n action: action,\n target: target\n };\n },\n 'delete': function () {\n var diagram = this.diagram;\n var toRemove = diagram._triggerRemove(this.selectedElements());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n }\n },\n edit: function () {\n var selectedElemens = this.selectedElements();\n if (selectedElemens.length === 1) {\n this.diagram.edit(selectedElemens[0]);\n }\n },\n rotateClockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(angle);\n },\n rotateAnticlockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(-angle);\n },\n _rotate: function (angle) {\n var adorner = this.diagram._resizingAdorner;\n adorner.angle(adorner.angle() + angle);\n adorner.rotate();\n },\n selectedElements: function () {\n return this.diagram.select();\n },\n createShape: function () {\n this.diagram.createShape();\n },\n createConnection: function () {\n this.diagram.createConnection();\n },\n undo: function () {\n this.diagram.undo();\n },\n redo: function () {\n this.diagram.redo();\n },\n destroy: function () {\n this.diagram = null;\n this.element = null;\n this.options = null;\n if (this._toolBar) {\n this._toolBar.destroy();\n }\n if (this._popup) {\n this._popup.destroy();\n }\n }\n });\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = extend(true, {}, this.options, options);\n this.element = element;\n this.model = this.options.model;\n this.fields = this._getFields();\n this._initContainer();\n this.createEditable();\n },\n options: { editors: {} },\n _initContainer: function () {\n this.wrapper = this.element;\n },\n createEditable: function () {\n var options = this.options;\n this.editable = new kendo.ui.Editable(this.wrapper, {\n fields: this.fields,\n target: options.target,\n clearContainer: false,\n model: this.model\n });\n },\n _isEditable: function (field) {\n return this.model.editable && this.model.editable(field);\n },\n _getFields: function () {\n var fields = [];\n var modelFields = this.model.fields;\n for (var field in modelFields) {\n var result = {};\n if (this._isEditable(field)) {\n var editor = this.options.editors[field];\n if (editor) {\n result.editor = editor;\n }\n result.field = field;\n fields.push(result);\n }\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n destroy: function () {\n this.editable.destroy();\n this.editable.element.find('[' + kendo.attr('container-for') + ']').empty();\n this.model = this.wrapper = this.element = this.columns = this.editable = null;\n }\n });\n var PopupEditor = Editor.extend({\n init: function (element, options) {\n Editor.fn.init.call(this, element, options);\n this.bind(this.events, this.options);\n this.open();\n },\n events: [\n 'update',\n 'cancel'\n ],\n options: {\n window: {\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false\n }\n },\n _initContainer: function () {\n var that = this;\n this.wrapper = $('
        ').attr(kendo.attr('uid'), this.model.uid);\n var formContent = '';\n if (this.options.template) {\n formContent += this._renderTemplate();\n this.fields = [];\n } else {\n formContent += this._renderFields();\n }\n formContent += this._renderButtons();\n this.wrapper.append($('
        ').append(formContent));\n this.window = new kendo.ui.Window(this.wrapper.appendTo(this.element), this.options.window);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n e.sender.element.focus();\n that._cancelClick(e);\n }\n });\n this._attachButtonEvents();\n },\n _renderTemplate: function () {\n var template = this.options.template;\n if (typeof template === 'string') {\n template = window.unescape(template);\n }\n template = kendo.template(template)(this.model);\n return template;\n },\n _renderFields: function () {\n var form = '';\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i];\n form += '
        ';\n if (this._isEditable(field.field)) {\n form += '
        ';\n }\n }\n return form;\n },\n _renderButtons: function () {\n var form = '
        ';\n form += this._createButton('update');\n form += this._createButton('cancel');\n form += '
        ';\n return form;\n },\n _createButton: function (name) {\n return kendo.template(BUTTON_TEMPLATE)(defaultButtons[name]);\n },\n _attachButtonEvents: function () {\n this._cancelClickHandler = proxy(this._cancelClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this._updateClickHandler = proxy(this._updateClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n },\n _updateClick: function (e) {\n e.preventDefault();\n this.trigger('update');\n },\n _cancelClick: function (e) {\n e.preventDefault();\n this.trigger('cancel');\n },\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this.window.close().destroy();\n this.window.element.off(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this.window.element.off(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n this._cancelClickHandler = null;\n this._editUpdateClickHandler = null;\n this.window = null;\n Editor.fn.destroy.call(this);\n }\n });\n function connectionSelector(container, options) {\n var model = this.dataSource.reader.model;\n if (model) {\n var textField = model.fn.fields.text ? 'text' : model.idField;\n $('').appendTo(container).kendoDropDownList({\n dataValueField: model.idField,\n dataTextField: textField,\n dataSource: this.dataSource.data().toJSON(),\n optionLabel: ' ',\n valuePrimitive: true\n });\n }\n }\n function InactiveItem(dataItem) {\n this.dataItem = dataItem;\n this.callbacks = [];\n }\n InactiveItem.fn = InactiveItem.prototype = {\n onActivate: function (callback) {\n var deffered = $.Deferred();\n this.callbacks.push({\n callback: callback,\n deferred: deffered\n });\n return deffered;\n },\n activate: function () {\n var callbacks = this.callbacks;\n var item;\n for (var idx = 0; idx < callbacks.length; idx++) {\n item = this.callbacks[idx];\n item.callback(this.dataItem);\n item.deferred.resolve();\n }\n this.callbacks = [];\n }\n };\n function InactiveItemsCollection() {\n this.items = {};\n }\n InactiveItemsCollection.fn = InactiveItemsCollection.prototype = {\n add: function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n this.items[items[idx].uid] = new InactiveItem(items[idx]);\n }\n },\n forEach: function (callback) {\n for (var uid in this.items) {\n callback(this.items[uid]);\n }\n },\n getByUid: function (uid) {\n return this.items[uid];\n },\n remove: function (item) {\n delete this.items[item.uid];\n }\n };\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bounds) {\n this.shapes.push({\n bounds: bounds,\n shape: shape\n });\n shape._quadNode = this;\n },\n insert: function (shape, bounds) {\n this._add(shape, bounds);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var i = 0; i < length; i++) {\n if (this._testRect(shapes[i].shape, rect) && !dataviz.inArray(shapes[i].shape, exclude)) {\n return true;\n }\n }\n },\n _testRect: function (shape, rect) {\n var angle = shape.rotate().angle;\n var bounds = shape.bounds();\n var hit;\n if (!angle) {\n hit = bounds.overlaps(rect);\n } else {\n hit = Intersect.rects(rect, bounds, -angle);\n }\n return hit;\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.x <= rect.x && nodeRect.y <= rect.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n overlapsBounds: function (rect) {\n return this.rect.overlaps(rect);\n },\n insert: function (shape, bounds) {\n var inserted = false;\n var children = this.children;\n var length = children.length;\n if (this.inBounds(bounds)) {\n if (!length && this.shapes.length < 4) {\n this._add(shape, bounds);\n } else {\n if (!length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bounds)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bounds);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var rect = this.rect, children = this.children, shapes = this.shapes, center = rect.center(), halfWidth = rect.width / 2, halfHeight = rect.height / 2, childIdx, shapeIdx;\n children.push(new QuadNode(new Rect(rect.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(rect.x, center.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, center.y, halfWidth, halfHeight)));\n for (shapeIdx = shapes.length - 1; shapeIdx >= 0; shapeIdx--) {\n for (childIdx = 0; childIdx < children.length; childIdx++) {\n if (children[childIdx].insert(shapes[shapeIdx].shape, shapes[shapeIdx].bounds)) {\n shapes.splice(shapeIdx, 1);\n break;\n }\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var idx;\n var children = this.children;\n var length = children.length;\n var hit = false;\n if (this.overlapsBounds(rect)) {\n if (QuadRoot.fn.hitTestRect.call(this, rect, exclude)) {\n hit = true;\n } else {\n for (idx = 0; idx < length; idx++) {\n if (children[idx].hitTestRect(rect, exclude)) {\n hit = true;\n break;\n }\n }\n }\n }\n return hit;\n }\n });\n var ShapesQuadTree = Class.extend({\n ROOT_SIZE: 1000,\n init: function (diagram) {\n var boundsChangeHandler = proxy(this._boundsChange, this);\n diagram.bind(ITEMBOUNDSCHANGE, boundsChangeHandler);\n diagram.bind(ITEMROTATE, boundsChangeHandler);\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n },\n clear: function () {\n this.initRoots();\n },\n _boundsChange: function (e) {\n if (e.item._quadNode) {\n e.item._quadNode.remove(e.item);\n }\n this.insert(e.item);\n },\n insert: function (shape) {\n var bounds = shape.bounds(ROTATED);\n var rootSize = this.ROOT_SIZE;\n var sectors = this.getSectors(bounds);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bounds);\n } else {\n if (!this.rootMap[x]) {\n this.rootMap[x] = {};\n }\n if (!this.rootMap[x][y]) {\n this.rootMap[x][y] = new QuadNode(new Rect(x * rootSize, y * rootSize, rootSize, rootSize));\n }\n this.rootMap[x][y].insert(shape, bounds);\n }\n },\n remove: function (shape) {\n if (shape._quadNode) {\n shape._quadNode.remove(shape);\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var rootSize = this.ROOT_SIZE;\n var bottomRight = rect.bottomRight();\n var bottomX = math.floor(bottomRight.x / rootSize);\n var bottomY = math.floor(bottomRight.y / rootSize);\n var sectors = [\n [],\n []\n ];\n for (var x = math.floor(rect.x / rootSize); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = math.floor(rect.y / rootSize); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n },\n hitTestRect: function (rect, exclude) {\n var sectors = this.getSectors(rect);\n var xIdx, yIdx, x, y;\n var root;\n if (this.root.hitTestRect(rect, exclude)) {\n return true;\n }\n for (xIdx = 0; xIdx < sectors[0].length; xIdx++) {\n x = sectors[0][xIdx];\n for (yIdx = 0; yIdx < sectors[1].length; yIdx++) {\n y = sectors[1][yIdx];\n root = (this.rootMap[x] || {})[y];\n if (root && root.hitTestRect(rect, exclude)) {\n return true;\n }\n }\n }\n return false;\n }\n });\n function cloneDataItem(dataItem) {\n var result = dataItem;\n if (dataItem instanceof kendo.data.Model) {\n result = dataItem.toJSON();\n result[dataItem.idField] = dataItem._defaultId;\n }\n return result;\n }\n function splitDiagramElements(elements) {\n var connections = [];\n var shapes = [];\n var element, idx;\n for (idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections\n };\n }\n function createModel(dataSource, model) {\n if (dataSource.reader.model) {\n return new dataSource.reader.model(model);\n }\n return new kendo.data.ObservableObject(model);\n }\n function clearField(field, model) {\n if (defined(model[field])) {\n model.set(field, null);\n }\n }\n function copyDefaultOptions(mainOptions, elementOptions, fields) {\n var field;\n for (var idx = 0; idx < fields.length; idx++) {\n field = fields[idx];\n if (elementOptions && !defined(elementOptions[field])) {\n elementOptions[field] = mainOptions[field];\n }\n }\n }\n function translateToOrigin(visual) {\n var bbox = visual.drawingContainer().clippedBBox(null);\n if (bbox.origin.x !== 0 || bbox.origin.y !== 0) {\n visual.position(-bbox.origin.x, -bbox.origin.y);\n }\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n dataviz.ui.plugin(Diagram);\n deepExtend(diagram, {\n Shape: Shape,\n Connection: Connection,\n Connector: Connector,\n DiagramToolBar: DiagramToolBar,\n QuadNode: QuadNode,\n QuadRoot: QuadRoot,\n ShapesQuadTree: ShapesQuadTree,\n PopupEditor: PopupEditor\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.diagram', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.userevents',\n 'kendo.mobile.scroller',\n 'kendo.drawing',\n 'dataviz/diagram/utils',\n 'dataviz/diagram/math',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout',\n 'dataviz/diagram/dom'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.diagram',\n name: 'Diagram',\n category: 'dataviz',\n description: 'The Kendo DataViz Diagram ',\n depends: [\n 'data',\n 'userevents',\n 'mobile.scroller',\n 'draganddrop',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes',\n 'toolbar'\n ],\n features: [\n {\n id: 'dataviz.diagram-pdf-export',\n name: 'PDF export',\n description: 'Export Diagram as PDF',\n depends: ['pdf']\n },\n {\n id: 'dataviz.diagram-editing',\n name: 'Editing',\n description: 'Support for model editing',\n depends: [\n 'editable',\n 'window',\n 'dropdownlist'\n ]\n }\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.treemap', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.treeMap',\n name: 'TreeMap',\n category: 'dataviz',\n description: 'The Kendo DataViz TreeMap',\n depends: [\n 'data',\n 'userevents',\n 'dataviz.themes'\n ]\n };\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, isArray = $.isArray, kendo = window.kendo, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, Class = kendo.Class, Widget = kendo.ui.Widget, template = kendo.template, deepExtend = kendo.deepExtend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, getter = kendo.getter, dataviz = kendo.dataviz;\n var NS = '.kendoTreeMap', CHANGE = 'change', DATA_BOUND = 'dataBound', ITEM_CREATED = 'itemCreated', MAX_VALUE = Number.MAX_VALUE, MOUSEOVER_NS = 'mouseover' + NS, MOUSELEAVE_NS = 'mouseleave' + NS, UNDEFINED = 'undefined';\n var TreeMap = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(this, element, options);\n this.wrapper = this.element;\n this._initTheme(this.options);\n this.element.addClass('k-widget k-treemap');\n this._setLayout();\n this._originalOptions = deepExtend({}, this.options);\n this._initDataSource();\n this._attachEvents();\n kendo.notify(this, dataviz.ui);\n },\n options: {\n name: 'TreeMap',\n theme: 'default',\n autoBind: true,\n textField: 'text',\n valueField: 'value',\n colorField: 'color'\n },\n events: [\n DATA_BOUND,\n ITEM_CREATED\n ],\n _initTheme: function (options) {\n var that = this, themes = dataviz.ui.themes || {}, themeName = ((options || {}).theme || '').toLowerCase(), themeOptions = (themes[themeName] || {}).treeMap;\n that.options = deepExtend({}, themeOptions, options);\n },\n _attachEvents: function () {\n this.element.on(MOUSEOVER_NS, proxy(this._mouseover, this)).on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n this._resizeHandler = proxy(this.resize, this, false);\n kendo.onResize(this._resizeHandler);\n },\n _setLayout: function () {\n if (this.options.type === 'horizontal') {\n this._layout = new SliceAndDice(false);\n this._view = new SliceAndDiceView(this, this.options);\n } else if (this.options.type === 'vertical') {\n this._layout = new SliceAndDice(true);\n this._view = new SliceAndDiceView(this, this.options);\n } else {\n this._layout = new Squarified();\n this._view = new SquarifiedView(this, this.options);\n }\n },\n _initDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n that._dataChangeHandler = proxy(that._onDataChange, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.dataSource.unbind(CHANGE, that._dataChangeHandler);\n that.dataSource = dataSource.bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n _onDataChange: function (e) {\n var node = e.node;\n var items = e.items;\n var options = this.options;\n var item, i;\n if (!node) {\n this._cleanItems();\n this.element.empty();\n item = this._wrapItem(items[0]);\n this._layout.createRoot(item, outerWidth(this.element), outerHeight(this.element), this.options.type === 'vertical');\n this._view.createRoot(item);\n this._root = item;\n this._colorIdx = 0;\n } else {\n if (items.length) {\n var root = this._getByUid(node.uid);\n root.children = [];\n items = new kendo.data.Query(items)._sortForGrouping(options.valueField, 'desc');\n for (i = 0; i < items.length; i++) {\n item = items[i];\n root.children.push(this._wrapItem(item));\n }\n var htmlSize = this._view.htmlSize(root);\n this._layout.compute(root.children, root.coord, htmlSize);\n this._setColors(root.children);\n this._view.render(root);\n }\n }\n for (i = 0; i < items.length; i++) {\n items[i].load();\n }\n if (node) {\n this.trigger(DATA_BOUND, { node: node });\n }\n },\n _cleanItems: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element.find('.k-leaf div,.k-treemap-title,.k-treemap-title-vertical') };\n });\n },\n _setColors: function (items) {\n var colors = this.options.colors;\n var colorIdx = this._colorIdx;\n var color = colors[colorIdx % colors.length];\n var colorRange, item;\n if (isArray(color)) {\n colorRange = colorsByLength(color[0], color[1], items.length);\n }\n var leafNodes = false;\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n if (!defined(item.color)) {\n if (colorRange) {\n item.color = colorRange[i];\n } else {\n item.color = color;\n }\n }\n if (!item.dataItem.hasChildren) {\n leafNodes = true;\n }\n }\n if (leafNodes) {\n this._colorIdx++;\n }\n },\n _contentSize: function (root) {\n this.view.renderHeight(root);\n },\n _wrapItem: function (item) {\n var wrap = {};\n if (defined(this.options.valueField)) {\n wrap.value = getField(this.options.valueField, item);\n }\n if (defined(this.options.colorField)) {\n wrap.color = getField(this.options.colorField, item);\n }\n if (defined(this.options.textField)) {\n wrap.text = getField(this.options.textField, item);\n }\n wrap.level = item.level();\n wrap.dataItem = item;\n return wrap;\n },\n _getByUid: function (uid) {\n var items = [this._root];\n var item;\n while (items.length) {\n item = items.pop();\n if (item.dataItem.uid === uid) {\n return item;\n }\n if (item.children) {\n items = items.concat(item.children);\n }\n }\n },\n dataItem: function (node) {\n var uid = $(node).attr(kendo.attr('uid')), dataSource = this.dataSource;\n return dataSource && dataSource.getByUid(uid);\n },\n findByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n _mouseover: function (e) {\n var target = $(e.target);\n if (target.hasClass('k-leaf')) {\n this._removeActiveState();\n target.removeClass('k-state-hover').addClass('k-state-hover');\n }\n },\n _removeActiveState: function () {\n this.element.find('.k-state-hover').removeClass('k-state-hover');\n },\n _mouseleave: function () {\n this._removeActiveState();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.dataSource) {\n this.dataSource.unbind(CHANGE, this._dataChangeHandler);\n }\n this._root = null;\n kendo.unbindResize(this._resizeHandler);\n kendo.destroy(this.element);\n },\n items: function () {\n return $();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n var root = this._root;\n if (root) {\n var element = this.element;\n var rootElement = element.children();\n root.coord.width = outerWidth(element);\n root.coord.height = outerHeight(element);\n rootElement.css({\n width: root.coord.width,\n height: root.coord.height\n });\n this._resizeItems(root, rootElement);\n }\n },\n _resizeItems: function (root, element) {\n if (root.children && root.children.length) {\n var elements = element.children('.k-treemap-wrap').children();\n var child, childElement;\n this._layout.compute(root.children, root.coord, { text: this._view.titleSize(root, element) });\n for (var idx = 0; idx < root.children.length; idx++) {\n child = root.children[idx];\n childElement = elements.filter('[' + kendo.attr('uid') + '=\\'' + child.dataItem.uid + '\\']');\n this._view.setItemSize(child, childElement);\n this._resizeItems(child, childElement);\n }\n }\n },\n setOptions: function (options) {\n var dataSource = options.dataSource;\n options.dataSource = undefined;\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n this._setLayout();\n this._initTheme(this.options);\n Widget.fn._setEvents.call(this, options);\n if (dataSource) {\n this.setDataSource(HierarchicalDataSource.create(dataSource));\n }\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n }\n });\n var Squarified = Class.extend({\n createRoot: function (root, width, height) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n },\n leaf: function (tree) {\n return !tree.children;\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0, itemsArea = [], i;\n for (i = 0; i < items.length; i++) {\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n var minimumSideValue = this.layoutHorizontal() ? coord.height : coord.width;\n var firstElement = [items[0]];\n var tail = items.slice(1);\n this.squarify(tail, firstElement, minimumSideValue, coord);\n },\n squarify: function (tail, initElement, width, coord) {\n this.computeDim(tail, initElement, width, coord);\n },\n computeDim: function (tail, initElement, width, coord) {\n if (tail.length + initElement.length == 1) {\n var element = tail.length == 1 ? tail : initElement;\n this.layoutLast(element, width, coord);\n return;\n }\n if (tail.length >= 2 && initElement.length === 0) {\n initElement = [tail[0]];\n tail = tail.slice(1);\n }\n if (tail.length === 0) {\n if (initElement.length > 0) {\n this.layoutRow(initElement, width, coord);\n }\n return;\n }\n var firstElement = tail[0];\n if (this.worstAspectRatio(initElement, width) >= this.worstAspectRatio([firstElement].concat(initElement), width)) {\n this.computeDim(tail.slice(1), initElement.concat([firstElement]), width, coord);\n } else {\n var newCoords = this.layoutRow(initElement, width, coord);\n this.computeDim(tail, [], newCoords.dim, newCoords);\n }\n },\n layoutLast: function (items, w, coord) {\n items[0].coord = coord;\n },\n layoutRow: function (items, width, coord) {\n if (this.layoutHorizontal()) {\n return this.layoutV(items, width, coord);\n } else {\n return this.layoutH(items, width, coord);\n }\n },\n orientation: 'h',\n layoutVertical: function () {\n return this.orientation === 'v';\n },\n layoutHorizontal: function () {\n return this.orientation === 'h';\n },\n layoutChange: function () {\n this.orientation = this.layoutVertical() ? 'h' : 'v';\n },\n worstAspectRatio: function (items, width) {\n if (!items || items.length === 0) {\n return MAX_VALUE;\n }\n var areaSum = 0, maxArea = 0, minArea = MAX_VALUE;\n for (var i = 0; i < items.length; i++) {\n var area = items[i].area;\n areaSum += area;\n minArea = minArea < area ? minArea : area;\n maxArea = maxArea > area ? maxArea : area;\n }\n return math.max(width * width * maxArea / (areaSum * areaSum), areaSum * areaSum / (width * width * minArea));\n },\n compute: function (children, rootCoord, htmlSize) {\n if (!(rootCoord.width >= rootCoord.height && this.layoutHorizontal())) {\n this.layoutChange();\n }\n if (children && children.length > 0) {\n var newRootCoord = {\n width: rootCoord.width,\n height: rootCoord.height - htmlSize.text,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutV: function (items, width, coord) {\n var totalArea = this._totalArea(items), top = 0;\n width = round(totalArea / width);\n for (var i = 0; i < items.length; i++) {\n var height = round(items[i].area / width);\n items[i].coord = {\n height: height,\n width: width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n var ans = {\n height: coord.height,\n width: coord.width - width,\n top: coord.top,\n left: coord.left + width\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.height) {\n this.layoutChange();\n }\n return ans;\n },\n layoutH: function (items, width, coord) {\n var totalArea = this._totalArea(items);\n var height = round(totalArea / width), top = coord.top, left = 0;\n for (var i = 0; i < items.length; i++) {\n items[i].coord = {\n height: height,\n width: round(items[i].area / height),\n top: top,\n left: coord.left + left\n };\n left += items[i].coord.width;\n }\n var ans = {\n height: coord.height - height,\n width: coord.width,\n top: coord.top + height,\n left: coord.left\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.width) {\n this.layoutChange();\n }\n return ans;\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SquarifiedView = Class.extend({\n init: function (treeMap, options) {\n this.options = deepExtend({}, this.options, options);\n this.treeMap = treeMap;\n this.element = $(treeMap.element);\n this.offset = 0;\n },\n titleSize: function (item, element) {\n var text = element.children('.k-treemap-title');\n return text.height() || 0;\n },\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = { text: 0 };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n htmlSize.text = title.height();\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n _compile: function (element, dataItem) {\n this.treeMap.angular('compile', function () {\n return {\n elements: element,\n data: [{ dataItem: dataItem }]\n };\n });\n },\n _getByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n render: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var children = root.children;\n if (children) {\n var rootWrap = rootElement.find('.k-treemap-wrap');\n for (var i = 0; i < children.length; i++) {\n var leaf = children[i];\n var htmlElement = this._createLeaf(leaf);\n rootWrap.append(htmlElement);\n this._compile(htmlElement.children(), leaf.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n }\n }\n },\n createRoot: function (root) {\n var htmlElement = this._createLeaf(root);\n this.element.append(htmlElement);\n this._compile(htmlElement.children(), root.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n },\n _clean: function (root) {\n this.treeMap.angular('cleanup', function () {\n return { elements: root.children(':not(.k-treemap-wrap)') };\n });\n root.css('background-color', '');\n root.removeClass('k-leaf');\n root.removeClass('k-inverse');\n root.empty();\n },\n _createLeaf: function (item) {\n return this._createTile(item).css('background-color', item.color).addClass('k-leaf').toggleClass('k-inverse', this._tileColorBrightness(item) > 180).append($('
        ').html(this._getText(item)));\n },\n _createTile: function (item) {\n var tile = $('
        ');\n this.setItemSize(item, tile);\n if (defined(item.dataItem) && defined(item.dataItem.uid)) {\n tile.attr(kendo.attr('uid'), item.dataItem.uid);\n }\n return tile;\n },\n _itemCoordinates: function (item) {\n var coordinates = {\n width: item.coord.width,\n height: item.coord.height,\n left: item.coord.left,\n top: item.coord.top\n };\n if (coordinates.left && this.offset) {\n coordinates.width += this.offset * 2;\n } else {\n coordinates.width += this.offset;\n }\n if (coordinates.top) {\n coordinates.height += this.offset * 2;\n } else {\n coordinates.height += this.offset;\n }\n return coordinates;\n },\n setItemSize: function (item, element) {\n var coordinates = this._itemCoordinates(item);\n element.css({\n width: coordinates.width,\n height: coordinates.height,\n left: coordinates.left,\n top: coordinates.top\n });\n },\n _getText: function (item) {\n var text = item.text;\n if (this.options.template) {\n text = this._renderTemplate(item);\n }\n return text;\n },\n _renderTemplate: function (item) {\n var titleTemplate = template(this.options.template);\n return titleTemplate({\n dataItem: item.dataItem,\n text: item.text\n });\n },\n _createTitle: function (item) {\n return $('
        ').append($('
        ').html(this._getText(item)));\n },\n _createWrap: function () {\n return $('
        ');\n },\n _tileColorBrightness: function (item) {\n return colorBrightness(item.color);\n }\n });\n var SliceAndDice = Class.extend({\n createRoot: function (root, width, height, vertical) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n root.vertical = vertical;\n },\n init: function (vertical) {\n this.vertical = vertical;\n this.quotient = vertical ? 1 : 0;\n },\n compute: function (children, rootCoord, htmlSize) {\n if (children.length > 0) {\n var width = rootCoord.width;\n var height = rootCoord.height;\n if (this.vertical) {\n height -= htmlSize.text;\n } else {\n width -= htmlSize.text;\n }\n var newRootCoord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0;\n var itemsArea = [];\n var i;\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n item.vertical = this.vertical;\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n this.sliceAndDice(items, coord);\n },\n sliceAndDice: function (items, coord) {\n var totalArea = this._totalArea(items);\n if (items[0].level % 2 === this.quotient) {\n this.layoutHorizontal(items, coord, totalArea);\n } else {\n this.layoutVertical(items, coord, totalArea);\n }\n },\n layoutHorizontal: function (items, coord, totalArea) {\n var left = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var width = item.area / (totalArea / coord.width);\n item.coord = {\n height: coord.height,\n width: width,\n top: coord.top,\n left: coord.left + left\n };\n left += width;\n }\n },\n layoutVertical: function (items, coord, totalArea) {\n var top = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var height = item.area / (totalArea / coord.height);\n item.coord = {\n height: height,\n width: coord.width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SliceAndDiceView = SquarifiedView.extend({\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = {\n text: 0,\n offset: 0\n };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n if (root.vertical) {\n htmlSize.text = title.height();\n } else {\n htmlSize.text = title.width();\n }\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n titleSize: function (item, element) {\n var size;\n if (item.vertical) {\n size = element.children('.k-treemap-title').height();\n } else {\n size = element.children('.k-treemap-title-vertical').width();\n }\n return size || 0;\n },\n _createTitle: function (item) {\n var title;\n if (item.vertical) {\n title = $('
        ');\n } else {\n title = $('
        ');\n }\n return title.append($('
        ').html(this._getText(item)));\n }\n });\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function colorsByLength(min, max, length) {\n var minRGBtoDecimal = rgbToDecimal(min);\n var maxRGBtoDecimal = rgbToDecimal(max);\n var isDarker = colorBrightness(min) - colorBrightness(max) < 0;\n var colors = [];\n colors.push(min);\n for (var i = 0; i < length; i++) {\n var rgbColor = {\n r: colorByIndex(minRGBtoDecimal.r, maxRGBtoDecimal.r, i, length, isDarker),\n g: colorByIndex(minRGBtoDecimal.g, maxRGBtoDecimal.g, i, length, isDarker),\n b: colorByIndex(minRGBtoDecimal.b, maxRGBtoDecimal.b, i, length, isDarker)\n };\n colors.push(buildColorFromRGB(rgbColor));\n }\n colors.push(max);\n return colors;\n }\n function colorByIndex(min, max, index, length, isDarker) {\n var minColor = math.min(math.abs(min), math.abs(max));\n var maxColor = math.max(math.abs(min), math.abs(max));\n var step = (maxColor - minColor) / (length + 1);\n var currentStep = step * (index + 1);\n var color;\n if (isDarker) {\n color = minColor + currentStep;\n } else {\n color = maxColor - currentStep;\n }\n return color;\n }\n function buildColorFromRGB(color) {\n return '#' + decimalToRgb(color.r) + decimalToRgb(color.g) + decimalToRgb(color.b);\n }\n function rgbToDecimal(color) {\n color = color.replace('#', '');\n var rgbColor = colorToRGB(color);\n return {\n r: rgbToHex(rgbColor.r),\n g: rgbToHex(rgbColor.g),\n b: rgbToHex(rgbColor.b)\n };\n }\n function decimalToRgb(number) {\n var result = math.round(number).toString(16).toUpperCase();\n if (result.length === 1) {\n result = '0' + result;\n }\n return result;\n }\n function colorToRGB(color) {\n var colorLength = color.length;\n var rgbColor = {};\n if (colorLength === 3) {\n rgbColor.r = color[0];\n rgbColor.g = color[1];\n rgbColor.b = color[2];\n } else {\n rgbColor.r = color.substring(0, 2);\n rgbColor.g = color.substring(2, 4);\n rgbColor.b = color.substring(4, 6);\n }\n return rgbColor;\n }\n function rgbToHex(rgb) {\n return parseInt(rgb.toString(16), 16);\n }\n function colorBrightness(color) {\n var brightness = 0;\n if (color) {\n color = rgbToDecimal(color);\n brightness = math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n }\n return brightness;\n }\n function round(value) {\n var power = math.pow(10, 4);\n return math.round(value * power) / power;\n }\n dataviz.ui.plugin(TreeMap);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n for (var i = 0; i < options.length; i++) {\n $(options[i]).off('$destroy');\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('form');\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
        ' + element.html() + '
        ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.router',\n 'kendo.view',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.mobile.scroller',\n 'kendo.popup',\n 'kendo.tooltip',\n 'kendo.drawing',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.dataviz.chart',\n 'kendo.dataviz.gauge',\n 'kendo.dataviz.barcode',\n 'kendo.dataviz.qrcode',\n 'kendo.dataviz.stock',\n 'kendo.dataviz.sparkline',\n 'kendo.dataviz.map',\n 'kendo.dataviz.diagram',\n 'kendo.dataviz.treemap',\n 'kendo.angular'\n ], f);\n}(function () {\n 'bundle all';\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}