{"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","forceWidth","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","windowOuterWidth","removeClass","hasClass","wrapResize","style","percentRegExp","test","is","addClass","boxSizing","mozBoxSizing","webkitBoxSizing","wrapper","wrapperStyle","display","position","deepExtend","destination","i","arguments","deepExtendOne","source","property","propValue","propType","propInit","destProp","ObservableArray","data","LazyObservableArray","DataSource","HierarchicalDataSource","OBJECT","constructor","Array","RegExp","isFunction","ArrayBuffer","UNDEFINED","Date","getTime","clone","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","el","isRtl","webkit","browser","mozila","mozilla","browserVersion","version","e","safari","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","msie","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","unescape","template","decodeURIComponent","error","_","m1","m2","String","fromCharCode","parseInt","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","role","templateRegExp","html","containmentComparer","a","b","contains","resizableWidget","widget","inArray","attr","focusable","isTabIndexNotNaN","nodeName","disabled","href","visible","expr","pseudos","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","themeColorValues","fillValues","postitionValues","shapeValues","sizeValues","alignValues","positionModeValues","cultures","isArray","proxy","JSON","formatRegExp","FUNCTION","NUMBER","NULL","getterCache","setterCache","slice","noDepricateExtend","src","copyIsArray","copy","name","target","deep","jQuery","isPlainObject","proto","member","base","that","subclass","apply","prototype","Object","_initOptions","_defaultPrevented","_events","bind","eventName","handlers","one","original","handler","events","eventNames","handlersIsFunction","unbind","push","unshift","trigger","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","floor","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","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","decimal","precision","pattern","literals","symbol","isCurrency","isPercent","customPrecision","formatAndPrecision","negative","integer","fraction","integerLength","fractionLength","replacement","ch","hasGroup","hasNegativeFormat","decimalIndex","sharpIndex","zeroIndex","hasZero","hasSharp","percentIndex","currencyIndex","startZeroIndex","start","exp","rounded","POINT","decimals","EMPTY","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","_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","chrome","mobileChrome","_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","opera","documentMode","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","matchMedia","pushState","history","hashChange","customElements","crios","MSPointerEvent","PointerEvent","kineticScrollNeeded","down","up","in","out","enabled","dequeue","disable","promiseShim","enable","animatedPromise","kendoStop","clearQueue","gotoEnd","stop","kendoAnimate","kendoAddClass","kendoRemoveClass","kendoToggleClass","toggle","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","isLocalUrl","url","expression","safe","getter","setter","accessor","get","set","guid","random","id","chars","roleSelector","directiveSelector","directives","selectors","triggeredByInput","tagName","onWidgetRegistered","len","logToConsole","message","console","suppressLog","log","dataSource","props","angular","componentTypes","componentType","defaults","_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","editorToolbar","elementData","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","keyDownHandler","kendoKeydown","preventKendoKeydown","keyDownCallBack","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","firstDayOfYear","lastDayOfYear","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","addYear","currentDate","nextDay","previousDay","MS_PER_HOUR","nextYear","previousYear","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","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","focusNextElement","focussable","nextElement","getWidgetFocusableElement","nextFocusable","addAttribute","attribute","removeAttribute","toggleAttribute","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","fileGroupMap","audio","video","image","txt","presentation","programming","pdf","config","zip","disc-image","getFileGroup","extension","withPrefix","extensions","fileTypeMap","groups","getFileSizeMessage","sizes","pow","selectorFromClasses","propertyToCssClassMap","registerCssClass","propName","shorthand","registerCssClasses","arr","getValidCssClass","validValue","whenAll","updateFunc","contexts","resolveValues","failed","deferred","notifyWith","remaining","Deferred","rejectContexts","rejectValues","resolveContexts","done","fail","resolveWith","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","setDefaults","path","curr","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","zoom","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","uniqueSort","unique","taskKeys","retainPosition","restore","run","jdx","children","childrenLength","effectName","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","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","easeOutBack","inner","outer","fitScale","absoluteURL","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","filters","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","batch","batchURL","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","isnullorempty","isnotnullorempty","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","XmlDataReader","idField","xmlParse","model","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","_notifyChange","ownKeys","ignoreObjectKeys","filteredObjectKeys","getOwnPropertyNames","objectKeys","getPrototypeOf","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","compare","skipItemSorting","aggregates","normalizeGroupWithoutCompare","anyGroupDescriptorHasCompare","groupDescriptors","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","group","flatGroups","indexFunction","groupIndex","itemIndex","groupsLength","indexFn","flattenGroups","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","ASCENDING","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","serializeFunctions","json","object","omitChangeEvent","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","_initializers","dirtyFields","editable","accept","isNew","functionFields","nullable","defaultValue","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","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","groupPaging","groupAllData","itemCount","subgroupCount","groupBy","groupValue","_sortForGrouping","_sortGroups","sum","average","process","customGroupSort","query","groupDescriptorsWithoutCompare","normalizedSort","groupDescriptorsWithoutSort","filterCallback","groupDescriptor","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","fromName","_wrapDataAccessBase","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_sortFields","_filter","_group","_aggregate","_total","_groupPaging","_groupsState","_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","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","rangeSpan","_getCurrentRangeSpan","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","promises","_sendSubmit","_send","when","then","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","itemIds","j","_serverGroupsTotal","_aggregateResult","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setView","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","remote","_hasExpandedSubGroups","_findGroupedRange","itemsLength","groupCount","itemsToSkip","taken","_fetchGroupItems","_fetchingGroupItems","skipped","includeParents","excludeHeader","currentItems","_expandedSubGroupItemsCount","includeCurrentItems","subGroup","endSpecified","groupItemsSkip","firstItem","lastItem","expandedSubGroupItemsCount","groupItemCount","getGroupItems","notFetched","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","totalField","totalCount","_updateRangePristineData","countAdded","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","currIdx","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","fetch","_query","next","totalPages","_pageableQueryOptions","getGroupsFlat","groupsTotal","includeExpanded","_calculateGroupsTotal","itemsField","ignoreState","_groupsTotal","countGroupRange","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","pageSkip","_originalPageSkip","_originalSize","_adjustPageSkip","_groupRangeExists","_rangeExists","prefetch","_processRangeData","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","prevRangeEnd","currentDataLength","groupMapOptions","isGroupPaged","startField","endField","_mergeGroups","_getRangesMismatch","mismatch","prevGroup","eventData","paging","sorting","filtering","_omitPrefetch","_prefetchSuccessHandler","_multiplePrefetch","prevRange","_getPrevRange","_getNextRange","availableItemsCount","_removeModelFromRange","_updateRangesLength","rangeLength","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","dropdowntree","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","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","_range","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","old","removeIndex","newValue","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","selectedValue","gantt","_isBound","scheduler","grid","badge","addLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","parseTransition","transitionRegExp","SCRIPT","TRANSITION_START","TRANSITION_END","SHOW","HIDE","ATTACH","DETACH","sizzleErrorRegExp","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","classNames","stretchedView","footer","View","renderOnInit","_createElement","wrapInSections","_renderSections","_wrap","_evalTemplate","evalTemplate","_fragments","detachOnHide","detachOnDestroy","notInitialized","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","purge","fragments","methodName","getElementById","contents","replaceWith","_wrapper","_createContent","_createHeader","_createFooter","ccontentElements","contentSelector","contentElement","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","ViewEngine","sandbox","_hideViews","rootView","layouts","viewContainer","showView","remoteViewURLPrefix","_findViewElement","reload","_createView","urlPath","wrapInner","_locate","$angular","_findViewElementById","_createSpaView","_createMobileView","defaultTransition","loader","getLayout","getLayoutProxy","modelScope","viewOptions","isJQueryPromise","isNativePromise","hub","signalr","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","CLICK_DELAY","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","minHold","_trigger","_tap","_clickTimeout","_hold","preventMove","_shouldNotMove","_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","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","ctrlKey","_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","omitOriginOffsets","_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","_isShownOnMouseEnter","_showOn","showOn","_isShownOnClick","_mouseenter","autoHide","_mouseleave","_isShownOnFocus","_blur","showAfter","hideAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","_ajaxRequest","contentLoading","_openPopup","_initPopup","_removeDescribedBy","activate","ariaId","describedBy","_positionCallout","_offset","arrow","_closeButtonClick","_closePopup","elementOffset","offsetAmount","arrayAttr","finalArray","finalDescribedbyAttr","tooltipId","currentDescribedBy","isTopLeft","isFlipped","marginRule","createPromise","promiseAll","extendStatic","__proto__","util","hex","hue2rgb","p","q","parseColor","color","BaseColor","matchNamedColor","RGB","namedColors","Bytes","HSV","HSL","DARK_TRESHOLD","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","isDark","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","append$1$1","second","arabicToRoman","roman","defined","definitionId","defId","deg","radians","DEG_TO_RAD","encodeUTF8","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","elementPadding","paddingLeft","paddingTop","parseMatrix","matrixString","matrixRegexp","Matrix","unit","transformMatrix","elementScale","matrix","parentMatrix","parentElement","multiplyCopy","setAccessor","geometryChange","getAccessor","defineAccessors","capitalized","toMatrix","transform$1","Transformation","ellipseExtremeAngles","ry","extremeX","extremeY","geometryAccessor","_observerField","defineGeometryAccessors","close$1","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","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","pointAccessor","definePointAccessors","arrayLimits","MAX_NUM","MIN_NUM","toLineParamaters","isVertical","insertPosition","reflectionPoint","scaleCopy","quadraticToCubicControlPoints","scaledPoint","controlOut","translateWith","third","controlIn","parseParameters","SPLIT_REGEX","parsePath","pathInstance","previousCommand","SEGMENT_REGEX","closePath","isRelative","ShapeMap","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","optionsAccessor","defineOptionsAccessors","swing","PI","linear","easeOutElastic","asin","renderAttr","renderAllAttr","attrs","renderStyle","isDefinition","baseUrl","hashIndex","getElementsByTagName","supportBrowser","decodeEntities","ENTITY_REGEX","innerText","alignToScreen","ctm","getScreenCTM","renderPath","ctx","segment","prevSeg","prevOut","segments","bezierCurveTo","lineTo","closed","zIndexComparer","_zIndex","addGradientStops","gradient","stops","addColorStop","exportGroup","exportRoot","svg","RootNode","skipBaseHref","rootGroup","getOrigin","Group","SVG_NS","exportImage","surfaceOptions","cors","Surface$4","suspendTracking","draw","exportSVG","slice$1$1","thing","cls","classList","setCSS","getXY","drawDOM","doOne","setTransform$1","nodeInfo","_clipbox","_matrix","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","firstElementChild","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","splitElement","makePage","pages","pageNum","cacheImages","whenImagesAreActuallyLoaded","keepTogether","adjust","tag","bottomPadding","bottomBorder","saveAdjust","isFirst","fall","tableLayout","getComputedStyle$1","breakAtElement","fallsOnMargin","splitText","firstInParent","colgroup","thead","gridHead","querySelector","repeatHeaders","doc","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","padding","pageClassName","available","nextnode","selectNodeContents","findEOP","setEnd","endOffset","li","_destructive","cloneNodes","tfoot","ol","paddingRight","beforePageBreak","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","multiPage","_ignoreMargin","canceled","drawText","pushNodeInfo","renderText","_renderElement","popNodeInfo","doStylesheet","ss","cssRules","ex","addRules","findFonts","font","splitProperty","getFontURL","styleSheet","family","bold","italic","addRule","styleSheets","getCounter","getAllCounters","incCounter","inc","_root","resetCounter","doCounters","updateCounters","counterIncrement","counterReset","parseColor$1","pending","img","images","onload","onerror","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","Image","crossOrigin","alphaNumeral","decoration","createsStackingContext","updateClipbox","intersect","emptyClipbox","cb","pseudoElt","defa","microsoft","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","getTransform","transform$$1","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","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","textOverflow","saveTextOverflow","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","actuallyGetRangeBoundingRect","rectangles","Infinity","prevLineBottom","doChunk","cc","origStart","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","startOffset","getFontHeight","textTransform","TextRect","decorate","line","ypos","underline","lineThrough","overline","align$$1","hasDecoration","selectNode","groupInStackingContext","main","_dom_zIndex","invert","mmul","b1","d1","e1","b2","d2","e2","kendoDrawing","kendoDrawingUtil","kendoUtil","HasObservers","toString$1","OptionsStore","withAccessors","Size","Element$1","PI_DIV_2","GRADIENT","paintable","IDENTITY_MATRIX_HASH","measurable","withGeometry","DEFAULT_STROKE","MAX_INTERVAL","pow$1","accessors","ElementsArray","GeometryElementsArray","withPoints","Segment","MultiPath","DEFAULT_STROKE$1","Arc","DEFAULT_FONT","DEFAULT_FILL","Text","traversable","forEachReverse","Rect$2","StopsArray","withOptions","GradientStop","Gradient","points$1","RadialGradient","easingFunctions","AnimationFactory","instance$1","PathParser","BaseNode","Surface$2","NODE_MAP","renderSVG","testFragment","testContainer","hasParser","renderSVG$1","DefinitionMap","GradientStopNode","GradientNode","LinearGradientNode","RadialGradientNode","ClipNode","DefinitionNode","DASH_ARRAYS","SOLID","BUTT","ATTRIBUTE_MAP","PathNode","ArcNode","CircleNode","GroupNode","ImageNode","MultiPathNode","RectNode","TextNode","RTL","Surface$3","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","geometry","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","SurfaceCursor","PathNode$2","ArcNode$2","CircleNode$2","ImageNode$2","MultiPathNode$2","RectNode$2","TextNode$2","instance$2","support$1","hasDocument","supportsCanvas","supportsSVG","SurfaceFactory","Surface","svg$1","canvas","inBrowser","Class$$1","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","det","scaleX","scaleY","IDENTITY","HasObservers$$1","parentObj","_clear","wrapped","TBase","superclass","staticAccessors","originPoint","distanceTo","doRound","arg0","arg1","arguments$1","minPoint","maxPoint","defineProperties","setOrigin","topLeft","topRight","bottomLeft","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","rect1","rect2","_optionsChange","prototypeAccessors","parentTransform","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","anonymous","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","ElementsArray$$1","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","arcTo","lastControlIn","cubicControlPoints","lastSegment","lineJoin","arc","_addArcSegments","pathWidth","segmentBox","fromArc","prototypeAccessors$1","toPath","metrics","_rect","traverse","childrenChange","_reparent","insertAt","removeAt","newParent","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","Group$$1","_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","Rect$$1","arg","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","_items","_options","easing","finish","abort","loop","wallTime","easingPosition","_stopped","multiPath","srcElement","observe","removeSelf","invalidate","Observable$$1","_handler","_mousemove","_visual","_enableTracking","domNode","_kendoNode","_suspendedTracking","resumeTracking","_elementOffset","_surfacePoint","coord","inverseTransform","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","BaseNode$$1","definitions","clearDefinitions","childNode","createDefinitions","attachTo","setElement","nodes","childElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","hasDefinitions","definitionChange","refUrl","renderDefinitions","mapDefinitions","baseHref","Node$$1","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","GradientNode$$1","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","mapItem","removeDefinition","defs","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","PathNode$$1","mapPosition","mapSource","renderPosition","encode","renderSource","setY","renderContent","renderTextAnchor","rtl","BaseSurface","_template","_rootElement","mouseover","mouseout","viewBox","initClip","clearClip","setClip","beginPath","setTransform","loadElements","setOpacity","globalAlpha","opactity","renderTo","getContext","invalidateHandler","_invalidate","_rescale","_devicePixelRatio","fixedScale","clearRect","shapes","_quadNode","pointShapes","QuadRoot$$1","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","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","onLoad","onError","drawImage","fillText","strokeText","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","resolveDataURL","rootElement","loadingStates","currentShape","_currentShape","implementation","hasFeature","preferred","Text$$1","_pdfRect","$el","$clone","canvases","canvas$$1","skip_ws","tok_whitespace","read_stop","tok_length","tok_percent","read_linear_gradient","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","_bindEvents","hideDelay","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","_hideClick","_tooltipLeave","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","interpolateValue","COORD_PRECISION","mousewheelDelta","setDefaultOptions","sparseArrayLimits","MIN_VALUE","autoMajorUnit","relativeValue","scaleMultiplier","DEFAULT_PRECISION","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","low","high","intlService","parseDates","dates","categoryRange","categories","autoBaseUnit","startUnit","startStep","unitSteps","nextStep","categoryLimits","span","autoBaseUnitSteps","maxDateGroups","autoUnit","FIT","autoUnitIx","BASE_UNITS","units","totalUnits","defaultBaseUnit","lastCategory","categoryIx","category","minDiff","TIME_PER_YEAR","TIME_PER_MONTH","TIME_PER_WEEK","initUnit","useDefault","autoAxisMin","narrow","axisMin","minValue","ZERO_THRESHOLD","autoAxisMax","axisMax","maxValue","limitCoordinate","COORDINATE_LIMIT","autoAxisOptions","seriesMin","seriesMax","narrowRange","autoMin","autoMax","majorUnit","autoOptions","roundToMajorUnit","remainderClose","totalAxisOptions","clearNullValues","axisOptions","userOptions","userSetMin","userSetMax","userSetLimits","minorUnit","ratio","remainder","timeUnits","applyDefaults","baseUnitTime","userMajorUnit","actualUnits","unitsToAdd","head","tail","initRange","axisCrossingValue","throwNegativeValuesError","autoAxisMin$1","autoAxisMax$1","logMaxRemainder","angularDistance","geometryTransform","__common_getter_js","ARC","AXIS_LABEL_CLICK","BLACK","CIRCLE","CROSS","DATE","DEFAULT_HEIGHT","DEFAULT_WIDTH","FORMAT_REGEX","HIGHLIGHT_ZINDEX","INSIDE","NOTE_CLICK","NOTE_HOVER","NOTE_LEAVE","OUTSIDE","TRIANGLE","WHITE","X","DEFAULT_SERIES_OPACITY","constants","defaultImplementation","IntlService","FORMAT_REPLACE_REGEX","FormatService","ChartService","current$1","DomEventsBuilder","current$2","services","HashMap","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","EmptyDateRange","DateRange","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","isPannable","pannable","lock","_key","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","initUserOptions","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","runningTotal","createGradientOverlay","gradientOptions","overlay","createGradient","supportsPointInactiveOpacity","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","cleanGradients","_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","childAlias","noteTemplate","aliasFor","wrapperBox","linePoints","createLine","defaultVisual","eventArgs","over","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","labelsCount","normalizeLabelRotation","labelOptions","labelContext","clearLabels","autoRotateLabels","createAxisLabel","clearTitle","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","createPlotBandLabel","textbox","labelTemplate","createGridLines","axisLineVisible","linePos","lineOptions","minorGridLines","majorGridLines","labelSize","sizeFn","titleSize","rootBox","maxLabelSize","arrangeTitle","arrangeLabels","arrangeNotes","getLabelsTickPositions","labelTickIndex","tickIx","firstTickPosition","nextTickPosition","positionStart","positionEnd","labelsBetweenTicks","positionLabel","labelOffset","labelBox","labelX","labelY","autoRotateLabelAngle","slotWidth","limit","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","templateContext","tmpl","defaultText","lastLabel","maxLabelOffset","startTick","endTick","offsetField","startPosition","endPosition","maxStartOffset","maxEndOffset","limitRange","rangeSize","valueRange","justified","prepareUserOptions","years","weeks","_ticks","categoriesHash","srcCategories","definedMin","definedMax","rangeIndices","totalRange","totalRangeIndices","roundedRange","_seriesMax","scaleOptions","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","tickIndices","stepSize","indices","getTickPositions","hasMinor","_hash","filterOutOfRangePositions","slotBox","singleSlot","limitSlot","limittedSlot","categoryIndex","pointCategoryIndex","getCategory","totalIndex","categoryAt","categoriesCount","translateRange","zoomRange","rate","totalMin","totalMax","scaleRange","hideOutOfRangeNotes","pan","pointsRange","diffStart","diffEnd","rangeMin","rangeMax","_categoriesMap","currentRangeIndices","mapCategories","map$$1","displayIndices","displayRange","valuesCount","dateAt","roundToBaseUnit","lowerEnd","expandEnd","roundToTotalStep","justifyEnd","valueStart","displayStart","valueEnd","displayEnd","minIdx","maxIdx","_indices","_values","upper","roundedStep","dataRange","maxDivisions","divisionOptions","dataRangeOptions","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","divisionRange","rangeLabels","rounds","totalLimits","panRange","isEmpty","datesRange","indicesRange","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","createRangeLabels","arrangeRangeLabels","position$1","autoRotateRangeLabels","hideOverlappingLabels","rangeLabel","firstRangeLabel","lastRangeLabel","i$1","overlaps$1","unitFormat","dateFormats","createLabel","startText","endText","rotateLabel","dateRange","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","SASS_THEMES","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","seriesTemplate","SERIES_COLORS","autoTheme","mapColor","varName","queryStyle","hook","theme","setInactiveOpacity","seriesTypes","inactiveOpacity","defaultFont","titleFont","paneTitleFont","labelFont","letterPos","letter","seriesPos","unsetColor","seriesColors","fuse","arr1","arr2","gaugeBaseTheme","diagramBaseTheme","shapeDefaults","hover","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","findAxisByName","ChartAxis","countNumbers","getField","row","evalOptions","dryRun","needsEval","excluded","MAX_EXPAND_DEPTH","seriesCount","toGeometryPoint","lintPoint","stepAxis","stepDir","GeometryPoint","anyHasZIndex","hasGradientOverlay","areNumbers","wrapData","seriesItem","paneID","ID","appendIfNotNull","segmentVisible","pointVisibility","bindSegments","SeriesBinder","bindPoint","valueFields","equalsIgnoreCase","filterSeriesByType","currentSeries","getDateField","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","seriesMissingValues","missingValues","AREA_REGEX","INTERPOLATE","hasValue$1","findNext","pointHasValue","outPoint","getter$$1","hasItem","createOutOfRangePoints","hasMinPoint","hasMaxPoint","_outOfRangeMinPoint","_outOfRangeMaxPoint","isSingleAxis","axisGroupBox","axisBox","paneAnchor","setValue","updateAxisOptions","targetOptions","axesOptions","axisIndex","groupSeries","axisIx","acceptKey","mouseKey","altKey","toChartAxisRanges","axisRanges","axisRange","createDiv","closestHandle","updateAxisOptions$1","yAxis","xAxis","tooltipAlignment","RAD_60","RAD_30","uat","ub","xComparer","groupBySeriesIx","seriesSegments","seriesIx","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","DATA_FIELDS","triggerPaneRender","panes","notifyRender","datavizConstants","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","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","LEGEND_ITEM_LEAVE","SERIES_CLICK","SERIES_HOVER","SERIES_OVER","SERIES_LEAVE","PLOT_AREA_CLICK","PLOT_AREA_HOVER","PLOT_AREA_LEAVE","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT_END","RENDER","SHOW_TOOLTIP","HIDE_TOOLTIP","PANE_RENDER","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","allPaneAxes","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","MOUSELEAVE","MOUSEMOVE_DELAY","Chart","_axis","chartsVisual","chartContainer","_pane","_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","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","labelText","_rendered","createMarker","formatValue","markerBorder","markerBox","_childBox","childBox","noteTargetBox","reflowLabel","defaultColor","highlightVisual","halfSize","tooltipAnchor","horizontalAlign","verticalAlign","clipBox","overlapsBox","unclipElements","toGeometryPoints","segmentVisual","coords","getNearestPoint","calculateStepPoints","stepPoint","previousPoint","curveProcessor","curve","renderSegments","sortedPoints","pointCount","_segments","sortPoints","createSegment","_addSegment","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","_previousSegmentPoint","_createGapStackPoint","segmentIx","seriesIdx","chartAxisRanges","chartRange","textBox","alignToClipBox","parentBox","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","appendAxisAt","appendChart","removeAxis","removeChart","allAxes","vGridLines","hGridLines","axisValueField","length$1","axis$1","lineBox$1","paneIndex","initSeries","crosshairs","createPanes","createCrosshairs","currentPane","paneDefaults","paneOptions","panesLength","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","detachLabels","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","detachAxisGroupLabels","labelAxis","labelAxisCount","createLabelAxis","onAxis","_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","_currentPointsCache","_seriesPointsCache","categoryField","aggregateSeries","filterSeries","outOfRangePoints","clearSeriesPointsCache","seriesSourcePoints","srcData","getFn","aggregator","categoryItem","categoryIdx","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","updatedAxes","marqueeColor","marquee","_marquee","removeElement","setStyles","zoomPane","_zoomPane","_zoomPaneClipBox","_selectionPosition","elementOffset$$1","selectionPosition","_updateAxisRanges","updateRanges","legendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","_unsetActivePoint","createContainers","createLegendTitle","createItems","userAlign","itemsContainer","hasTitle","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","_registry","registry","_dateAxis","initOptions","createElements","_index","onPane","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","leftMask","rightMask","borderLeftWidth","borderRightWidth","mousewheel","_mousewheelHandler","_mousewheel","_domEvents","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","_takeDistance","amount","boxX","labelDistance","boxY","hAlignLabel","connectorsColor","connectorLine","sr","crossing","_connectorLines","pointInCircle","pieCenter","bboxBottom","autoFit","reverseValue","originalX","sector_center","createPieChart","pieChart","totalSize","seriesWithoutSize","holeSize","currentSeries$1","createDonutChart","donutChart","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","valueRadius","_polarAxisCenter","centerSegment","_hasMissingValuesGap","scatterChart","isFirstDataPoint","isLastDataPoint","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","_initHandlers","_initSurface","bindCategories","fontLoaded","_redraw","_attachEvents","_setElementClass","seriesCopies","applySeriesColors","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","_model","findPaneByName","findPaneByIndex","seriesName","categoryName","togglePointsHighlight","_sharedTooltip","_surfaceWrap","renderAs","_destroySurface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","_getModel","_destroyView","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","_navState","_cancelDomEvents","exportOptions","currentOptions","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_toggleDragZoomEvents","allowDrag","allowZoom","_dragZoomEnabled","_touchAction","_toggleDomEvents","drag","domEvents","toggleDrag","toggleZoom","_createSharedTooltip","seriesColor","_createPlotArea","_modelOptions","skipSeries","selections","_selectStart","_selectEnd","_clickHandler","_mouseover","_mouseout","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","_hoveredPoint","hovered","_stopChartHandlers","_gestureDistance","_zooming","previousGestureDistance","mousewheelZoom","_drawingChartElement","leave","_startNavigation","_suppressHover","ranges$1","_endNavigation","prevented","totalDelta","chartEvent","_getChartElement","_elementPadding","_padding","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","activePoint","multipleSeries","hasInactiveOpacity","_activePoint","_hasInactiveOpacity","_updateHoveredPoint","_displayTooltip","_displayInactiveOpacity","_activeChartInstance","_updateSeriesOpacity","_applySeriesOpacity","highlightPoints","inactivePoints","chartInstance","_chartInstanceFromPoint","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","hoveredPoint","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","activeSeries","hasDefaultInactiveOpacity","defaultInactiveOpacity","seriesInactiveOpacity","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","overPlotArea","_trackCrosshairs","pointArgs","hoverArgs","_tooltipCategoryIx","_sharedHighlight","hideElements","keepTooltipOpen","_deferRedraw","_clearRedrawTimeout","_redrawTimeout","bindCategoryAxisFromSeries","dataIx","dataRow","uniqueCategories","bindable","_isBindable","transitionsState","updateMouseMoveHandler","applyOptions","setDirection","setIntlService","noTransitionsRedraw","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","originalChartArea","_seriesOptions","_initChart","_createChart","_isRtl","_onInit","_initTooltip","tooltips","_crosshairTooltips","_getCrosshairTooltip","_showTooltip","_hideTooltip","_onRender","_copyMembers","_tooltipleave","_onLegendItemClick","_legendItemClick","_activеChartInstance","_bindData","groupedSeries","grouped","seriesVisibility","applyByGroup","applyByIndex","seriesData","categoriesData","_bindCategoryAxis","PDFMixin","persistSeriesVisibility","saveState","mobileScrollerSelector","_mobileScroller","_closeTooltipHandler","_closeTooltip","_clearShowTimeout","sharedTemplate","_ensureElement","showTimeout","_sharedContent","_pointContent","forceHide","_hideElement","nameColumn","colorMarker","colspan","fadeOut","always","tooltipTemplate","xLow","xHigh","yLow","yHigh","_chart","_filterPoints","_clearFields","toggleVisibility","hasFilter","_filterData","buildLabelElement","Path$1","styleGeometry","styleBox","getRange","renderAxisTick","tickRenderOptions","tickPath","Path$2","renderTicks","tickGroup","drawTicks","tickAngles","tickStart","tickEnd","Group$5","getRadiusX","Path$5","rangeSegment","DrawingGroup","DrawingPath","ANGULAR_SPEED","LINEAR_SPEED","ARROW","ARROW_POINTER","BAR_POINTER","DEFAULT_LINE_WIDTH","DEGREE","RADIAL_POINTER","RADIAL_RANGE_POINTER","DEFAULT_MARGIN","Gauge","Group$2","LinearScale","Pointer","LinearPointer","ArrowLinearPointerAnimation","Point$1","Path$3","ArrowLinearPointer","BarLinearPointerAnimation","Group$3","Path$4","BarLinearPointer","DEFAULT_MIN_WIDTH","DEFAULT_MIN_HEIGHT","Group$1","LinearGauge","GEO_ARC_ADJUST_ANGLE","RadialScale","RadialPointerAnimation","CAP_SIZE","Group$6","Path$6","RadialPointer","Group$4","RadialGauge","ArcScale","MAX_DURATION","RangePointerAnimation","RangePointer","ArcGauge","defaultStartAngle","CircularGauge","contextService","pointerValue","_setValueOptions","_draw","_visuals","allValues","arrayValues","_toggleTransitions","_surfaceSize","gaugeArea","_createGaugeArea","_createModel","_gaugeAreaMargin","currentTheme","areaGeometry","_surfaceElement","_getSize","defaultSize","_defaultSize","renderLabels","scaleLine","renderLine","scaleTicks","renderRanges","linePath","_oldValue","repaint","track","pointerBox","pointerRangeBox","trackBox","trackSize","pointerHalfSize","getElementOptions","_margin","toScale","translateX","translateY","pointerShape","elementOptions","newPoints","oldPoints","speed","minSlot","sizeAxis","pointerPath","oldShape","renderTrack","trackOptions","bboxX","bboxY","_shrinkScaleWidth","_getBox","_alignElements","_shrinkElements","_buildVisual","scaleElements","pointerType","plotAreaBox","scaleBox","renderArc","labelElements","repositionRanges","hasRanges","ticksSize","isInside","hasLabelElements","paddingWidth","paddingHeight","labelAngle","labelPos","labelElement","prevLabelPos","labelTransform","labelsGroup","rangeDistance","setRadiusX","setRadiusY","rangeRadius","getRangeRadius","rangeSegments","segmentsCount","rangeGeom","allTicks","tickArc","majorTickAngles","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","minor","newPoint","xDiff","yDiff","newAngle","oldAngle","setAngle","_renderNeedle","_renderCap","capSize","cap","needleColor","needlePath","capColor","_initialPlotArea","alignScale","_buildPointers","midDiff","oldDiff","getDiff","staleFlag","getPlotBox","scaleArc","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","pointersArr","rangeLineCap","placeholderRangeAngle","geometry$$1","setEndAngle","setStartAngle","addRange","startColor","currentColor","rangeColor","centerLabelPosition","yLimit","lowerName","createExportMethod","ArcGaugeWidget","_centerElement","RadialGaugeWidget","LinearGaugeWidget","CircularGaugeWidget","exportMethods","_createInstance","_copyFields","gaugeType","_gaugeType","_centerTemplate","centerElement","centerTemplate","_getCenterElement","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","IMAGE","SWISS_QR","crossPattern","squarePattern","DEFAULT_LOGO_SIZE","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","_hasCustomLogo","_renderLogo","_isSwiss","_renderSwissCode","qrSize","logoSize","_getLogoSize","logoUrl","imageUrl","imageRect","crossSize","crossOffset","_renderShape","matrixSize","defautLogoSize","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","clean","_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","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","geo","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","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","DEFAULT_ZOOM_RATE","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","_doubleTap","_scrollOffset","_panComplete","_panEndTS","_scaleToZoom","gestureCenter","centerLocation","tiles","_resetScroller","xBounds","yBounds","_renderLayers","scrollWrap","toZoom","postZoom","fromZoom","Range","rangeIntegerScale","Utils","findRadian","sngXComp","sngYComp","Easing","Ticker","EPSILON","isNearZero","isDefined","isUndefined","has","isBoolean","isType","simpleExtend","initArray","serializePoints","res","deserializePoints","randomInteger","DFT","getMatrixAngle","getMatrixScaling","sX","sY","findAngle","thisRef","what","fold","constraint","bisort","sortfunc","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","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","_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","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","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","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","OVERFLOW_ANCHOR","Item","Button","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","ToolBarSpacer","TemplateItem","OverflowTemplateItem","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","SPACER_CLASS","SPACER","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","ARIA_DISABLED","ARIA_PRESSED","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","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","buttonGroupInstance","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","paddingEnd","splitContainer","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","isOnlyOverflowAnchor","lastItemNotOverflowAnchor","isFirstTool","prevFocusable","isOverflowAnchor","not","_getPrevFocusable","_preventNextFocus","_getNextElement","directionNumber","searchIndex","focusableItem","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","itemOuterWidth","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","mapChangedItems","itemsToMatch","selectedLength","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","percentageUnitsRegex","FOCUSED","HOVER","LOADING","GROUPHEADER","ITEMSELECTOR","LABELIDPART","CASCADE","SELECTED","BLUR","FOCUS","FOCUSOUT","HIDDENCLASS","isIE","quotRegExp","alternativeNames","ComboBox","DropDownList","MultiColumnComboBox","List","_isSelect","ul","aria-hidden","_listMousedown","columns","_columnsHeader","_header","_noData","_footer","_accessors","_initValue","footerTemplate","headerTemplate","noDataTemplate","noData","_renderFooter","_renderNoData","_focused","_editable","_angularElement","colGroup","currentColumn","columnsHeaderTemplate","currentWidthInt","widthStyle","columnsHeader","_listOptions","changeEventOption","_listChange","listBoundHandler","_listBound","focusedElm","inputId","labelElm","labelledBy","_generateLabelId","_activateItem","deactivate","_deactivateItem","groupTemplate","fixedGroupTemplate","ariaLabel","ariaLabelledBy","_initList","listOptions","selectedItemChange","VirtualList","_setListValue","_updateSelectionState","filterInput","_isFilterEnabled","_hideClear","_showClear","_clearValue","_clearText","_accessor","_customOption","enforceMinLength","highlightFirst","_clearFilter","_filterSource","newExpression","dataSourceState","isMultiColumnFiltering","filterFields","resetPageSettings","removed","_clearFilterExpressions","_pushFilterExpression","_cascading","setDSFilter","filtersToRemove","_toggleNoData","_toggleHeader","groupHeader","_allowOpening","_old","_ignoreCase","widgetOptions","fromFilter","_buildExpression","_open","_clearButton","clearButton","_inputValue","_typingTimeout","minLength","_emptySearch","_searchByWord","_unbindDataSource","_form","_resetHandler","selectedDataItems","_text","_aria","autocomplete","suggest","aria-owns","aria-controls","_ariaLabel","labelId","inputElm","_userTriggered","_isValueChanged","_valueBeforeCascade","_oldIndex","isFiltered","_typing","typing","_enable","_dataValue","_offsetHeight","_height","popups","footerHeight","_openHandler","_adjustListWidth","autoWidth","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","_calculatePopupHeight","_calculateColumnsHeaderPadding","_refreshScroll","enableYScroll","_resizePopup","_popup","_toggleHover","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","userTriggered","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","_getNormalizedDataItem","isIndex","hasOptionLabel","optionLabel","getElementIndex","dataItemByIndex","_getNormalizedSelectCandidate","normalizedCandidate","moveIndex","selectCandidate","activeFilter","shouldTrigger","_fetch","_get","_focusElement","focusout","scrollWith","_fetchData","dataText","dataValue","htmlElement","formId","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","_touchHandlers","before","_optionID","_selectedIndices","_dataItems","_getter","_templates","_onScroll","_scrollId","_renderHeader","_fixedHeader","endY","tapPosition","_touchTriggered","_triggerClick","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","focusIndex","skipUpdate","_skipUpdate","filtered","singleSelection","selectedIndices","uiSelectedIndices","added","_deselectFiltered","_deselect","_valueComparer","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","templateText","templates","_normalizeIndices","newIndices","_firstVisibleItem","itemHeight","lastChild","previousSibling","isGrouped","visibleItem","_renderItem","notFirstItem","hasColumns","isLastGroupedItem","_renderColumns","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","renderColumns","GROUPITEM","isActivePromise","WRAPPER","VIRTUALLIST","CONTENT","LIST","HEADER","VIRTUALITEM","ITEM","HEIGHTCONTAINER","LISTBOUND","VIRTUAL_LIST_NS","_fetching","_selectedDataItems","_selectedIndexes","_rangesList","_promisesList","_renderItems","_triggerListBound","_selectable","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_removeSelectedDataItem","_forcePrefetch","shouldClear","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","_getIndecies","deferredRange","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","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","assign","normalizeIndex","sameCharsOnly","nsFocusEvent","DISABLED","READONLY","DEFAULT","STATEDISABLED","ARIA_READONLY","CLICKEVENTS","HOVEREVENTS","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_prev","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","_attachAriaActiveDescendant","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","filterTitle","_inputWrapper","_arrow","_focusFilter","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_selectValue","_filterPaste","_search","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","_keypress","handled","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","_last","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","aria-haspopup","aria-autocomplete","SELECTOR","DOMelement","accesskey","unselectable","aria-expanded","getElements","optionLabelText","elementPosition","firstRect","secondRect","Selectable","ARIASELECTED","SELECTABLE","UNSELECT","UNSELECTING","INPUTSELECTOR","supportEventDelegation","_lastActive","aria","inputSelectors","ignoreOverlapped","addIdToRanges","_isElement","whichCode","buttonCode","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","rangeSelectedAttr","_currentlyActive","toSelect","_collidesWithActiveElement","marqueeRect","activeElements","elemRect","activeElementRect","tempRect","selectElement","selectedRanges","rangeId","mapLocation","selectedSingleItems","preventNotify","resetTouchEvents","continuousItems","selectableMode","asLowerString","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","otherMonth","weekNumberTemplate","cellTemplate","emptyCellTemplate","otherMonthTemplate","otherMonthCellTemplate","createDate","disableDates","OTHERMONTH","isInRange","date1","date2","year1","getToday","restrictValue","shiftArray","daysBetweenTwoDates","endDate","fromDateUTC","endDateUTC","addDaysToArray","numberOfDays","fromDate","mousetoggle","MOUSEENTER","prevent","dateObject","getCalendarInfo","extractFormat","MONTH","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","toDateObject","transitionOrigin","KEYDOWN_NS","SLIDE","CENTURY","NAVIGATE","OTHERMONTHCLASS","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","PREVARROW","NEXTARROW","ARIA_SELECTED","ARIA_LABEL","decade","century","HEADERSELECTOR","CLASSIC_HEADER_TEMPLATE","MODERN_HEADER_TEMPLATE","Calendar","_viewWrapper","hasFooter","_today","_focusView","focusOnNav","_setCurrent","_selectDates","_addClassProxy","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","classic","linksSelector","contentClasses","modern","_destroySelectable","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","viewWrapper","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","_selectCell","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","_toggleSelection","_cellsBySelector","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","currentDateIndex","_dateInView","firstDateInView","lastDateInView","_isNavigatable","cellIndex","isDisabled","focusedDate","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","insertAfter","_horizontal","viewWidth","float","margin-left","_vertical","_selectedCell","actionAttr","_todayClick","firstDayCurrentMonth","isBigger","isTodayDisabled","todayClass","_todayClass","_updateAria","ariaTemplate","valueType","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","month1","month2","year2","setMonth","viewsEnum","approximateStringMatching","oldText","oldFormat","newText","deletedSymbol","oldTextSeparator","knownSymbols","customDateTime","INPUT_EVENT_NAME","STATEDEFAULT","STATEINVALID","DateInput","insidePicker","weekday","hour","minute","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","stringAndFromat","toPair","_oldText","_format","_paste","_input","_mouseUp","navigationOnly","valid","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","keycode","modifyPart","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","matcher","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","newMonth","currentChar","lastDateOfMonth","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","ARIA_EXPANDED","ARIA_HIDDEN","DateView","omitPopup","dateDiv","_dateViewID","_calendar","popupHovered","selectIsClicked","disabledDate","_initialOptions","dateView","_updateARIA","_icon","_createDateInput","_update","ARIATemplate","dateInput","_dateInput","_dateIcon","dateChanged","valueUpdated","textFormatted","stopImmediatePropagation","isSameType","optionsValue","_ariaTemplate","FLOATINGLABELCONTAINER","NOCLICKCLASS","STATEREADONLY","FloatingLabel","useReadOnlyClass","buttonHtml","CLASS_ICON","truncate","placeholderSupported","INPUT","SPIN","TOUCHEND","SYMBOL","LABELCLASSES","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_focusin","selectValue","_label","restrictDecimals","spinners","selectOnFocus","upArrowText","downArrowText","_toggleText","_upArrowEventHandler","_downArrowEventHandler","_inputLabel","_spin","_upArrow","_downArrow","_keyup","_inputHandler","floatingLabel","_arrowsWrap","_placeholder","aria-valuemin","aria-valuemax","adjusted","_adjust","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_getFactorValue","_culture","_removeInvalidState","CLASSNAME","accessKey","_numPadDot","_step","_cachedCaret","decimalSeparator","minInvalid","_isPasted","_numericRegex","_blinkInvalidState","_addInvalidState","_invalidStateTimeout","fractionRule","_separator","_floatRegExp","rounder","isNotNull","_floatingLabelContainer","DOMElement","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","isLabelFor","SUMMARYTEMPLATE","Validator","INVALIDMSG","INVALIDINPUT","VALIDINPUT","VALIDATIONSUMMARY","INVALIDLABEL","MESSAGEBOX","ARIAINVALID","ARIADESCRIBEDBY","emailRegExp","urlRegExp","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","allowSubmit","validateOnInit","validateAttributeSelector","_errorTemplate","errorTemplate","_summaryTemplate","validationSummary","_inputSelector","_checkboxSelector","_errors","_isValidated","_validateOnInit","required","email","dateCompare","noNameCheckbox","namedCheckbox","checkbox","radio","raise","validateOnBlur","_allowSubmit","_checkElement","validateInput","inputs","invalid","isValid","showValidationSummary","lbl","messageText","messageLabel","wasValid","lblId","inputWrap","inputLabel","errorId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","_associateMessageContainer","hideMessages","_disassociateMessageContainers","hideValidationSummary","locators","messageLocators","locate","ruleKey","nonDefaultMessage","customMessage","_getInputNames","_errorsByName","inputNames","_renderSummary","_summaryClick","errorsList","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","attributeName","validation","DATATYPE","BINDING","specialRules","AUTOCOMPLETEVALUE","addIdAttribute","convertItems","getEditorTag","checkboxes","addValidationRules","modelField","renderHiddenForMvcCheckbox","addHidden","shouldRenderHidden","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","kendoEditors","editors","kendoNumericTextBox","kendoDatePicker","kendoEditor","editor","editorOptions","tagElement","mobileEditors","Editable","_isMobile","_validateProxy","_validate","clearContainer","skipFocus","isValuesEditor","isCustomEditor","isKendoEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","toInt","constrain","normalizedValue","executableScript","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowResizing","wnd","_preventDragging","_draggable","KWINDOWRESIZEHANDLES","dragstart","dragend","addOverlay","removeOverlay","WindowDragging","dragHandle","dragcancel","MODAL_NS","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KDIALOGCONTENT","KOVERLAY","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","INLINE_FLEX","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","RESIZEEND","RESTORE","KENDOKEYDOWN","DATADOCOVERFLOWRULE","ZINDEX","MINIMIZE_MAXIMIZE","KPIN","KUNPIN","PIN_UNPIN","TITLEBAR_BUTTONS","REFRESHICON","WINDOWEVENTSHANDLED","zero","SIZE","small","medium","large","Window","windowContent","windowFrame","globalWindow","isVisible","suppressActions","actions","containment","_createWindow","_dimensions","minTop","minLeft","maxTop","maxLeft","_overlay","_buttonEnter","_buttonLeave","_windowActionHandler","_keydownContent","windowInstance","pinned","pin","aria-labelledby","_onDocumentResize","_marker","_tabKeyTrap","maxHeight","sizeClass","contentBoxSizing","lrBorderWidth","tbBorderWidth","_isPinned","_updateBoundaries","containmentTop","containmentLeft","_animationOptions","basicAnimation","resizing","toggleMaximization","resizeHandle","_actions","titlebar","windowSpecificCommands","cachedOptions","_containerScrollTop","_containerScrollLeft","_enableDocumentScrolling","fade","autoFocus","isMaximized","isMinimized","_closable","_close","newWidth","newHeight","unpin","maximize","minimize","preventScroll","_stopDocumentScrolling","_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","windowElements","modals","_object","newTop","newLeft","documentWindow","_scrollIsAppended","encoded","titleBar","titleElement","scrollContainer","otherModalsVisible","overlayFx","showOptions","containmentContext","Fade","fadeIn","_removeOverlay","suppressAnimation","hideOverlay","hideOptions","systemTriggered","defaultPrevented","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","openAnimation","originalZIndex","windowObject","zIndexNew","shouldRestrictTop","restoreOptions","_sizingAction","actionId","$body","$html","_storeOverflowRule","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","win","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","leftRtlOffset","scrollOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","_finishDrag","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","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","_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","doubleTap","_mouseMove","_mouseDown","_syncHandler","_pauseMouseHandlers","_eventPositions","_meta","_createToolBar","ctrlPressed","focused","documentToModel","initialCenter","_gesture","_initialCenter","zoomedPoint","documentToView","updateZoom","_getValidZoom","_panTransform","_updateAdorners","pointPosition","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","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","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","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","rangePickerModels","rangePickerStartModel","rangePickerEndModel","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","DateRangePicker","_startDateInput","_endDateInput","RangeSlider","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","mo","disconnect","prevClassList","MutationObserver","changes","chg","currClassList","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","encOpen","encClose","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","ScrollView","ActionSheet","Switch","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","_checkBoxSelection","angularDataItem","templateSettings","terminal","pre","post","_scroller","kAttr","MobileScrollView","Pager","templateDirectives","templateName","outerHTML"],"mappings":"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,EAASiiC,EAAWp8B,GAClD,GAAI8P,GAAU3V,EAAQmM,KAAK81B,IAAc,EACrCtsB,GAAQxP,QAAQN,GAAS,EACzB1F,GAAM6hC,aAAahiC,EAASiiC,EAAWp8B,GAEvC1F,GAAM+hC,gBAAgBliC,EAASiiC,EAAWp8B,IAGlD1F,GAAMiiC,aAAe,SAAUC,GAC3B,GAAIC,GAAQniC,GAAMoiC,kBAAkBF,IAAeA,CACnD,OAAOjiC,IAAQqoB,YAAc7pB,EAAO6pB,WAAW6Z,GAAOxkB,SAE1D3d,GAAMoiC,kBAAoB,SAAUC,GAChC,OACIC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,qBACNC,GAAM,uBACRL,IAENriC,GAAM2iC,cACFC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAEJC,OACI,OACA,OACA,OACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,QAEJC,OACI,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,SAEJC,KACI,OACA,QACA,OACA,SACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QAEJC,cACI,OACA,OACA,OACA,OACA,SAEJ3/B,MACI,OACA,OACA,SAEJ4/B,aACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,MACA,OACA,OACA,UAEJC,KAAM,QACNC,QACI,OACA,OACA,OACA,OACA,OACA,OACA,UACA,OACA,QAEJC,KACI,MACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,UACA,KACA,OACA,SAEJC,cACI,OACA,OACA,SACA,OACA,OACA,OACA,SAGRrjC,GAAMsjC,aAAe,SAAUC,EAAWC,GAArB,GAOR7gC,GACD8gC,EAPJC,EAAc1jC,GAAM2iC,aACpBgB,EAAS7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ASi+B,IAC7Bj+B,GAASk+B,IACTH,EAAmBG,EAAeD,KAO1D,QAASI,IAAkBC,GACvB,IAAK,GAAIxlK,GAAM,EAAGA,EAAMwlK,EAAMvrK,OAAQ+F,IAClCwlK,EAAMxlK,GAAKylK,eAhvXtB,GAEO9/I,IACAzsB,GACAsnD,GACAklH,GACAl7C,GACAyd,GACAtjE,GACAqf,GACAC,GACAC,GACA59D,GACA0rH,GACAb,GACAc,GACAt8H,GACA6Q,GACA0qH,GACAG,GACAhJ,GACA2I,GACAx0C,GACA/0E,GACA9d,GACA0pI,GACA3xC,GACAgnC,GACA9B,GACAmB,GACAzhI,GACAlI,GACAggG,GACA8oC,GACAlqI,GACAq3B,GACAqpE,GACA+pC,GACAsM,GACAR,GACAhM,GACAmO,GACAjoG,GACAu5F,GACA7rH,GACAgsH,GACAqN,GACAlB,GACAx/H,GACA8pF,GACAhsE,GACA6sE,GACAkpC,GACAtpC,GACAu0C,GACA/zC,GACArkG,GACAorB,GACAmzF,GACA7yE,GACAq+E,GACA5X,GACA1d,GACA43B,GACAm4C,GACA17H,GACA46H,GA+BAyH,GAUAC,GAkBAC,GA8EAjG,GAiHAkG,GACAC,GACAC,GACAC,GACAC,GA2GArlK,GACAslK,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACA1yJ,GACAqsJ,GACAsG,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAaAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAxxF,GACAyxF,GACAC,GACAC,GACAC,GACAC,GACAC,GACAx5F,GACAy5F,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GA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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, noDepricateExtend = function () {\n var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;\n if (typeof target === 'boolean') {\n deep = target;\n target = arguments[i] || {};\n i++;\n }\n if (typeof target !== 'object' && !jQuery.isFunction(target)) {\n target = {};\n }\n if (i === length) {\n target = this;\n i--;\n }\n for (; i < length; i++) {\n if ((options = arguments[i]) != null) {\n for (name in options) {\n if (name == 'filters' || name == 'concat' || name == ':') {\n continue;\n }\n src = target[name];\n copy = options[name];\n if (target === copy) {\n continue;\n }\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && jQuery.isArray(src) ? src : [];\n } else {\n clone = src && jQuery.isPlainObject(src) ? src : {};\n }\n target[name] = noDepricateExtend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n };\n kendo.version = '2021.2.616'.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 var exp = customPrecision ? number.toExponential(precision) : number.toExponential();\n return exp.replace(POINT, numberFormat[POINT]);\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 (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 && format[2]) {\n format = format[2];\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 var rounded = round(number, sharpIndex, negative);\n while (rounded.charAt(rounded.length - 1) === ZERO && sharpIndex > 0 && sharpIndex > zeroIndex) {\n sharpIndex--;\n rounded = round(number, sharpIndex, negative);\n }\n idx = sharpIndex;\n } else if (hasZero && idx < zeroIndex) {\n idx = zeroIndex;\n }\n }\n }\n number = round(number, idx, negative);\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, negative) {\n precision = precision || 0;\n value = value.toString().split('e');\n value = Math.round(+(value[0] + 'e' + (value[1] ? +value[1] + precision : precision)));\n if (negative) {\n value = -value;\n }\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 = matches[0][0] + minutesOffset;\n minutesOffset = parseInt(minutesOffset, 10);\n if (isNaN(minutesOffset) || outOfRange(minutesOffset, -59, 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 calendar = culture.calendar || culture.calendars.standard;\n var patterns = 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 percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, parent = element.parent(), windowOuterWidth = outerWidth(window);\n parent.removeClass('k-animation-container-sm');\n if (!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), forceWidth = element.hasClass('k-tooltip') || element.is('.k-menu-horizontal.k-context-menu');\n percentage = percentWidth || percentHeight;\n if (!percentWidth && (!autosize || autosize && width || forceWidth)) {\n width = autosize ? outerWidth(element) + 1 : outerWidth(element);\n }\n if (!percentHeight && (!autosize || autosize && height) || element.is('.k-menu-horizontal.k-context-menu')) {\n height = outerHeight(element);\n }\n element.wrap($('
').addClass('k-animation-container').css({\n width: width,\n height: height\n }));\n parent = element.parent();\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 wrapResize(element, autosize);\n }\n if (windowOuterWidth < outerWidth(parent)) {\n parent.addClass('k-animation-container-sm');\n wrapResize(element, autosize);\n }\n return parent;\n }\n function wrapResize(element, autosize) {\n var percentage, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, 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 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 && (!kendo.isFunction(window.ArrayBuffer) || propInit !== ArrayBuffer)) {\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.indexOf('auto') > -1 || overflow.indexOf('scroll') > -1;\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var browserVersion = support.browser.version;\n var el, isRtl;\n if (element instanceof $ && value !== undefined) {\n element.each(function (i, e) {\n scrollLeft(e, value);\n });\n return;\n } else {\n el = element instanceof $ ? element[0] : element;\n }\n if (!el) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && (mozila || webkit) && value > 0) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit && (browserVersion < 85 || support.browser.safari)) {\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] || '0').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|crios)[ \\/]([\\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 (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.matchMedia = 'matchMedia' in window;\n support.pushState = window.history && window.history.pushState;\n support.hashChange = 'onhashchange' in window;\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome, mobileChrome = support.browser.crios, mozilla = support.browser.mozilla, safari = support.browser.safari;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && 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 function unescape(value) {\n var template;\n try {\n template = window.decodeURIComponent(value);\n } catch (error) {\n template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function (_, m1, m2) {\n return String.fromCharCode(parseInt('0x' + (m1 || m2), 16));\n });\n }\n return template;\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 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 unescape: unescape,\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, chars = 'abcdef';\n id += chars[Math.floor(Math.random() * Math.floor(chars.length))];\n for (i = 1; 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 var props;\n if (options) {\n props = (that.componentTypes || {})[(options || {}).componentType];\n }\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, that.defaults, props || {}, 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 if (that._events && that._events[e]) {\n delete that._events[e];\n }\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, source) {\n var result = {}, option, value, role = element.getAttribute('data-' + kendo.ns + 'role');\n for (option in options) {\n value = parseOption(element, option);\n if (value !== undefined) {\n if (templateRegExp.test(option) && role != 'drawer') {\n if (typeof value === 'string') {\n if ($('#' + value).length) {\n value = kendo.template($('#' + value).html());\n } else if (source) {\n value = kendo.template(source[value]);\n }\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, $.extend({}, widget.fn.options, widget.fn.defaults)), 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 'breadcrumb'\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 = kendo.scrollLeft(container);\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, elementData = element.data('kendoView');\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (role === 'editortoolbar') {\n var editorToolbar = element.data('kendoEditorToolbar');\n if (editorToolbar) {\n return editorToolbar;\n }\n }\n if (role === 'view' && elementData) {\n return elementData;\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.pseudos.visible(element) && !$(element).parents().addBack().filter(function () {\n return $.css(this, 'visibility') === 'hidden';\n }).length;\n }\n $.extend($.expr.pseudos, {\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 kendo.keyDownHandler = function (e, widget) {\n var events = widget._events.kendoKeydown;\n if (!events) {\n return true;\n }\n events = events.slice();\n e.sender = widget;\n e.preventKendoKeydown = false;\n for (var idx = 0, length = events.length; idx < length; idx++) {\n events[idx].call(widget, e);\n }\n return !e.preventKendoKeydown;\n };\n var on = $.fn.on;\n function kendoJQuery(selector, context) {\n return new kendoJQuery.fn.init(selector, context);\n }\n noDepricateExtend(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 (arguments[0].indexOf('keydown') !== -1 && args[1] && args[1].options) {\n args[0] = events;\n var widget = args[1];\n var keyDownCallBack = args[args.length - 1];\n args[args.length - 1] = function (e) {\n if (kendo.keyDownHandler(e, widget)) {\n return keyDownCallBack.apply(this, [e]);\n }\n };\n on.apply(that, args);\n return that;\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 } 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 firstDayOfYear(date) {\n return new Date(date.getFullYear(), 0, 1);\n }\n function lastDayOfYear(date) {\n return new Date(date.getFullYear(), 11, 31);\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(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\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 function addYear(date, offset) {\n var currentDate = new Date(date);\n return new Date(currentDate.setFullYear(currentDate.getFullYear() + offset));\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 firstDayOfYear: firstDayOfYear,\n lastDayOfYear: lastDayOfYear,\n nextYear: function (date) {\n return addYear(date, 1);\n },\n previousYear: function (date) {\n return addYear(date, -1);\n }\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 kendo.focusNextElement = function () {\n if (document.activeElement) {\n var focussable = $(':kendoFocusable');\n var index = focussable.index(document.activeElement);\n if (index > -1) {\n var nextElement = focussable[index + 1] || focussable[0];\n nextElement.focus();\n }\n }\n };\n kendo.trim = function (value) {\n if (!!value) {\n return value.toString().trim();\n } else {\n return '';\n }\n };\n kendo.getWidgetFocusableElement = function (element) {\n var nextFocusable = element.closest(':kendoFocusable'), widgetInstance = kendo.widgetInstance(element), target;\n if (nextFocusable.length) {\n target = nextFocusable;\n } else if (widgetInstance) {\n target = widgetInstance.options.name === 'Editor' ? $(widgetInstance.body) : widgetInstance.wrapper.find(':kendoFocusable').first();\n } else {\n target = element;\n }\n return target;\n };\n kendo.addAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n element.attr(attribute, (current + ' ' + value).trim());\n }\n };\n kendo.removeAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n element.attr(attribute, current.replace(value, '').trim());\n };\n kendo.toggleAttribute = function (element, attribute, value) {\n var current = element.attr(attribute) || '';\n if (current.indexOf(value) < 0) {\n kendo.addAttribute(element, attribute, value);\n } else {\n kendo.removeAttribute(element, attribute, value);\n }\n };\n kendo.matchesMedia = function (mediaQuery) {\n var media = kendo._bootstrapToMedia(mediaQuery) || mediaQuery;\n return support.matchMedia && window.matchMedia(media).matches;\n };\n kendo._bootstrapToMedia = function (bootstrapMedia) {\n return {\n 'xs': '(max-width: 576px)',\n 'sm': '(min-width: 576px)',\n 'md': '(min-width: 768px)',\n 'lg': '(min-width: 992px)',\n 'xl': '(min-width: 1200px)'\n }[bootstrapMedia];\n };\n kendo.fileGroupMap = {\n audio: [\n '.aif',\n '.iff',\n '.m3u',\n '.m4a',\n '.mid',\n '.mp3',\n '.mpa',\n '.wav',\n '.wma',\n '.ogg',\n '.wav',\n '.wma',\n '.wpl'\n ],\n video: [\n '.3g2',\n '.3gp',\n '.avi',\n '.asf',\n '.flv',\n '.m4u',\n '.rm',\n '.h264',\n '.m4v',\n '.mkv',\n '.mov',\n '.mp4',\n '.mpg',\n '.rm',\n '.swf',\n '.vob',\n '.wmv'\n ],\n image: [\n '.ai',\n '.dds',\n '.heic',\n '.jpe',\n 'jfif',\n '.jif',\n '.jp2',\n '.jps',\n '.eps',\n '.bmp',\n '.gif',\n '.jpeg',\n '.jpg',\n '.png',\n '.ps',\n '.psd',\n '.svg',\n '.svgz',\n '.tif',\n '.tiff'\n ],\n txt: [\n '.doc',\n '.docx',\n '.log',\n '.pages',\n '.tex',\n '.wpd',\n '.wps',\n '.odt',\n '.rtf',\n '.text',\n '.txt',\n '.wks'\n ],\n presentation: [\n '.key',\n '.odp',\n '.pps',\n '.ppt',\n '.pptx'\n ],\n data: [\n '.xlr',\n '.xls',\n '.xlsx'\n ],\n programming: [\n '.tmp',\n '.bak',\n '.msi',\n '.cab',\n '.cpl',\n '.cur',\n '.dll',\n '.dmp',\n '.drv',\n '.icns',\n '.ico',\n '.link',\n '.sys',\n '.cfg',\n '.ini',\n '.asp',\n '.aspx',\n '.cer',\n '.csr',\n '.css',\n '.dcr',\n '.htm',\n '.html',\n '.js',\n '.php',\n '.rss',\n '.xhtml'\n ],\n pdf: ['.pdf'],\n config: [\n '.apk',\n '.app',\n '.bat',\n '.cgi',\n '.com',\n '.exe',\n '.gadget',\n '.jar',\n '.wsf'\n ],\n zip: [\n '.7z',\n '.cbr',\n '.gz',\n '.sitx',\n '.arj',\n '.deb',\n '.pkg',\n '.rar',\n '.rpm',\n '.tar.gz',\n '.z',\n '.zip',\n '.zipx'\n ],\n 'disc-image': [\n '.dmg',\n '.iso',\n '.toast',\n '.vcd',\n '.bin',\n '.cue',\n '.mdf'\n ]\n };\n kendo.getFileGroup = function (extension, withPrefix) {\n var fileTypeMap = kendo.fileGroupMap;\n var groups = Object.keys(fileTypeMap);\n var type = 'file';\n if (extension === undefined || !extension.length) {\n return type;\n }\n for (var i = 0; i < groups.length; i += 1) {\n var extensions = fileTypeMap[groups[i]];\n if (extensions.indexOf(extension.toLowerCase()) > -1) {\n return withPrefix ? 'file-' + groups[i] : groups[i];\n }\n }\n return type;\n };\n kendo.getFileSizeMessage = function (size) {\n var sizes = [\n 'Bytes',\n 'KB',\n 'MB',\n 'GB',\n 'TB'\n ];\n if (size === 0) {\n return '0 Byte';\n }\n var i = parseInt(Math.floor(Math.log(size) / Math.log(1024)), 10);\n return Math.round(size / Math.pow(1024, i), 2) + ' ' + sizes[i];\n };\n kendo.selectorFromClasses = function (classes) {\n return '.' + classes.split(' ').join('.');\n };\n var themeColorValues = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'inherit',\n 'info',\n 'success',\n 'warning',\n 'error',\n 'dark',\n 'light',\n 'inverse'\n ];\n var fillValues = [\n 'solid',\n 'outline',\n 'flat'\n ];\n var postitionValues = [\n 'edge',\n 'outside',\n 'inside'\n ];\n var shapeValues = [\n 'circle',\n 'rectangle',\n 'rounded',\n 'dot',\n 'pill'\n ];\n var sizeValues = [\n [\n 'small',\n 'sm'\n ],\n [\n 'medium',\n 'md'\n ],\n [\n 'large',\n 'lg'\n ]\n ];\n var alignValues = [\n [\n 'top start',\n 'top-start'\n ],\n [\n 'top end',\n 'top-end'\n ],\n [\n 'bottom start',\n 'bottom-start'\n ],\n [\n 'bottom end',\n 'bottom-end'\n ]\n ];\n var positionModeValues = [\n 'fixed',\n 'static',\n 'sticky',\n 'absolute'\n ];\n kendo.propertyToCssClassMap = {};\n kendo.registerCssClass = function (propName, value, shorthand) {\n if (!kendo.propertyToCssClassMap[propName]) {\n kendo.propertyToCssClassMap[propName] = {};\n }\n kendo.propertyToCssClassMap[propName][value] = shorthand || value;\n };\n kendo.registerCssClasses = function (propName, arr) {\n for (var i = 0; i < arr.length; i++) {\n if (isArray(arr[i])) {\n kendo.registerCssClass(propName, arr[i][0], arr[i][1]);\n } else {\n kendo.registerCssClass(propName, arr[i]);\n }\n }\n };\n kendo.getValidCssClass = function (prefix, propName, value) {\n var validValue = kendo.propertyToCssClassMap[propName][value];\n if (validValue) {\n return prefix + validValue;\n }\n };\n kendo.registerCssClasses('themeColor', themeColorValues);\n kendo.registerCssClasses('fill', fillValues);\n kendo.registerCssClasses('postition', postitionValues);\n kendo.registerCssClasses('shape', shapeValues);\n kendo.registerCssClasses('size', sizeValues);\n kendo.registerCssClasses('align', alignValues);\n kendo.registerCssClasses('positionMode', positionModeValues);\n kendo.whenAll = function (array) {\n var resolveValues = arguments.length == 1 && $.isArray(array) ? array : Array.prototype.slice.call(arguments), length = resolveValues.length, remaining = length, deferred = $.Deferred(), i = 0, failed = 0, rejectContexts = Array(length), rejectValues = Array(length), resolveContexts = Array(length), value;\n function updateFunc(index, contexts, values) {\n return function () {\n if (values != resolveValues) {\n failed++;\n }\n deferred.notifyWith(contexts[index] = this, values[index] = Array.prototype.slice.call(arguments));\n if (!--remaining) {\n deferred[(!failed ? 'resolve' : 'reject') + 'With'](contexts, values);\n }\n };\n }\n for (; i < length; i++) {\n if ((value = resolveValues[i]) && $.isFunction(value.promise)) {\n value.promise().done(updateFunc(i, resolveContexts, resolveValues)).fail(updateFunc(i, rejectContexts, rejectValues));\n } else {\n deferred.notifyWith(this, value);\n --remaining;\n }\n }\n if (!remaining) {\n deferred.resolveWith(resolveContexts, resolveValues);\n }\n return deferred.promise();\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 (function () {\n kendo.defaults = kendo.defaults || {};\n kendo.setDefaults = function (key, value) {\n var path = key.split('.');\n var curr = kendo.defaults;\n key = path.pop();\n path.forEach(function (part) {\n if (curr[part] === undefined) {\n curr[part] = {};\n }\n curr = curr[part];\n });\n if (value.constructor === Object) {\n curr[key] = deepExtend({}, curr[key], value);\n } else {\n curr[key] = value;\n }\n };\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 if ($.hasOwnProperty('uniqueSort')) {\n element.data('keys', $.uniqueSort(oldKeys)).height();\n } else {\n element.data('keys', $.unique(oldKeys)).height();\n }\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.done($.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.done($.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 BACK\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 isnullorempty: 'eq',\n isnotnullorempty: '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 === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else 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 = extend({}, transport.options.batch);\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 = extend(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 if (result && result.$filter) {\n result.$filter = result.$filter.replace(/('[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')/gi, function (x) {\n return x.substring(1, x.length - 1);\n });\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', ASCENDING = 'asc', 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\\((.*?)\\)\\/$/, objectKeys = [];\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 (serializeFunctions) {\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(serializeFunctions);\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 if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\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 if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\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 if (!this.omitChangeEvent) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\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, events) {\n Observable.fn.init.call(this);\n this.type = type || ObservableObject;\n if (events) {\n this._events = events;\n }\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 function ownKeys(value, ignoreObjectKeys) {\n var props = [];\n var keys, filteredObjectKeys;\n value = value || {};\n keys = Object.getOwnPropertyNames(value);\n filteredObjectKeys = objectKeys.filter(function (key) {\n return keys.indexOf(key) < 0;\n });\n while (value) {\n Object.getOwnPropertyNames(value).forEach(function (prop) {\n if (props.indexOf(prop) === -1 && (!ignoreObjectKeys || filteredObjectKeys.indexOf(prop) < 0)) {\n props.push(prop);\n }\n });\n value = Object.getPrototypeOf(value);\n }\n return props;\n }\n objectKeys = ownKeys({}, false);\n var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, keys = ownKeys(value, true), parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n keys.forEach(function (field) {\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, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && (serializeFunctions && serializeFunctions[field] || 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 (serializeFunctions) {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\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) {\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) && !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, accentFoldingFiltering) {\n b += '';\n if (ignore) {\n a = '(' + a + ' + \\'\\').toString()' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n b = accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore, accentFoldingFiltering) {\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(accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\')' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.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, accentFoldingFiltering) {\n return operator('==', a, b, ignore, accentFoldingFiltering);\n },\n neq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('!=', a, b, ignore, accentFoldingFiltering);\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, expression.accentFoldingFiltering);\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 function sortFields(sorts, dir) {\n var sortObject = {};\n if (sorts) {\n var descriptor = typeof sorts === STRING ? {\n field: sorts,\n dir: dir\n } : sorts, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = {\n dir: descriptors[i].dir,\n index: i + 1\n };\n }\n }\n return sortObject;\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, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\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 compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\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, options) {\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 if (options && options.groupPaging) {\n result = new Query(allData).groupAllData(descriptor, allData).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 var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: data.aggregate(descriptor.aggregates),\n uid: kendo.guid(),\n itemCount: items.length,\n subgroupCount: items.length\n };\n });\n } else {\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 }\n return result;\n },\n groupBy: function (descriptor) {\n var that = this;\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? this.data : 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 result = that._sortGroups(result, descriptor);\n return new Query(result);\n },\n groupAllData: function (descriptor, allData) {\n if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || 'asc', StableComparer).toArray(), 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 result = this._sortGroups(result, descriptor);\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 _sortGroups: function (groups, descriptor) {\n var result = groups;\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n return result;\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.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data), groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []), normalizedSort = normalizeSort(options.sort || []), sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort), groupDescriptorsWithoutSort, total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\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);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data, options);\n if (skip !== undefined && take !== undefined && !options.groupPaging) {\n query = new Query(flatGroups(query.toArray())).range(skip, take);\n groupDescriptorsWithoutSort = map(groupDescriptorsWithoutCompare, function (groupDescriptor) {\n return extend({}, groupDescriptor, { skipItemSorting: true });\n });\n query = query.group(groupDescriptorsWithoutSort, data, options);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data, options);\n }\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 if (options.submit) {\n that.submit = options.submit;\n }\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.items) {\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 }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function (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, name;\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 name = fromName || fieldName;\n getters[field] = name.indexOf('.') !== -1 ? getter(name, true) : getter(name);\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._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\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 fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[originalGroup.items.length - 1];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups && currOriginal.value == currentNew.value) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n } else {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n } else if (currentNew) {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n }\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 flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function (array, index) {\n return array[index];\n };\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\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.items) {\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 }\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.items) {\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0; idx < data.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 if (!data) {\n return;\n }\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 if (!data) {\n return;\n }\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._sortFields = sortFields(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._groupPaging = options.groupPaging;\n if (that._groupPaging) {\n that._groupsState = {};\n }\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 _isServerGroupPaged: function () {\n return this._isServerGrouped() && this._groupPaging;\n },\n _isGroupPaged: function () {\n var group = this._group || [];\n return this._groupPaging && 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 var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\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 if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\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, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n var shouldRemovePristine = typeof removePristine !== 'undefined' ? removePristine : true;\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 && shouldRemovePristine) {\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._syncEnd();\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n if (that._isServerGroupPaged()) {\n that.read();\n }\n });\n } else {\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n }\n return promise;\n },\n _syncEnd: noop,\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._changesCanceled();\n that._change();\n that._markOfflineUpdatesAsDirty();\n if (that._isServerGrouped()) {\n that.read();\n }\n }\n },\n _changesCanceled: noop,\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].toJSON()) : 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 var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n that._eachItem(that._pristineData, callback);\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function (i, range) {\n that._eachItem(range.pristineData, callback);\n });\n }\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 that._modelCanceled(model);\n items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n _modelCanceled: noop,\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, items, replaceSubset;\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._isServerGroupPaged()) {\n that._serverGroupsTotal = that._total;\n }\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n 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 replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n if (that.options.endless) {\n if (replaceSubset) {\n that._pristineData.splice(that._skip, that._pristineData.length);\n }\n items = data.slice(0);\n for (var j = 0; j < items.length; j++) {\n that._pristineData.push(items[j]);\n }\n } else {\n that._pristineData = data.slice(0);\n }\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n fillLastGroup(that._data[that._data.length - 1], data[0]);\n data.shift();\n }\n data = that._observe(data);\n if (replaceSubset) {\n that._data.splice(that._skip, that._data.length);\n }\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.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n _addRange: function (data, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : that._skip || 0, end, range = {\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n };\n if (this._isGroupPaged()) {\n end = start + data.length;\n range.outerStart = start;\n range.outerEnd = end;\n } else {\n end = start + that._flatData(data, true).length;\n }\n range.start = start;\n range.end = end;\n that._ranges.push(range);\n that._sortRanges();\n if (that._isGroupPaged()) {\n if (!that._groupsFlat) {\n that._groupsFlat = [];\n }\n that._appendToGroupsFlat(range.data);\n that._updateOuterRangesLength();\n }\n },\n _appendToGroupsFlat: function (data) {\n var length = data.length;\n for (var i = 0; i < length; i++) {\n this._groupsFlat.push(data[i]);\n }\n },\n _getGroupByUid: function (uid) {\n var length = this._groupsFlat.length;\n var group;\n for (var i = 0; i < length; i++) {\n group = this._groupsFlat[i];\n if (group.uid === uid) {\n return group;\n }\n }\n },\n _sortRanges: function () {\n this._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 groupPaging: !!that._groupPaging\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 if (!that.options.groupPaging) {\n delete options.groupPaging;\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 && !(that.options.useRanges && that.options.serverPaging)) {\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 if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\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 }\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n options.groupPaging = that._groupPaging;\n if (that._isGroupPaged() && e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n result = that._queryProcess(data, { aggregate: that._aggregate });\n } else {\n result = that._queryProcess(data, options);\n }\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that._setView(result, options, e);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _setView: function (result, options, e) {\n var that = this;\n if (that._isGroupPaged() && !that._isServerGrouped()) {\n if (e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n that.view(result.data);\n that._updateOuterRangesLength();\n } else {\n that._ranges = [];\n var query = new Query(result.data);\n that._addRange(that._observe(result.data));\n if (options.skip + options.take > result.data.length) {\n options.skip = result.data.length - options.take;\n }\n that.view(query.range(options.skip, options.take).toArray());\n }\n } else {\n that.view(result.data);\n }\n },\n _clearEmptyGroups: function (data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n } else {\n if (group.items && !group.items.length) {\n splice.apply(group.parent(), [\n idx,\n 1\n ]);\n }\n }\n }\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 that._sortFields = sortFields(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : 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 if (options) {\n options.groupPaging = this._groupPaging;\n }\n result = this._queryProcess(this._data, this._mergeState(options));\n this._setFilterTotal(result.total, true);\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this._setView(result, options);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, {\n items: result.data,\n action: options ? options.action : ''\n });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n _hasExpandedSubGroups: function (group) {\n var result = false;\n var length = group.items ? group.items.length : 0;\n if (!group.hasSubgroups) {\n return false;\n }\n for (var i = 0; i < length; i++) {\n if (this._groupsState[group.items[i].uid]) {\n result = true;\n break;\n }\n }\n return result;\n },\n _findGroupedRange: function (data, result, options, parents, callback) {\n var that = this;\n var length = data.length;\n var group;\n var current;\n var itemsLength;\n var groupCount;\n var itemsToSkip;\n for (var i = 0; i < length; i++) {\n group = data[i];\n if (options.taken >= options.take) {\n break;\n }\n if (!that._getGroupByUid(group.uid)) {\n that._groupsFlat.push(group);\n }\n if (that._groupsState[group.uid]) {\n if (that._isServerGroupPaged()) {\n if (that._fetchGroupItems(group, options, parents, callback)) {\n that._fetchingGroupItems = true;\n return;\n }\n groupCount = (group.subgroupCount || group.itemCount) + 1;\n itemsToSkip = options.skip - options.skipped;\n if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n options.skipped += groupCount;\n continue;\n }\n }\n if (options.includeParents && options.skipped < options.skip) {\n options.skipped++;\n group.excludeHeader = true;\n } else if (options.includeParents) {\n options.taken++;\n group.excludeHeader = false;\n }\n if (group.hasSubgroups && group.items && group.items.length) {\n group.currentItems = [];\n if (!parents) {\n parents = [];\n }\n parents.push(group);\n that._findGroupedRange(group.items, group.currentItems, options, parents, callback);\n parents.pop();\n if (group.currentItems.length || options.taken > 0) {\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n } else {\n current = [];\n itemsLength = group.items.length;\n for (var j = 0; j < itemsLength; j++) {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n if (options.taken >= options.take) {\n break;\n }\n current.push(group.items[j]);\n options.taken++;\n }\n if (current.length || options.taken > 0) {\n group.currentItems = current;\n result.push(group);\n } else {\n group.excludeHeader = false;\n }\n }\n } else {\n if (options.skipped < options.skip) {\n options.skipped++;\n continue;\n }\n result.push(group);\n options.taken++;\n }\n }\n },\n _expandedSubGroupItemsCount: function (group, end, includeCurrentItems) {\n var that = this;\n var result = 0;\n var subGroup;\n var endSpecified = typeof end === 'number';\n var length = endSpecified ? end : group.subgroupCount;\n var temp;\n if (!group.hasSubgroups) {\n return result;\n }\n for (var i = 0; i < length; i++) {\n subGroup = group.items[i];\n if (!subGroup) {\n break;\n }\n if (subGroup.hasSubgroups && that._groupsState[group.uid]) {\n temp = that._expandedSubGroupItemsCount(subGroup, length, true);\n result += temp;\n if (endSpecified) {\n length -= temp;\n }\n } else if (!subGroup.hasSubgroups && that._groupsState[subGroup.uid]) {\n temp = subGroup.items ? subGroup.items.length : 0;\n result += temp;\n if (endSpecified) {\n length -= temp;\n }\n }\n if (includeCurrentItems) {\n result += 1;\n if (endSpecified) {\n length -= 1;\n }\n }\n if (endSpecified && result > length) {\n return result;\n }\n }\n return result;\n },\n _fetchGroupItems: function (group, options, parents, callback) {\n var that = this;\n var groupItemsSkip;\n var firstItem;\n var lastItem;\n var groupItemCount = group.hasSubgroups ? group.subgroupCount : group.itemCount;\n var take = options.take;\n var skipped = options.skipped;\n var pageSize = that.take();\n var expandedSubGroupItemsCount;\n if (options.includeParents) {\n if (skipped < options.skip) {\n skipped += 1;\n } else {\n take -= 1;\n }\n }\n if (!group.items || group.items && !group.items.length) {\n that.getGroupItems(group, options, parents, callback, 0);\n return true;\n } else {\n expandedSubGroupItemsCount = this._expandedSubGroupItemsCount(group, options.skip - skipped);\n groupItemsSkip = Math.max(options.skip - (skipped + expandedSubGroupItemsCount), 0);\n if (groupItemsSkip >= groupItemCount) {\n return false;\n }\n firstItem = group.items[groupItemsSkip];\n lastItem = group.items[Math.min(groupItemsSkip + take, groupItemCount - 1)];\n if (firstItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor(groupItemsSkip / pageSize), 0) * pageSize);\n return true;\n }\n if (lastItem.notFetched) {\n that.getGroupItems(group, options, parents, callback, math.max(math.floor((groupItemsSkip + pageSize) / pageSize), 0) * pageSize);\n return true;\n }\n }\n },\n getGroupItems: function (group, options, parents, callback, groupItemsSkip) {\n var that = this;\n var take;\n var filter;\n var data;\n var subgroups;\n if (!group.items) {\n group.items = [];\n }\n take = that.take();\n filter = this._composeItemsFilter(group, parents);\n data = {\n page: math.floor((groupItemsSkip || 0) / (take || 1)) || 1,\n pageSize: take,\n skip: groupItemsSkip,\n take: take,\n filter: filter,\n aggregate: that._aggregate,\n sort: that._sort\n };\n subgroups = that.findSubgroups(group);\n if (subgroups && subgroups.length) {\n data.group = subgroups;\n data.groupPaging = true;\n }\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(data, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: data,\n success: that._groupItemsSuccessHandler(group, options.skip, that.take(), callback, groupItemsSkip),\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 },\n _groupItemsSuccessHandler: function (group, skip, take, callback, groupItemsSkip) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n var totalField = that.options.schema && that.options.schema.total ? that.options.schema.total : 'Total';\n return function (data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n var totalCount;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (isFunction(totalField)) {\n totalCount = totalField(data);\n } else {\n totalCount = data[totalField];\n }\n data = that.reader.parse(data);\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\n group.subgroupCount = totalCount;\n } else {\n temp = that.reader.data(data);\n temp = temp.map(function (item) {\n return new model(item);\n });\n }\n group.items.omitChangeEvent = true;\n for (var i = 0; i < totalCount; i++) {\n if (i >= groupItemsSkip && i < groupItemsSkip + take) {\n group.items.splice(i, 1, temp[i - groupItemsSkip]);\n } else {\n if (!group.items[i]) {\n group.items.splice(i, 0, { notFetched: true });\n }\n }\n }\n group.items.omitChangeEvent = false;\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n if (!group.countAdded) {\n that._serverGroupsTotal += totalCount;\n group.countAdded = true;\n }\n that.range(skip, take, callback, 'expandGroup');\n if (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress) {\n that.trigger(CHANGE, {});\n }\n };\n },\n findSubgroups: function (group) {\n var indexOfCurrentGroup = this._group.map(function (g) {\n return g.field;\n }).indexOf(group.field);\n return this._group.slice(indexOfCurrentGroup + 1, this._group.length);\n },\n _composeItemsFilter: function (group, parents) {\n var filter = this.filter() || {\n logic: 'and',\n filters: []\n };\n filter = extend(true, {}, filter);\n filter.filters.push({\n field: group.field,\n operator: 'eq',\n value: group.value\n });\n if (parents) {\n for (var i = 0; i < parents.length; i++) {\n filter.filters.push({\n field: parents[i].field,\n operator: 'eq',\n value: parents[i].value\n });\n }\n }\n return filter;\n },\n _updateRangePristineData: function (group) {\n var that = this;\n var ranges = that._ranges;\n var rangesLength = ranges.length;\n var temp;\n var currentGroup;\n var range;\n var dataLength;\n var indexes;\n var currIdx;\n for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\n temp = null;\n for (var j = 0; j < dataLength; j++) {\n currentGroup = range.data[j];\n indexes.push(j);\n if (currentGroup.uid === group.uid || currentGroup.hasSubgroups && currentGroup.items.length && that._containsSubGroup(currentGroup, group, indexes)) {\n break;\n }\n indexes.pop();\n }\n if (indexes.length) {\n temp = ranges[i].pristineData;\n while (indexes.length > 1) {\n currIdx = indexes.splice(0, 1)[0];\n temp = temp[currIdx].items;\n }\n temp[indexes[0]] = that._cloneGroup(group);\n break;\n }\n }\n },\n _containsSubGroup: function (group, subgroup, indexes) {\n var that = this;\n var length = group.items.length;\n var currentSubGroup;\n if (group.hasSubgroups && length) {\n for (var i = 0; i < length; i++) {\n currentSubGroup = group.items[i];\n indexes.push(i);\n if (currentSubGroup.uid === subgroup.uid) {\n return true;\n } else if (currentSubGroup.hasSubgroups && currentSubGroup.items.length) {\n return that._containsSubGroup(currentSubGroup, subgroup, indexes);\n }\n indexes.pop();\n }\n }\n },\n _cloneGroup: function (group) {\n var that = this;\n group = typeof group.toJSON == 'function' ? group.toJSON() : group;\n if (group.items && group.items.length) {\n group.items = group.items.map(function (item) {\n return that._cloneGroup(item);\n });\n }\n return group;\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\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().done(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 var take = that.take();\n if (that._isGroupPaged()) {\n val -= 1;\n that.range(val * take, take, null, 'page');\n return;\n }\n that._query(that._pageableQueryOptions({ 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(that._pageableQueryOptions({\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.trigger('sort');\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 var options = { group: val };\n if (that._groupPaging) {\n options.page = 1;\n }\n if (val !== undefined) {\n that._query(options);\n return;\n }\n return that._group;\n },\n getGroupsFlat: function (data) {\n var idx, result = [], length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data[idx];\n if (group.hasSubgroups) {\n result = result.concat(this.getGroupsFlat(group.items));\n }\n result.push(group);\n }\n return result;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n groupsTotal: function (includeExpanded) {\n var that = this;\n if (!that._group.length) {\n return that.total();\n }\n if (that._isServerGrouped()) {\n if (that._serverGroupsTotal) {\n return that._serverGroupsTotal;\n }\n that._serverGroupsTotal = that.total();\n return that._serverGroupsTotal;\n }\n return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n },\n _calculateGroupsTotal: function (groups, includeExpanded, itemsField, ignoreState) {\n var that = this;\n itemsField = itemsField || 'items';\n var total;\n var length;\n if (that._group.length && groups) {\n total = 0;\n length = groups.length;\n for (var i = 0; i < length; i++) {\n total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n }\n that._groupsTotal = total;\n return total;\n }\n that._groupsTotal = that._data.length;\n return that._groupsTotal;\n },\n groupCount: function (group, includeExpanded, itemsField, ignoreState) {\n var that = this;\n var total = 0;\n if (group.hasSubgroups && that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total += 1;\n }\n group[itemsField].forEach(function (subgroup) {\n total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n });\n } else {\n if (that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total++;\n }\n total += group[itemsField] ? group[itemsField].length : 0;\n } else {\n total++;\n }\n }\n return total;\n },\n countGroupRange: function (range) {\n var total = 0;\n var length = range.length;\n for (var i = 0; i < length; i++) {\n total += this.groupCount(range[i], true);\n }\n return total;\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 _pageableQueryOptions: function (options) {\n return options;\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 ? model.get(group.field) : model[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(), total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n return math.ceil((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, action) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n if (action === 'expandGroup' || action === 'collapseGroup') {\n this._updateOuterRangesLength();\n }\n skip = math.min(skip || 0, 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, total), data;\n data = that._findRange(skip, math.min(skip + take, total), callback);\n if ((data.length || total === 0) && !that._fetchingGroupItems) {\n that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, { action: action });\n that._originalPageSkip = null;\n that._originalSize = null;\n callback();\n return;\n }\n if (that._isGroupPaged()) {\n that._originalPageSkip = pageSkip;\n that._originalSize = size;\n pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n size = math.min(pageSkip + take, total);\n }\n if (take !== undefined && !that._fetchingGroupItems) {\n if (that._isGroupPaged() && !that._groupRangeExists(pageSkip, take) || !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, callback) {\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, groupMapOptions = {\n take: end - start,\n skip: start,\n skipped: 0,\n taken: 0,\n includeParents: true\n }, prevRangeEnd, isGroupPaged = that._isGroupPaged(), startField = isGroupPaged ? 'outerStart' : 'start', endField = isGroupPaged ? 'outerEnd' : 'end', currentDataLength;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (isGroupPaged) {\n if (range.outerStart >= end) {\n return [];\n }\n if (start > range.outerEnd) {\n groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n prevRangeEnd = range.outerEnd;\n continue;\n }\n if (typeof prevRangeEnd !== 'undefined' && prevRangeEnd != range.outerStart) {\n groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n }\n if (groupMapOptions.skipped > groupMapOptions.skip) {\n return [];\n }\n if (typeof prevRangeEnd === 'undefined' && start > 0 && range.start > 0) {\n groupMapOptions.skipped = range.outerStart;\n }\n takeIdx = skipIdx;\n while (true) {\n this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n currentDataLength = that._calculateGroupsTotal(data, true, 'currentItems');\n if (currentDataLength >= groupMapOptions.take) {\n return data;\n }\n if (that._fetchingGroupItems) {\n return [];\n }\n takeIdx++;\n if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n range = ranges[takeIdx];\n } else {\n break;\n }\n }\n } else if (start >= range[startField] && start <= range[endField]) {\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 = normalizeGroupWithoutCompare(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 prevRangeEnd = range.outerEnd;\n }\n return [];\n },\n _getRangesMismatch: function (pageSkip) {\n var that = this;\n var ranges = that._ranges;\n var mismatch = 0;\n var i = 0;\n while (true) {\n var range = ranges[i];\n if (!range || range.outerStart > pageSkip) {\n break;\n }\n if (range.outerEnd != range.end) {\n mismatch = range.outerEnd - range.end;\n }\n i++;\n }\n return mismatch;\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, eventData) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() && !that._omitPrefetch ? 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, eventData);\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 if (!that._isGroupPaged()) {\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n }\n break;\n }\n }\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\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._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size)) {\n if (callback) {\n callback();\n }\n return;\n }\n if (that._isServerGroupPaged() && !that._groupRangeExists(skip, size) || !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 if (that._omitPrefetch) {\n that.trigger(PROGRESS);\n }\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 _adjustPageSkip: function (start, take) {\n var that = this;\n var prevRange = that._getPrevRange(start);\n var result;\n var total = that.total();\n var mismatch;\n if (prevRange) {\n mismatch = that._getRangesMismatch(start);\n if (!mismatch) {\n return start;\n }\n start -= mismatch;\n }\n result = math.max(math.floor(start / take), 0) * take;\n if (result > total) {\n while (true) {\n result -= take;\n if (result < total) {\n break;\n }\n }\n }\n return result;\n },\n _getNextRange: function (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 <= end && ranges[idx].end >= end) {\n return ranges[idx];\n }\n }\n },\n _getPrevRange: function (start) {\n var that = this, ranges = that._ranges, idx, range, length = ranges.length;\n for (idx = length - 1; idx >= 0; idx--) {\n if (ranges[idx].outerStart <= start) {\n range = ranges[idx];\n break;\n }\n }\n return range;\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 _groupRangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length, availableItemsCount = 0, total = that.groupsTotal(true);\n if (end > total && !that._isServerGrouped()) {\n end = total;\n }\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n var range = ranges[idx];\n if (range.outerStart <= start && range.outerEnd >= start) {\n availableItemsCount += range.outerEnd - start;\n } else if (range.outerStart <= end && range.outerEnd >= end) {\n availableItemsCount += end - range.outerStart;\n }\n }\n return availableItemsCount >= end - start;\n },\n _getCurrentRangeSpan: function () {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n if (range.start <= start && range.end >= start || range.start >= start && range.start <= end) {\n rangeSpan.push(range);\n }\n }\n return rangeSpan;\n },\n _removeModelFromRanges: function (model) {\n var that = this;\n var range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n that._removeModelFromRange(range, model);\n }\n that._updateRangesLength();\n },\n _removeModelFromRange: function (range, model) {\n this._eachItem(range.data, function (data) {\n if (!data) {\n return;\n }\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\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 rangeLength;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n lengthDifference = rangeLength - 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 _updateOuterRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchLength = 0;\n var range;\n var i;\n var prevRange;\n var rangeLength;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, 'items', true) : that._flatData(range.data, true).length;\n if (prevRange) {\n if (prevRange.end != range.start) {\n mismatchLength = range.start - prevRange.end;\n }\n range.outerStart = prevRange.outerEnd + mismatchLength;\n mismatchLength = 0;\n } else {\n range.outerStart = range.start;\n }\n range.outerEnd = range.outerStart + rangeLength;\n prevRange = range;\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.call(that, 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 var accentFoldingFiltering = this.options.accentFoldingFiltering;\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : 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 && kendo.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 Comparer: Comparer,\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-' + kendo.ns + '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-' + kendo.ns + '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') {\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 (value !== null && typeof value !== 'undefined' && 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, dropdowntree;\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 select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\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' || this.element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n start: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.start.set(this.widget.range().start);\n },\n refresh: function () {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({\n start: start,\n end: end\n });\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n end: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.end.set(this.widget.range().end);\n },\n refresh: function () {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({\n start: start,\n end: end\n });\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 dropdowntree: {\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, selectedNode = that.widget.treeview.select(), nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : that.widget.treeview.dataItem(selectedNode) || that.widget.value(), newValues = valuePrimitive || that.widget.options.autoBind === false ? that.widget.value() : nonPrimitiveValues;\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice ? newValues.slice(0) : newValues;\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 (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) {\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 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 grid: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx, length, widget = this.widget, elements = e.addedItems || widget.items(), parents, data;\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 badge: {\n text: 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 text = this.bindings.text.get();\n if (text == null) {\n text = '';\n }\n this.widget.text(text);\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 if (!element || element.getAttribute('data-' + kendo.ns + 'stop')) {\n return;\n }\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 }, source);\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 && !element.getAttribute('data-' + kendo.ns + 'stop')) {\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, attr = kendo.attr, ui = kendo.ui, attrValue = kendo.attrValue, directiveSelector = kendo.directiveSelector, Observable = kendo.Observable, Widget = kendo.ui.Widget, roleSelector = kendo.roleSelector, SCRIPT = 'SCRIPT', INIT = 'init', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', SHOW = 'show', HIDE = 'hide', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i;\n var LOAD_START = 'loadStart';\n var LOAD_COMPLETE = 'loadComplete';\n var SHOW_START = 'showStart';\n var SAME_VIEW_REQUESTED = 'sameViewRequested';\n var VIEW_SHOW = 'viewShow';\n var VIEW_TYPE_DETERMINED = 'viewTypeDetermined';\n var AFTER = 'after';\n var classNames = {\n content: 'k-content',\n view: 'k-view',\n stretchedView: 'k-stretched-view',\n widget: 'k-widget',\n header: 'k-header',\n footer: 'k-footer'\n };\n var View = kendo.ui.Widget.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n that.id = kendo.guid();\n Observable.fn.init.call(that);\n this.options = $.extend({}, this.options, options);\n that.content = content;\n if (that.options.renderOnInit) {\n Widget.fn.init.call(that, that._createElement(), options);\n }\n if (that.options.wrapInSections) {\n that._renderSections();\n }\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 options: {\n name: 'View',\n renderOnInit: false,\n wrapInSections: false,\n detachOnHide: true,\n detachOnDestroy: true\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 var that = this;\n var element = that.render();\n if (element) {\n element.css('display', '');\n }\n this.trigger(SHOW_START, { view: this });\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 if (this.options.detachOnHide) {\n this._eachFragment(DETACH);\n $(this.element).detach();\n }\n this.trigger(HIDE);\n },\n destroy: function () {\n var that = this;\n var element = that.element;\n if (element) {\n Widget.fn.destroy.call(that);\n kendo.unbind(element);\n kendo.destroy(element);\n if (that.options.detachOnDestroy) {\n element.remove();\n }\n }\n },\n purge: function () {\n var that = this;\n that.destroy();\n $(that.element).add(that.content).add(that.wrapper).off().remove();\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 _renderSections: function () {\n var that = this;\n if (that.options.wrapInSections) {\n that._wrapper();\n that._createContent();\n that._createHeader();\n that._createFooter();\n }\n },\n _wrapper: function () {\n var that = this;\n var content = that.content;\n if (content.is(roleSelector('view'))) {\n that.wrapper = that.content;\n } else {\n that.wrapper = content.wrap('
    ').parent();\n }\n var wrapper = that.wrapper;\n wrapper.attr('id', that.id);\n wrapper.addClass(classNames.view);\n wrapper.addClass(classNames.widget);\n wrapper.attr('role', 'view');\n },\n _createContent: function () {\n var that = this;\n var wrapper = $(that.wrapper);\n var contentSelector = roleSelector('content');\n if (!wrapper.children(contentSelector)[0]) {\n var ccontentElements = wrapper.children().filter(function () {\n var child = $(this);\n if (!child.is(roleSelector('header')) && !child.is(roleSelector('footer'))) {\n return child;\n }\n });\n ccontentElements.wrap('
    ');\n }\n this.contentElement = wrapper.children(roleSelector('content'));\n this.contentElement.addClass(classNames.stretchedView).addClass(classNames.content);\n },\n _createHeader: function () {\n var that = this;\n var wrapper = that.wrapper;\n this.header = wrapper.children(roleSelector('header')).addClass(classNames.header);\n },\n _createFooter: function () {\n var that = this;\n var wrapper = that.wrapper;\n this.footer = wrapper.children(roleSelector('footer')).addClass(classNames.footer);\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 destroy: function () {\n var that = this;\n var view = that.view;\n if (view && view.destroy) {\n view.destroy();\n }\n }\n });\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, container;\n Observable.fn.init.call(that);\n that.options = options;\n $.extend(that, options);\n that.sandbox = $('
    ');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n var that = this;\n var viewContainer = that.viewContainer;\n kendo.destroy(that.container);\n for (var id in that.layouts) {\n this.layouts[id].destroy();\n }\n if (viewContainer) {\n viewContainer.destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return that.viewContainer.show(view, transition, url);\n } else {\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('
    ').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n container.append(views);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n if (!element[0]) {\n element = this._findViewElementById(url);\n }\n return element;\n },\n _findViewElementById: function (id) {\n var element = this.container.children('[id=\\'' + id + '\\']');\n return element;\n },\n _createView: function (element) {\n return this._createSpaView(element);\n },\n _createMobileView: function (element) {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n },\n _createSpaView: function (element) {\n var viewOptions = (this.options || {}).viewOptions || {};\n return new kendo.View(element, {\n renderOnInit: viewOptions.renderOnInit,\n wrap: viewOptions.wrap || false,\n wrapInSections: viewOptions.wrapInSections,\n detachOnHide: viewOptions.detachOnHide,\n detachOnDestroy: viewOptions.detachOnDestroy\n });\n },\n _hideViews: function (container) {\n return container.children(this._locate('view')).hide();\n }\n });\n kendo.ViewEngine = ViewEngine;\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 kendo = window.kendo;\n var isFunction = kendo.isFunction;\n function isJQueryPromise(promise) {\n return promise && isFunction(promise.done) && isFunction(promise.fail);\n }\n function isNativePromise(promise) {\n return promise && isFunction(promise.then) && isFunction(promise.catch);\n }\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 (!isJQueryPromise(promise) && !isNativePromise(promise)) {\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 promise = this.promise;\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 if (isJQueryPromise(promise)) {\n promise.done(function () {\n hub.invoke.apply(hub, args).done(options.success).fail(options.error);\n });\n } else if (isNativePromise(promise)) {\n promise.then(function () {\n hub.invoke.apply(hub, args).then(options.success).catch(options.error);\n });\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, CLICK_DELAY = 300, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', DOUBLETAP = 'doubleTap', 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 _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\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 _tap: function (touchInfo) {\n var that = this;\n that.userEvents._clicks++;\n if (that.userEvents._clicks == 1) {\n that._clickTimeout = setTimeout(function () {\n if (that.userEvents._clicks == 1) {\n that._trigger(TAP, touchInfo);\n } else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n var preventMove = touchInfo.type !== 'api' && that.userEvents._shouldNotMove;\n if (that._finished || preventMove) {\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 if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\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 that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\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 DOUBLETAP,\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 if (kendo.support.touch) {\n that.element.find(that.options.filter).css('touch-action', 'none');\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 } else if (yIsScrollable && yDelta < 0) {\n parent.scrollTop = 0;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n } else if (xIsScrollable && xDelta < 0) {\n parent.scrollLeft = 0;\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 clearInterval(this._scrollInterval);\n this._scrollInterval = null;\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.edge || kendo.support.browser.safari ? 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 if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n Animation.fn.start.call(that);\n } else {\n that._snapBack();\n }\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 supportDoubleTap: that.options.supportDoubleTap,\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 (e.ctrlKey) {\n return;\n }\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 kendo.scrollLeft(this.scrollElement, 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 omitOriginOffsets: false\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.off(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.off(that.downEvent, that._mousedownProxy).on(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 if (!element.is(':visible') && element.data('olddisplay') === undefined) {\n element.show();\n element.data('olddisplay', element.css('display'));\n element.hide();\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.off(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 || support.browser.safari)) {\n eventNames += ' ' + SCROLL;\n }\n if (toggle && !this.scrollableParents) {\n this.scrollableParents = this._scrollableParents();\n }\n if (this.scrollableParents && this.scrollableParents.length) {\n this.scrollableParents[method](SCROLL, this._resizeProxy);\n }\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 = that.options.omitOriginOffsets ? 0 : anchorOffset.top, left = that.options.omitOriginOffsets ? 0 : 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 'kendo.fx'\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 if (kendo.support.touch && this._isShownOnMouseEnter()) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._showOn, that));\n }\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that));\n if (this._isShownOnMouseEnter() || this._isShownOnClick()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && this._isShownOnMouseEnter()) {\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 if (kendo.support.touch) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n hideAfter: 100,\n callout: true,\n offset: 0,\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 _isShownOnMouseEnter: function () {\n return this.options.showOn && this.options.showOn.match(/mouseenter/);\n },\n _isShownOnClick: function () {\n return this.options.showOn && this.options.showOn.match(/click/);\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._isShownOnClick() && !that._isShownOnMouseEnter()) {\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 that.contentLoading = true;\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.contentLoading = false;\n that.trigger(CONTENTLOAD);\n that._openPopup();\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 that._removeDescribedBy(target);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n if (!that.contentLoading) {\n that._openPopup();\n }\n },\n _openPopup: function () {\n if (!this.popup) {\n return;\n }\n this.popup._hovered = true;\n this.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 autosize: true,\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id || kendo.guid(), describedBy = [];\n if (anchor.attr(DESCRIBEDBY)) {\n describedBy.push(anchor.attr(DESCRIBEDBY));\n }\n if (ariaId) {\n describedBy.push(ariaId + ARIAIDSUFFIX);\n anchor.attr(DESCRIBEDBY, describedBy.join(' '));\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n } else {\n that._offset(that.options.position, that.options.offset);\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n that.popup._hovered = undefined;\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._isShownOnMouseEnter()) {\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 var that = this;\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._closePopup(e.currentTarget);\n }, that.options.hideAfter);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup && !this.popup._hovered) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\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(), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2;\n that._offset(position, that.options.offset);\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 _removeDescribedBy: function (target) {\n var tooltipId = this.popup.element.attr('id'), currentDescribedBy = target.attr(DESCRIBEDBY), arrayAttr, finalArray, finalDescribedbyAttr;\n if (!currentDescribedBy) {\n return;\n }\n arrayAttr = currentDescribedBy.split(' ');\n if (arrayAttr && arrayAttr.length > 0) {\n finalArray = arrayAttr.filter(function (val) {\n return val !== tooltipId;\n });\n }\n if (finalArray && finalArray.length > 0) {\n finalDescribedbyAttr = finalArray.join(' ');\n target.attr(DESCRIBEDBY, finalDescribedbyAttr);\n } else {\n target.removeAttr(DESCRIBEDBY);\n }\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 _offset: function (position, offsetAmount) {\n var that = this, isTopLeft = position == 'top' || position == 'left', isFlipped = that.popup.flipped, direction = isTopLeft && isFlipped || !isTopLeft && !isFlipped ? 1 : -1, marginRule = isTopLeft ? 'margin-' + position : 'margin-' + REVERSE[position], offset = kendo._outerWidth(that.arrow) / 2 + offsetAmount;\n that.popup.wrapper.css(marginRule, offset * direction + 'px');\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 function extendStatic(dest, src) {\n if (!src) {\n return;\n }\n if (typeof src.__proto__ === 'function') {\n dest.__proto__ = src;\n } else {\n for (var member in src) {\n if (src.hasOwnProperty(member)) {\n dest[member] = src[member];\n }\n }\n }\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll,\n extendStatic: extendStatic\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 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 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 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 }\n return new HSL(h * 60, s * 100, l * 100, 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 h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\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 DARK_TRESHOLD = 180;\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 isDark: function () {\n return this.percBrightness() < DARK_TRESHOLD;\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 namedColors: namedColors,\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 (typeof text === 'undefined' || text === null) {\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 extendStatic = kendoDrawingUtil.extendStatic;\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 HasObservers = function (Class$$1) {\n function HasObservers() {\n Class$$1.apply(this, arguments);\n }\n extendStatic(HasObservers, Class$$1);\n HasObservers.prototype = Object.create(Class$$1 && Class$$1.prototype);\n HasObservers.prototype.constructor = HasObservers;\n HasObservers.fn = HasObservers.prototype;\n HasObservers.fn.init = HasObservers.fn.constructor;\n HasObservers.prototype.observers = function observers() {\n this._observers = this._observers || [];\n return this._observers;\n };\n HasObservers.prototype.addObserver = function addObserver(element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n };\n HasObservers.prototype.removeObserver = function removeObserver(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 HasObservers.prototype.trigger = function trigger(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 HasObservers.prototype.optionsChange = function optionsChange(e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n };\n HasObservers.prototype.geometryChange = function geometryChange() {\n this.trigger('geometryChange', { element: this });\n };\n HasObservers.prototype.suspend = function suspend() {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n };\n HasObservers.prototype.resume = function resume() {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n };\n HasObservers.prototype._observerField = function _observerField(field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n };\n return HasObservers;\n }(Class);\n function append$1$1(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 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 var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\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 var now = Date.now || function () {\n return new Date().getTime();\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 function elementPadding(element) {\n var ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n return {\n top: parseFloat(paddingTop),\n left: parseFloat(paddingLeft)\n };\n }\n var Matrix = function (Class$$1) {\n function Matrix(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 Class$$1.call(this);\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 extendStatic(Matrix, Class$$1);\n Matrix.prototype = Object.create(Class$$1 && Class$$1.prototype);\n Matrix.prototype.constructor = Matrix;\n Matrix.fn = Matrix.prototype;\n Matrix.fn.init = Matrix.fn.constructor;\n Matrix.prototype.multiplyCopy = function multiplyCopy(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 Matrix.prototype.invert = function invert() {\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 Matrix.prototype.clone = function clone() {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n };\n Matrix.prototype.equals = function equals(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 Matrix.prototype.round = function round$1(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 Matrix.prototype.toArray = function toArray(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 Matrix.prototype.toString = function toString(precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n };\n Matrix.translate = function translate(x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function unit() {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function rotate(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 scale(scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n return Matrix;\n }(Class);\n Matrix.IDENTITY = Matrix.unit();\n var matrixRegexp = /matrix\\((.*)\\)/;\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n var members = match[1].split(',').map(function (x) {\n return parseFloat(x);\n });\n return new (Function.prototype.bind.apply(Matrix, [null].concat(members)))();\n }\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n if (transform === 'none') {\n return Matrix.unit();\n }\n return parseMatrix(transform);\n }\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n var matrix = transformMatrix(element);\n var parent = element.parentElement;\n while (parent) {\n var parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n }\n var util = {\n append: append$1$1,\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 now: now,\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 elementPadding: elementPadding,\n elementScale: elementScale,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString$1 = {}.toString;\n var OptionsStore = function (HasObservers$$1) {\n function OptionsStore(options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n HasObservers$$1.call(this);\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 extendStatic(OptionsStore, HasObservers$$1);\n OptionsStore.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n OptionsStore.prototype.constructor = OptionsStore;\n OptionsStore.fn = OptionsStore.prototype;\n OptionsStore.fn.init = OptionsStore.fn.constructor;\n OptionsStore.prototype.get = function get(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 OptionsStore.prototype.set = function set(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 OptionsStore.prototype._set = function _set(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 OptionsStore.prototype._clear = function _clear(field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n };\n OptionsStore.prototype._wrap = function _wrap(object, field) {\n var type = toString$1.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 return OptionsStore;\n }(HasObservers);\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 withAccessors = function (TBase, names) {\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n defineAccessors(result.prototype, names);\n return result;\n };\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = function (superclass) {\n function Point(x, y) {\n superclass.call(this);\n this.x = x || 0;\n this.y = y || 0;\n }\n extendStatic(Point, superclass);\n Point.prototype = Object.create(superclass && superclass.prototype);\n Point.prototype.constructor = Point;\n Point.fn = Point.prototype;\n Point.fn.init = Point.fn.constructor;\n var staticAccessors = { ZERO: {} };\n Point.prototype.equals = function equals(other) {\n return other && other.x === this.x && other.y === this.y;\n };\n Point.prototype.clone = function clone() {\n return new Point(this.x, this.y);\n };\n Point.prototype.rotate = function rotate(angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n };\n Point.prototype.translate = function translate(x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n };\n Point.prototype.translateWith = function translateWith(point) {\n return this.translate(point.x, point.y);\n };\n Point.prototype.move = function move(x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n };\n Point.prototype.scale = function scale(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 Point.prototype.scaleCopy = function scaleCopy(scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n };\n Point.prototype.transform = function transform(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 Point.prototype.transformCopy = function transformCopy(transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n };\n Point.prototype.distanceTo = function distanceTo(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 Point.prototype.round = function round$1(digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n };\n Point.prototype.toArray = function toArray(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 Point.prototype.toString = function toString(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 Point.create = function create(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 min() {\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 max() {\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 minPoint() {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function maxPoint() {\n return new Point(MAX_NUM, MAX_NUM);\n };\n staticAccessors.ZERO.get = function () {\n return new Point(0, 0);\n };\n Object.defineProperties(Point, staticAccessors);\n return Point;\n }(withAccessors(HasObservers, [\n 'x',\n 'y'\n ]));\n var Size = function (superclass) {\n function Size(width, height) {\n superclass.call(this);\n this.width = width || 0;\n this.height = height || 0;\n }\n extendStatic(Size, superclass);\n Size.prototype = Object.create(superclass && superclass.prototype);\n Size.prototype.constructor = Size;\n Size.fn = Size.prototype;\n Size.fn.init = Size.fn.constructor;\n var staticAccessors = { ZERO: {} };\n Size.prototype.equals = function equals(other) {\n return other && other.width === this.width && other.height === this.height;\n };\n Size.prototype.clone = function clone() {\n return new Size(this.width, this.height);\n };\n Size.prototype.toArray = function toArray(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 Size.create = function create(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 staticAccessors.ZERO.get = function () {\n return new Size(0, 0);\n };\n Object.defineProperties(Size, staticAccessors);\n return Size;\n }(withAccessors(HasObservers, [\n 'width',\n 'height'\n ]));\n var Rect = function (HasObservers$$1) {\n function Rect(origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n HasObservers$$1.call(this);\n this.setOrigin(origin);\n this.setSize(size);\n }\n extendStatic(Rect, HasObservers$$1);\n Rect.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Rect.prototype.constructor = Rect;\n Rect.fn = Rect.prototype;\n Rect.fn.init = Rect.fn.constructor;\n Rect.prototype.clone = function clone() {\n return new Rect(this.origin.clone(), this.size.clone());\n };\n Rect.prototype.equals = function equals(other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n };\n Rect.prototype.setOrigin = function setOrigin(value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n };\n Rect.prototype.getOrigin = function getOrigin() {\n return this.origin;\n };\n Rect.prototype.setSize = function setSize(value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n };\n Rect.prototype.getSize = function getSize() {\n return this.size;\n };\n Rect.prototype.width = function width() {\n return this.size.width;\n };\n Rect.prototype.height = function height() {\n return this.size.height;\n };\n Rect.prototype.topLeft = function topLeft() {\n return this.origin.clone();\n };\n Rect.prototype.bottomRight = function bottomRight() {\n return this.origin.clone().translate(this.width(), this.height());\n };\n Rect.prototype.topRight = function topRight() {\n return this.origin.clone().translate(this.width(), 0);\n };\n Rect.prototype.bottomLeft = function bottomLeft() {\n return this.origin.clone().translate(0, this.height());\n };\n Rect.prototype.center = function center() {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n };\n Rect.prototype.bbox = function bbox(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 Rect.prototype.transformCopy = function transformCopy(m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n };\n Rect.prototype.expand = function expand(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 Rect.prototype.expandCopy = function expandCopy(x, y) {\n return this.clone().expand(x, y);\n };\n Rect.prototype.containsPoint = function containsPoint(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 Rect.prototype._isOnPath = function _isOnPath(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 Rect.fromPoints = function fromPoints() {\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 union(a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function intersect(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 return Rect;\n }(HasObservers);\n var Transformation = function (HasObservers$$1) {\n function Transformation(matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n HasObservers$$1.call(this);\n this._matrix = matrix;\n }\n extendStatic(Transformation, HasObservers$$1);\n Transformation.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Transformation.prototype.constructor = Transformation;\n Transformation.fn = Transformation.prototype;\n Transformation.fn.init = Transformation.fn.constructor;\n Transformation.prototype.clone = function clone() {\n return new Transformation(this._matrix.clone());\n };\n Transformation.prototype.equals = function equals(other) {\n return other && other._matrix.equals(this._matrix);\n };\n Transformation.prototype.translate = function translate(x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n };\n Transformation.prototype.scale = function scale(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 Transformation.prototype.rotate = function rotate(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 Transformation.prototype.multiply = function multiply(transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n };\n Transformation.prototype.matrix = function matrix(value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n };\n Transformation.prototype._optionsChange = function _optionsChange() {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n };\n return Transformation;\n }(HasObservers);\n function transform$1(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 = function (HasObservers$$1) {\n function Element(options) {\n HasObservers$$1.call(this);\n this._initOptions(options);\n }\n extendStatic(Element, HasObservers$$1);\n Element.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Element.prototype.constructor = Element;\n Element.fn = Element.prototype;\n Element.fn.init = Element.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Rect';\n };\n Element.prototype._initOptions = function _initOptions(options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform = options.transform;\n if (transform) {\n options.transform = transform$1(transform);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n };\n Element.prototype.transform = function transform(value) {\n if (defined(value)) {\n this.options.set('transform', transform$1(value));\n } else {\n return this.options.get('transform');\n }\n };\n Element.prototype.parentTransform = function parentTransform() {\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$1(parentMatrix);\n }\n };\n Element.prototype.currentTransform = function currentTransform(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$1(combinedMatrix);\n }\n };\n Element.prototype.visible = function visible(value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n };\n Element.prototype.clip = function clip(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 Element.prototype.opacity = function opacity(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 Element.prototype.clippedBBox = function clippedBBox(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 Element.prototype.containsPoint = function containsPoint(point, parentTransform) {\n if (this.visible()) {\n var transform = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform) {\n transformedPoint = point.transformCopy(transform.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n };\n Element.prototype._hasFill = function _hasFill() {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n };\n Element.prototype._hasStroke = function _hasStroke() {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n };\n Element.prototype._clippedBBox = function _clippedBBox(transformation) {\n return this.bbox(transformation);\n };\n Object.defineProperties(Element.prototype, prototypeAccessors);\n return Element;\n }(HasObservers);\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 = function (superclass) {\n function Circle(center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n superclass.call(this);\n this.setCenter(center);\n this.setRadius(radius);\n }\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create(superclass && superclass.prototype);\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n Circle.prototype.setCenter = function setCenter(value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n };\n Circle.prototype.getCenter = function getCenter() {\n return this.center;\n };\n Circle.prototype.equals = function equals(other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n };\n Circle.prototype.clone = function clone() {\n return new Circle(this.center.clone(), this.radius);\n };\n Circle.prototype.pointAt = function pointAt(angle) {\n return this._pointAt(rad(angle));\n };\n Circle.prototype.bbox = function bbox(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 Circle.prototype._pointAt = function _pointAt(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 Circle.prototype.containsPoint = function containsPoint(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 Circle.prototype._isOnPath = function _isOnPath(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 return Circle;\n }(withAccessors(HasObservers, ['radius']));\n var GRADIENT = 'Gradient';\n var paintable = function (TBase) {\n return function (TBase) {\n function anonymous() {\n TBase.apply(this, arguments);\n }\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create(TBase && TBase.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.fill = function fill(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 anonymous.prototype.stroke = function stroke(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 return anonymous;\n }(TBase);\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var measurable = function (TBase) {\n return function (TBase) {\n function anonymous() {\n TBase.apply(this, arguments);\n }\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create(TBase && TBase.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.bbox = function bbox(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 anonymous.prototype.geometryChange = function geometryChange() {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n };\n return anonymous;\n }(TBase);\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 withGeometry = function (TBase, names) {\n if (names === void 0) {\n names = ['geometry'];\n }\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n defineGeometryAccessors(result.prototype, names);\n return result;\n };\n var DEFAULT_STROKE = '#000';\n var Circle = function (superclass) {\n function Circle(geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n }\n extendStatic(Circle, superclass);\n Circle.prototype = Object.create(superclass && superclass.prototype);\n Circle.prototype.constructor = Circle;\n Circle.fn = Circle.prototype;\n Circle.fn.init = Circle.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Circle';\n };\n Circle.prototype.rawBBox = function rawBBox() {\n return this._geometry.bbox();\n };\n Circle.prototype._bbox = function _bbox(matrix) {\n return this._geometry.bbox(matrix);\n };\n Circle.prototype._containsPoint = function _containsPoint(point) {\n return this.geometry().containsPoint(point);\n };\n Circle.prototype._isOnPath = function _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n Object.defineProperties(Circle.prototype, prototypeAccessors);\n return Circle;\n }(paintable(measurable(withGeometry(Element$1))));\n var PRECISION = 10;\n function close$1(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$1(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 accessors = [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ];\n var Arc$2 = function (superclass) {\n function Arc(center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this);\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 extendStatic(Arc, superclass);\n Arc.prototype = Object.create(superclass && superclass.prototype);\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n Arc.prototype.clone = function clone() {\n return new Arc(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 Arc.prototype.setCenter = function setCenter(value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n };\n Arc.prototype.getCenter = function getCenter() {\n return this.center;\n };\n Arc.prototype.pointAt = function pointAt(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 Arc.prototype.curvePoints = function curvePoints() {\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$1().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 Arc.prototype.bbox = function bbox(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 Arc.prototype._arcInterval = function _arcInterval() {\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 Arc.prototype._intervalCurvePoints = function _intervalCurvePoints(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 Arc.prototype._derivativeAt = function _derivativeAt(angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n };\n Arc.prototype.containsPoint = function containsPoint(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 Arc.prototype._isOnPath = function _isOnPath(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 Arc.fromPoints = function fromPoints(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(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 return Arc;\n }(withAccessors(HasObservers, accessors));\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 = function (HasObservers$$1) {\n function ElementsArray(array) {\n if (array === void 0) {\n array = [];\n }\n HasObservers$$1.call(this);\n this.length = 0;\n this._splice(0, array.length, array);\n }\n extendStatic(ElementsArray, HasObservers$$1);\n ElementsArray.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n ElementsArray.prototype.constructor = ElementsArray;\n ElementsArray.fn = ElementsArray.prototype;\n ElementsArray.fn.init = ElementsArray.fn.constructor;\n ElementsArray.prototype.elements = function elements(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 ElementsArray.prototype.push = function push$1() {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n };\n ElementsArray.prototype.slice = function slice$1() {\n return slice.call(this);\n };\n ElementsArray.prototype.pop = function pop$1() {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n };\n ElementsArray.prototype.splice = function splice$1(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 ElementsArray.prototype.shift = function shift$1() {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n };\n ElementsArray.prototype.unshift = function unshift$1() {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n };\n ElementsArray.prototype.indexOf = function indexOf(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 ElementsArray.prototype._splice = function _splice(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 ElementsArray.prototype._add = function _add(elements) {\n this._setObserver(elements);\n this._change();\n };\n ElementsArray.prototype._remove = function _remove(elements) {\n this._clearObserver(elements);\n this._change();\n };\n ElementsArray.prototype._setObserver = function _setObserver(elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n };\n ElementsArray.prototype._clearObserver = function _clearObserver(elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n };\n ElementsArray.prototype._change = function _change() {\n };\n return ElementsArray;\n }(HasObservers);\n var GeometryElementsArray = function (ElementsArray$$1) {\n function GeometryElementsArray() {\n ElementsArray$$1.apply(this, arguments);\n }\n extendStatic(GeometryElementsArray, ElementsArray$$1);\n GeometryElementsArray.prototype = Object.create(ElementsArray$$1 && ElementsArray$$1.prototype);\n GeometryElementsArray.prototype.constructor = GeometryElementsArray;\n GeometryElementsArray.fn = GeometryElementsArray.prototype;\n GeometryElementsArray.fn.init = GeometryElementsArray.fn.constructor;\n GeometryElementsArray.prototype._change = function _change() {\n this.geometryChange();\n };\n return GeometryElementsArray;\n }(ElementsArray);\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$1().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 = function (Class$$1) {\n function ComplexNumber(real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n Class$$1.call(this);\n this.real = real;\n this.img = img;\n }\n extendStatic(ComplexNumber, Class$$1);\n ComplexNumber.prototype = Object.create(Class$$1 && Class$$1.prototype);\n ComplexNumber.prototype.constructor = ComplexNumber;\n ComplexNumber.fn = ComplexNumber.prototype;\n ComplexNumber.fn.init = ComplexNumber.fn.constructor;\n ComplexNumber.prototype.add = function add(cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n };\n ComplexNumber.prototype.addConstant = function addConstant(value) {\n return new ComplexNumber(this.real + value, this.img);\n };\n ComplexNumber.prototype.negate = function negate() {\n return new ComplexNumber(-this.real, -this.img);\n };\n ComplexNumber.prototype.multiply = function multiply(cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n };\n ComplexNumber.prototype.multiplyConstant = function multiplyConstant(value) {\n return new ComplexNumber(this.real * value, this.img * value);\n };\n ComplexNumber.prototype.nthRoot = function nthRoot(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 ComplexNumber.prototype.equals = function equals(cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n };\n ComplexNumber.prototype.isReal = function isReal() {\n return this.img === 0;\n };\n return ComplexNumber;\n }(Class);\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$1(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 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 var withPoints = function (TBase, names) {\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n definePointAccessors(result.prototype, names);\n return result;\n };\n var points = [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ];\n var Segment = function (superclass) {\n function Segment(anchor, controlIn, controlOut) {\n superclass.call(this);\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n }\n extendStatic(Segment, superclass);\n Segment.prototype = Object.create(superclass && superclass.prototype);\n Segment.prototype.constructor = Segment;\n Segment.fn = Segment.prototype;\n Segment.fn.init = Segment.fn.constructor;\n Segment.prototype.bboxTo = function bboxTo(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 Segment.prototype._lineBoundingBox = function _lineBoundingBox(p1, p2) {\n return Rect.fromPoints(p1, p2);\n };\n Segment.prototype._curveBoundingBox = function _curveBoundingBox(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 Segment.prototype._curveExtremesFor = function _curveExtremesFor(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 Segment.prototype._curveExtremes = function _curveExtremes(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 Segment.prototype._intersectionsTo = function _intersectionsTo(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 Segment.prototype._isOnCurveTo = function _isOnCurveTo(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$1().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 Segment.prototype._isOnLineTo = function _isOnLineTo(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$1().rotate(-angle, p1)));\n };\n Segment.prototype._isOnPathTo = function _isOnPathTo(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 return Segment;\n }(withPoints(HasObservers, points));\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 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 function parsePath(pathInstance, str) {\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 pathInstance.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](pathInstance, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n pathInstance.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 pathInstance;\n }\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 Path = function (superclass) {\n function Path(options) {\n superclass.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 extendStatic(Path, superclass);\n Path.prototype = Object.create(superclass && superclass.prototype);\n Path.prototype.constructor = Path;\n Path.fn = Path.prototype;\n Path.fn.init = Path.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n Path.parse = function parse(str, options) {\n return MultiPath.parse(str, options);\n };\n prototypeAccessors.nodeType.get = function () {\n return 'Path';\n };\n Path.prototype.moveTo = function moveTo(x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n };\n Path.prototype.lineTo = function lineTo(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 Path.prototype.curveTo = function curveTo(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 Path.prototype.arc = function arc(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 Path.prototype.arcTo = function arcTo(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 Path.prototype._addArcSegments = function _addArcSegments(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 Path.prototype.close = function close() {\n this.options.closed = true;\n this.geometryChange();\n return this;\n };\n Path.prototype.rawBBox = function rawBBox() {\n return this._bbox();\n };\n Path.prototype._containsPoint = function _containsPoint(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 Path.prototype._isOnPath = function _isOnPath(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 Path.prototype._bbox = function _bbox(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 Path.fromRect = function fromRect(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 fromPoints(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 fromArc(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 Object.defineProperties(Path.prototype, prototypeAccessors);\n return Path;\n }(paintable(measurable(Element$1)));\n var MultiPath = function (superclass) {\n function MultiPath(options) {\n superclass.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 extendStatic(MultiPath, superclass);\n MultiPath.prototype = Object.create(superclass && superclass.prototype);\n MultiPath.prototype.constructor = MultiPath;\n MultiPath.fn = MultiPath.prototype;\n MultiPath.fn.init = MultiPath.fn.constructor;\n var prototypeAccessors$1 = { nodeType: {} };\n MultiPath.parse = function parse(str, options) {\n var instance = new MultiPath(options);\n return parsePath(instance, str);\n };\n prototypeAccessors$1.nodeType.get = function () {\n return 'MultiPath';\n };\n MultiPath.prototype.moveTo = function moveTo(x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n };\n MultiPath.prototype.lineTo = function lineTo(x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n };\n MultiPath.prototype.curveTo = function curveTo(controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n };\n MultiPath.prototype.arc = function arc(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 MultiPath.prototype.arcTo = function arcTo(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 MultiPath.prototype.close = function close() {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n };\n MultiPath.prototype._bbox = function _bbox(matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n };\n MultiPath.prototype.rawBBox = function rawBBox() {\n return elementsBoundingBox(this.paths, false);\n };\n MultiPath.prototype._containsPoint = function _containsPoint(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 MultiPath.prototype._isOnPath = function _isOnPath(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 MultiPath.prototype._clippedBBox = function _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n };\n Object.defineProperties(MultiPath.prototype, prototypeAccessors$1);\n return MultiPath;\n }(paintable(measurable(Element$1)));\n var DEFAULT_STROKE$1 = '#000';\n var Arc = function (superclass) {\n function Arc(geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n }\n extendStatic(Arc, superclass);\n Arc.prototype = Object.create(superclass && superclass.prototype);\n Arc.prototype.constructor = Arc;\n Arc.fn = Arc.prototype;\n Arc.fn.init = Arc.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Arc';\n };\n Arc.prototype._bbox = function _bbox(matrix) {\n return this._geometry.bbox(matrix);\n };\n Arc.prototype.rawBBox = function rawBBox() {\n return this.geometry().bbox();\n };\n Arc.prototype.toPath = function toPath() {\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 Arc.prototype._containsPoint = function _containsPoint(point) {\n return this.geometry().containsPoint(point);\n };\n Arc.prototype._isOnPath = function _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n Object.defineProperties(Arc.prototype, prototypeAccessors);\n return Arc;\n }(paintable(measurable(withGeometry(Element$1))));\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = function (superclass) {\n function Text(content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.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 extendStatic(Text, superclass);\n Text.prototype = Object.create(superclass && superclass.prototype);\n Text.prototype.constructor = Text;\n Text.fn = Text.prototype;\n Text.fn.init = Text.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Text';\n };\n Text.prototype.content = function content(value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n };\n Text.prototype.measure = function measure() {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n };\n Text.prototype.rect = function rect() {\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 Text.prototype.bbox = function bbox(transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n };\n Text.prototype.rawBBox = function rawBBox() {\n return this.rect().bbox();\n };\n Text.prototype._containsPoint = function _containsPoint(point) {\n return this.rect().containsPoint(point);\n };\n Object.defineProperties(Text.prototype, prototypeAccessors);\n return Text;\n }(paintable(withPoints(Element$1, ['position'])));\n var Image$1 = function (superclass) {\n function Image(src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.src(src);\n this.rect(rect);\n }\n extendStatic(Image, superclass);\n Image.prototype = Object.create(superclass && superclass.prototype);\n Image.prototype.constructor = Image;\n Image.fn = Image.prototype;\n Image.fn.init = Image.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Image';\n };\n Image.prototype.src = function src(value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n };\n Image.prototype.bbox = function bbox(transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n };\n Image.prototype.rawBBox = function rawBBox() {\n return this._rect.bbox();\n };\n Image.prototype._containsPoint = function _containsPoint(point) {\n return this._rect.containsPoint(point);\n };\n Image.prototype._hasFill = function _hasFill() {\n return this.src();\n };\n Object.defineProperties(Image.prototype, prototypeAccessors);\n return Image;\n }(withGeometry(Element$1, ['rect']));\n var traversable = function (TBase, childrenField) {\n return function (TBase) {\n function anonymous() {\n TBase.apply(this, arguments);\n }\n extendStatic(anonymous, TBase);\n anonymous.prototype = Object.create(TBase && TBase.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.traverse = function traverse(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 return anonymous;\n }(TBase);\n };\n var Group = function (superclass) {\n function Group(options) {\n superclass.call(this, options);\n this.children = [];\n }\n extendStatic(Group, superclass);\n Group.prototype = Object.create(superclass && superclass.prototype);\n Group.prototype.constructor = Group;\n Group.fn = Group.prototype;\n Group.fn.init = Group.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Group';\n };\n Group.prototype.childrenChange = function childrenChange(action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n };\n Group.prototype.append = function append$1() {\n append$1$1(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n };\n Group.prototype.insert = function insert(index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n };\n Group.prototype.insertAt = function insertAt(element, index) {\n return this.insert(index, element);\n };\n Group.prototype.remove = function remove(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 Group.prototype.removeAt = function removeAt(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 Group.prototype.clear = function clear() {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n };\n Group.prototype.bbox = function bbox(transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n };\n Group.prototype.rawBBox = function rawBBox() {\n return elementsBoundingBox(this.children, false);\n };\n Group.prototype._clippedBBox = function _clippedBBox(transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n };\n Group.prototype.currentTransform = function currentTransform(transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n };\n Group.prototype.containsPoint = function containsPoint(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 Group.prototype._reparent = function _reparent(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 Object.defineProperties(Group.prototype, prototypeAccessors);\n return Group;\n }(traversable(Element$1, 'children'));\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform$1();\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 = function (Group$$1) {\n function Layout(rect, options) {\n Group$$1.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n }\n extendStatic(Layout, Group$$1);\n Layout.prototype = Object.create(Group$$1 && Group$$1.prototype);\n Layout.prototype.constructor = Layout;\n Layout.fn = Layout.prototype;\n Layout.fn.init = Layout.fn.constructor;\n Layout.prototype.rect = function rect(value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n };\n Layout.prototype._initMap = function _initMap() {\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 Layout.prototype.reflow = function reflow() {\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 = transform$1();\n if (groupAxis === 'x') {\n transform.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform.scale(scale, scale);\n this.transform(transform);\n }\n };\n Layout.prototype._initGroups = function _initGroups() {\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 Layout.prototype._addToGroup = function _addToGroup(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 Layout.prototype._newGroup = function _newGroup() {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n };\n return Layout;\n }(Group);\n var Rect$2 = function (superclass) {\n function Rect$$1(geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n }\n extendStatic(Rect$$1, superclass);\n Rect$$1.prototype = Object.create(superclass && superclass.prototype);\n Rect$$1.prototype.constructor = Rect$$1;\n Rect$$1.fn = Rect$$1.prototype;\n Rect$$1.fn.init = Rect$$1.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Rect';\n };\n Rect$$1.prototype._bbox = function _bbox(matrix) {\n return this._geometry.bbox(matrix);\n };\n Rect$$1.prototype.rawBBox = function rawBBox() {\n return this._geometry.bbox();\n };\n Rect$$1.prototype._containsPoint = function _containsPoint(point) {\n return this._geometry.containsPoint(point);\n };\n Rect$$1.prototype._isOnPath = function _isOnPath(point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n };\n Object.defineProperties(Rect$$1.prototype, prototypeAccessors);\n return Rect$$1;\n }(paintable(measurable(withGeometry(Element$1))));\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 = element.transform() || transform$1();\n transform.scale(scale, scale);\n element.transform(transform);\n }\n }\n }\n var StopsArray = function (ElementsArray$$1) {\n function StopsArray() {\n ElementsArray$$1.apply(this, arguments);\n }\n extendStatic(StopsArray, ElementsArray$$1);\n StopsArray.prototype = Object.create(ElementsArray$$1 && ElementsArray$$1.prototype);\n StopsArray.prototype.constructor = StopsArray;\n StopsArray.fn = StopsArray.prototype;\n StopsArray.fn.init = StopsArray.fn.constructor;\n StopsArray.prototype._change = function _change() {\n this.optionsChange({ field: 'stops' });\n };\n return StopsArray;\n }(ElementsArray);\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 withOptions = function (TBase, names) {\n var result = function (TBase) {\n function result() {\n TBase.apply(this, arguments);\n }\n extendStatic(result, TBase);\n result.prototype = Object.create(TBase && TBase.prototype);\n result.prototype.constructor = result;\n result.fn = result.prototype;\n result.fn.init = result.fn.constructor;\n return result;\n }(TBase);\n defineOptionsAccessors(result.prototype, names);\n return result;\n };\n var options = [\n 'offset',\n 'color',\n 'opacity'\n ];\n var GradientStop = function (superclass) {\n function GradientStop(offset, color, opacity) {\n superclass.call(this);\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 extendStatic(GradientStop, superclass);\n GradientStop.prototype = Object.create(superclass && superclass.prototype);\n GradientStop.prototype.constructor = GradientStop;\n GradientStop.fn = GradientStop.prototype;\n GradientStop.fn.init = GradientStop.fn.constructor;\n GradientStop.create = function create(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 return GradientStop;\n }(withOptions(HasObservers, options));\n var Gradient = function (HasObservers$$1) {\n function Gradient(options) {\n if (options === void 0) {\n options = {};\n }\n HasObservers$$1.call(this);\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 extendStatic(Gradient, HasObservers$$1);\n Gradient.prototype = Object.create(HasObservers$$1 && HasObservers$$1.prototype);\n Gradient.prototype.constructor = Gradient;\n Gradient.fn = Gradient.prototype;\n Gradient.fn.init = Gradient.fn.constructor;\n var prototypeAccessors = { nodeType: {} };\n prototypeAccessors.nodeType.get = function () {\n return 'Gradient';\n };\n Gradient.prototype.userSpace = function userSpace(value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n };\n Gradient.prototype._createStops = function _createStops(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 Gradient.prototype.addStop = function addStop(offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n };\n Gradient.prototype.removeStop = function removeStop(stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n };\n Gradient.prototype.optionsChange = function optionsChange(e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n };\n Gradient.prototype.geometryChange = function geometryChange() {\n this.optionsChange();\n };\n Object.defineProperties(Gradient.prototype, prototypeAccessors);\n return Gradient;\n }(HasObservers);\n var points$1 = [\n 'start',\n 'end'\n ];\n var LinearGradient = function (superclass) {\n function LinearGradient(options) {\n if (options === void 0) {\n options = {};\n }\n superclass.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n extendStatic(LinearGradient, superclass);\n LinearGradient.prototype = Object.create(superclass && superclass.prototype);\n LinearGradient.prototype.constructor = LinearGradient;\n LinearGradient.fn = LinearGradient.prototype;\n LinearGradient.fn.init = LinearGradient.fn.constructor;\n return LinearGradient;\n }(withPoints(Gradient, points$1));\n var RadialGradient = function (superclass) {\n function RadialGradient(options) {\n if (options === void 0) {\n options = {};\n }\n superclass.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 extendStatic(RadialGradient, superclass);\n RadialGradient.prototype = Object.create(superclass && superclass.prototype);\n RadialGradient.prototype.constructor = RadialGradient;\n RadialGradient.fn = RadialGradient.prototype;\n RadialGradient.fn.init = RadialGradient.fn.constructor;\n RadialGradient.prototype.radius = function radius(value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n };\n RadialGradient.prototype.fallbackFill = function fallbackFill(value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n };\n return RadialGradient;\n }(withPoints(Gradient, ['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 instance;\n var AnimationFactory = function (Class$$1) {\n function AnimationFactory() {\n Class$$1.call(this);\n this._items = [];\n }\n extendStatic(AnimationFactory, Class$$1);\n AnimationFactory.prototype = Object.create(Class$$1 && Class$$1.prototype);\n AnimationFactory.prototype.constructor = AnimationFactory;\n AnimationFactory.fn = AnimationFactory.prototype;\n AnimationFactory.fn.init = AnimationFactory.fn.constructor;\n var staticAccessors = { current: {} };\n staticAccessors.current.get = function () {\n if (!instance) {\n instance = new AnimationFactory();\n }\n return instance;\n };\n AnimationFactory.prototype.register = function register(name, type) {\n this._items.push({\n name: name,\n type: type\n });\n };\n AnimationFactory.prototype.create = function create(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 Object.defineProperties(AnimationFactory, staticAccessors);\n return AnimationFactory;\n }(Class);\n var Animation = function (Class$$1) {\n function Animation(element, options) {\n Class$$1.call(this);\n this.options = $.extend({}, this.options, options);\n this.element = element;\n }\n extendStatic(Animation, Class$$1);\n Animation.prototype = Object.create(Class$$1 && Class$$1.prototype);\n Animation.prototype.constructor = Animation;\n Animation.fn = Animation.prototype;\n Animation.fn.init = Animation.fn.constructor;\n var prototypeAccessors = { options: {} };\n Animation.create = function create(type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n prototypeAccessors.options.get = function () {\n return this._options || {\n duration: 500,\n easing: 'swing'\n };\n };\n prototypeAccessors.options.set = function (value) {\n this._options = value;\n };\n Animation.prototype.setup = function setup() {\n };\n Animation.prototype.step = function step() {\n };\n Animation.prototype.play = function play() {\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 Animation.prototype.abort = function abort() {\n this._stopped = true;\n };\n Animation.prototype.destroy = function destroy() {\n this.abort();\n };\n Object.defineProperties(Animation.prototype, prototypeAccessors);\n return Animation;\n }(Class);\n var instance$1;\n var PathParser = function (Class$$1) {\n function PathParser() {\n Class$$1.apply(this, arguments);\n }\n extendStatic(PathParser, Class$$1);\n PathParser.prototype = Object.create(Class$$1 && Class$$1.prototype);\n PathParser.prototype.constructor = PathParser;\n PathParser.fn = PathParser.prototype;\n PathParser.fn.init = PathParser.fn.constructor;\n var staticAccessors = { current: {} };\n staticAccessors.current.get = function () {\n if (!instance$1) {\n instance$1 = new PathParser();\n }\n return instance$1;\n };\n PathParser.prototype.parse = function parse(str, options) {\n var multiPath = new MultiPath(options);\n return parsePath(multiPath, str);\n };\n Object.defineProperties(PathParser, staticAccessors);\n return PathParser;\n }(Class);\n var BaseNode = function (Class$$1) {\n function BaseNode(srcElement) {\n Class$$1.call(this);\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n }\n extendStatic(BaseNode, Class$$1);\n BaseNode.prototype = Object.create(Class$$1 && Class$$1.prototype);\n BaseNode.prototype.constructor = BaseNode;\n BaseNode.fn = BaseNode.prototype;\n BaseNode.fn.init = BaseNode.fn.constructor;\n BaseNode.prototype.destroy = function destroy() {\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 BaseNode.prototype.load = function load() {\n };\n BaseNode.prototype.observe = function observe() {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n };\n BaseNode.prototype.append = function append(node) {\n this.childNodes.push(node);\n node.parent = this;\n };\n BaseNode.prototype.insertAt = function insertAt(node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n };\n BaseNode.prototype.remove = function remove(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 BaseNode.prototype.removeSelf = function removeSelf() {\n this.clear();\n this.destroy();\n };\n BaseNode.prototype.clear = function clear() {\n this.remove(0, this.childNodes.length);\n };\n BaseNode.prototype.invalidate = function invalidate() {\n if (this.parent) {\n this.parent.invalidate();\n }\n };\n BaseNode.prototype.geometryChange = function geometryChange() {\n this.invalidate();\n };\n BaseNode.prototype.optionsChange = function optionsChange() {\n this.invalidate();\n };\n BaseNode.prototype.childrenChange = function childrenChange(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 return BaseNode;\n }(Class);\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize'\n ];\n var Surface$2 = function (Observable$$1) {\n function Surface(element, options) {\n Observable$$1.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 extendStatic(Surface, Observable$$1);\n Surface.prototype = Object.create(Observable$$1 && Observable$$1.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n Surface.prototype.draw = function draw(element) {\n this._visual.children.push(element);\n };\n Surface.prototype.clear = function clear() {\n this._visual.children = [];\n };\n Surface.prototype.destroy = function destroy() {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n };\n Surface.prototype.eventTarget = function eventTarget(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 Surface.prototype.exportVisual = function exportVisual() {\n return this._visual;\n };\n Surface.prototype.getSize = function getSize() {\n return elementSize(this.element);\n };\n Surface.prototype.currentSize = function currentSize(size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n };\n Surface.prototype.setSize = function setSize(size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n };\n Surface.prototype.resize = function resize(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 Surface.prototype.size = function size(value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n };\n Surface.prototype.suspendTracking = function suspendTracking() {\n this._suspendedTracking = true;\n };\n Surface.prototype.resumeTracking = function resumeTracking() {\n this._suspendedTracking = false;\n };\n Surface.prototype._enableTracking = function _enableTracking() {\n };\n Surface.prototype._resize = function _resize() {\n };\n Surface.prototype._handler = function _handler(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 Surface.prototype._elementOffset = function _elementOffset() {\n var element = this.element;\n var padding = elementPadding(element);\n var ref = elementOffset(element);\n var left = ref.left;\n var top = ref.top;\n return {\n left: left + padding.left,\n top: top + padding.top\n };\n };\n Surface.prototype._surfacePoint = function _surfacePoint(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 var inverseTransform = elementScale(this.element).invert();\n var point = new Point(x, y).transform(inverseTransform);\n return point;\n };\n return Surface;\n }(kendo.Observable);\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 url = '';\n if (base && !(supportBrowser || {}).msie) {\n var hashIndex = href.indexOf('#');\n if (hashIndex !== -1) {\n href = href.substring(0, hashIndex);\n }\n url = href;\n }\n return url;\n }\n var Node = function (BaseNode$$1) {\n function Node(srcElement, options) {\n BaseNode$$1.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n }\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create(BaseNode$$1 && BaseNode$$1.prototype);\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n Node.prototype.destroy = function destroy() {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode$$1.prototype.destroy.call(this);\n };\n Node.prototype.load = function load(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 Node.prototype.root = function root() {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n };\n Node.prototype.attachTo = function attachTo(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 Node.prototype.setElement = function setElement(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 Node.prototype.clear = function clear() {\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 Node.prototype.removeSelf = function removeSelf() {\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$$1.prototype.removeSelf.call(this);\n };\n Node.prototype.template = function template() {\n return this.renderChildren();\n };\n Node.prototype.render = function render() {\n return this.template();\n };\n Node.prototype.renderChildren = function renderChildren() {\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 Node.prototype.optionsChange = function optionsChange(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$$1.prototype.optionsChange.call(this, e);\n };\n Node.prototype.attr = function attr(name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n };\n Node.prototype.allAttr = function allAttr(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 Node.prototype.css = function css(name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n };\n Node.prototype.allCss = function allCss(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 Node.prototype.removeAttr = function removeAttr(name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n };\n Node.prototype.mapTransform = function mapTransform(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 Node.prototype.renderTransform = function renderTransform() {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n };\n Node.prototype.transformChange = function transformChange(value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n };\n Node.prototype.mapStyle = function mapStyle() {\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 Node.prototype.renderStyle = function renderStyle$1() {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n };\n Node.prototype.renderOpacity = function renderOpacity() {\n return renderAttr('opacity', this.srcElement.options.opacity);\n };\n Node.prototype.renderId = function renderId() {\n return renderAttr('id', this.srcElement.options.id);\n };\n Node.prototype.createDefinitions = function createDefinitions() {\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 Node.prototype.definitionChange = function definitionChange(e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n };\n Node.prototype.updateDefinition = function updateDefinition(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 Node.prototype.clearDefinitions = function clearDefinitions() {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n };\n Node.prototype.renderDefinitions = function renderDefinitions() {\n return renderAllAttr(this.mapDefinitions());\n };\n Node.prototype.mapDefinitions = function mapDefinitions() {\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 Node.prototype.refUrl = function refUrl(id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n var baseHref = this.baseUrl().replace(/'/g, '\\\\\\'');\n var base = skipBaseHref ? '' : baseHref;\n return 'url(' + base + '#' + id + ')';\n };\n Node.prototype.baseUrl = function baseUrl$1() {\n return baseUrl();\n };\n return Node;\n }(BaseNode);\n var GradientStopNode = function (Node$$1) {\n function GradientStopNode() {\n Node$$1.apply(this, arguments);\n }\n extendStatic(GradientStopNode, Node$$1);\n GradientStopNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n GradientStopNode.prototype.constructor = GradientStopNode;\n GradientStopNode.fn = GradientStopNode.prototype;\n GradientStopNode.fn.init = GradientStopNode.fn.constructor;\n GradientStopNode.prototype.template = function template() {\n return '';\n };\n GradientStopNode.prototype.renderOffset = function renderOffset() {\n return renderAttr('offset', this.srcElement.offset());\n };\n GradientStopNode.prototype.mapStyle = function mapStyle() {\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 GradientStopNode.prototype.optionsChange = function optionsChange(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 return GradientStopNode;\n }(Node);\n var GradientNode = function (Node$$1) {\n function GradientNode(srcElement) {\n Node$$1.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n }\n extendStatic(GradientNode, Node$$1);\n GradientNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n GradientNode.prototype.constructor = GradientNode;\n GradientNode.fn = GradientNode.prototype;\n GradientNode.fn.init = GradientNode.fn.constructor;\n GradientNode.prototype.loadStops = function loadStops() {\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 GradientNode.prototype.optionsChange = function optionsChange(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 GradientNode.prototype.renderCoordinates = function renderCoordinates() {\n return renderAllAttr(this.mapCoordinates());\n };\n GradientNode.prototype.mapSpace = function mapSpace() {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n };\n return GradientNode;\n }(Node);\n var LinearGradientNode = function (GradientNode$$1) {\n function LinearGradientNode() {\n GradientNode$$1.apply(this, arguments);\n }\n extendStatic(LinearGradientNode, GradientNode$$1);\n LinearGradientNode.prototype = Object.create(GradientNode$$1 && GradientNode$$1.prototype);\n LinearGradientNode.prototype.constructor = LinearGradientNode;\n LinearGradientNode.fn = LinearGradientNode.prototype;\n LinearGradientNode.fn.init = LinearGradientNode.fn.constructor;\n LinearGradientNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n LinearGradientNode.prototype.mapCoordinates = function mapCoordinates() {\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 return LinearGradientNode;\n }(GradientNode);\n var RadialGradientNode = function (GradientNode$$1) {\n function RadialGradientNode() {\n GradientNode$$1.apply(this, arguments);\n }\n extendStatic(RadialGradientNode, GradientNode$$1);\n RadialGradientNode.prototype = Object.create(GradientNode$$1 && GradientNode$$1.prototype);\n RadialGradientNode.prototype.constructor = RadialGradientNode;\n RadialGradientNode.fn = RadialGradientNode.prototype;\n RadialGradientNode.fn.init = RadialGradientNode.fn.constructor;\n RadialGradientNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n RadialGradientNode.prototype.mapCoordinates = function mapCoordinates() {\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 return RadialGradientNode;\n }(GradientNode);\n var ClipNode = function (Node$$1) {\n function ClipNode(srcElement) {\n Node$$1.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n }\n extendStatic(ClipNode, Node$$1);\n ClipNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n ClipNode.prototype.constructor = ClipNode;\n ClipNode.fn = ClipNode.prototype;\n ClipNode.fn.init = ClipNode.fn.constructor;\n ClipNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n return ClipNode;\n }(Node);\n var DefinitionNode = function (Node$$1) {\n function DefinitionNode() {\n Node$$1.call(this);\n this.definitionMap = {};\n }\n extendStatic(DefinitionNode, Node$$1);\n DefinitionNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n DefinitionNode.prototype.constructor = DefinitionNode;\n DefinitionNode.fn = DefinitionNode.prototype;\n DefinitionNode.fn.init = DefinitionNode.fn.constructor;\n DefinitionNode.prototype.attachTo = function attachTo(domElement) {\n this.element = domElement;\n };\n DefinitionNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n DefinitionNode.prototype.definitionChange = function definitionChange(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 DefinitionNode.prototype.createDefinition = function createDefinition(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 DefinitionNode.prototype.addDefinitions = function addDefinitions(definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n };\n DefinitionNode.prototype.addDefinition = function addDefinition(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 DefinitionNode.prototype.removeDefinitions = function removeDefinitions(definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n };\n DefinitionNode.prototype.removeDefinition = function removeDefinition(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 return DefinitionNode;\n }(Node);\n var RootNode = function (Node$$1) {\n function RootNode(options) {\n Node$$1.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n }\n extendStatic(RootNode, Node$$1);\n RootNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n RootNode.prototype.attachTo = function attachTo(domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n };\n RootNode.prototype.clear = function clear() {\n BaseNode.prototype.clear.call(this);\n };\n RootNode.prototype.template = function template() {\n return this.defs.render() + this.renderChildren();\n };\n RootNode.prototype.definitionChange = function definitionChange(e) {\n this.defs.definitionChange(e);\n };\n return RootNode;\n }(Node);\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 = function (Node$$1) {\n function PathNode() {\n Node$$1.apply(this, arguments);\n }\n extendStatic(PathNode, Node$$1);\n PathNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n PathNode.prototype.geometryChange = function geometryChange() {\n this.attr('d', this.renderData());\n this.invalidate();\n };\n PathNode.prototype.optionsChange = function optionsChange(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$$1.prototype.optionsChange.call(this, e);\n };\n PathNode.prototype.content = function content() {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n };\n PathNode.prototype.renderData = function renderData() {\n return this.printPath(this.srcElement);\n };\n PathNode.prototype.printPath = function printPath(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 PathNode.prototype.printPoints = function printPoints() {\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 PathNode.prototype.segmentType = function segmentType(segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n };\n PathNode.prototype.mapStroke = function mapStroke(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 PathNode.prototype.renderStroke = function renderStroke() {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n };\n PathNode.prototype.renderDashType = function renderDashType(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 PathNode.prototype.renderLinecap = function renderLinecap(stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n };\n PathNode.prototype.mapFill = function mapFill(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 PathNode.prototype.renderFill = function renderFill() {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n };\n PathNode.prototype.template = function template() {\n return '';\n };\n return PathNode;\n }(Node);\n var ArcNode = function (PathNode$$1) {\n function ArcNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(ArcNode, PathNode$$1);\n ArcNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n ArcNode.prototype.renderData = function renderData() {\n return this.printPath(this.srcElement.toPath());\n };\n return ArcNode;\n }(PathNode);\n var CircleNode = function (PathNode$$1) {\n function CircleNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(CircleNode, PathNode$$1);\n CircleNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n CircleNode.prototype.geometryChange = function geometryChange() {\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 CircleNode.prototype.center = function center() {\n return this.srcElement.geometry().center;\n };\n CircleNode.prototype.radius = function radius() {\n return this.srcElement.geometry().radius;\n };\n CircleNode.prototype.template = function template() {\n return '';\n };\n return CircleNode;\n }(PathNode);\n var GroupNode = function (Node$$1) {\n function GroupNode() {\n Node$$1.apply(this, arguments);\n }\n extendStatic(GroupNode, Node$$1);\n GroupNode.prototype = Object.create(Node$$1 && Node$$1.prototype);\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n GroupNode.prototype.template = function template() {\n return '' + this.renderChildren() + '';\n };\n GroupNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node$$1.prototype.optionsChange.call(this, e);\n };\n return GroupNode;\n }(Node);\n var ImageNode = function (PathNode$$1) {\n function ImageNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(ImageNode, PathNode$$1);\n ImageNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n ImageNode.prototype.geometryChange = function geometryChange() {\n this.allAttr(this.mapPosition());\n this.invalidate();\n };\n ImageNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n ImageNode.prototype.mapPosition = function mapPosition() {\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 ImageNode.prototype.renderPosition = function renderPosition() {\n return renderAllAttr(this.mapPosition());\n };\n ImageNode.prototype.mapSource = function mapSource(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 ImageNode.prototype.renderSource = function renderSource() {\n return renderAllAttr(this.mapSource(true));\n };\n ImageNode.prototype.template = function template() {\n return '' + '';\n };\n return ImageNode;\n }(PathNode);\n var MultiPathNode = function (PathNode$$1) {\n function MultiPathNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(MultiPathNode, PathNode$$1);\n MultiPathNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n MultiPathNode.prototype.renderData = function renderData() {\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 return MultiPathNode;\n }(PathNode);\n var RectNode = function (PathNode$$1) {\n function RectNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(RectNode, PathNode$$1);\n RectNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n RectNode.prototype.geometryChange = function geometryChange() {\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 RectNode.prototype.size = function size() {\n return this.srcElement.geometry().size;\n };\n RectNode.prototype.origin = function origin() {\n return this.srcElement.geometry().origin;\n };\n RectNode.prototype.template = function template() {\n return '';\n };\n return RectNode;\n }(PathNode);\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 = function (PathNode$$1) {\n function TextNode() {\n PathNode$$1.apply(this, arguments);\n }\n extendStatic(TextNode, PathNode$$1);\n TextNode.prototype = Object.create(PathNode$$1 && PathNode$$1.prototype);\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n TextNode.prototype.geometryChange = function geometryChange() {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n };\n TextNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode$$1.prototype.content.call(this, this.srcElement.content());\n }\n PathNode$$1.prototype.optionsChange.call(this, e);\n };\n TextNode.prototype.mapStyle = function mapStyle(encode) {\n var style = PathNode$$1.prototype.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 TextNode.prototype.pos = function pos() {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n };\n TextNode.prototype.renderContent = function renderContent() {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return kendoUtil.normalizeText(content);\n };\n TextNode.prototype.renderTextAnchor = function renderTextAnchor() {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n };\n TextNode.prototype.template = function template() {\n return '' + this.renderContent() + '';\n };\n return TextNode;\n }(PathNode);\n NODE_MAP.Arc = ArcNode;\n NODE_MAP.Circle = CircleNode;\n NODE_MAP.Group = GroupNode;\n NODE_MAP.Image = ImageNode;\n NODE_MAP.MultiPath = MultiPathNode;\n NODE_MAP.Path = PathNode;\n NODE_MAP.Rect = RectNode;\n NODE_MAP.Text = TextNode;\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$3 = function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.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 extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create(BaseSurface && BaseSurface.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n var prototypeAccessors = { type: {} };\n prototypeAccessors.type.get = function () {\n return 'svg';\n };\n Surface.prototype.destroy = function destroy() {\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 BaseSurface.prototype.destroy.call(this);\n };\n Surface.prototype.translate = function translate(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 Surface.prototype.draw = function draw(element) {\n BaseSurface.prototype.draw.call(this, element);\n this._root.load([element]);\n };\n Surface.prototype.clear = function clear() {\n BaseSurface.prototype.clear.call(this);\n this._root.clear();\n };\n Surface.prototype.svg = function svg() {\n return '' + this._template();\n };\n Surface.prototype.exportVisual = function exportVisual() {\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$1().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n };\n Surface.prototype._resize = function _resize() {\n if (this._offset) {\n this.translate(this._offset);\n }\n };\n Surface.prototype._template = function _template() {\n return '' + this._root.render() + '';\n };\n Object.defineProperties(Surface.prototype, prototypeAccessors);\n return Surface;\n }(Surface$2);\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 = function (BaseNode$$1) {\n function Node(srcElement) {\n BaseNode$$1.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n }\n extendStatic(Node, BaseNode$$1);\n Node.prototype = Object.create(BaseNode$$1 && BaseNode$$1.prototype);\n Node.prototype.constructor = Node;\n Node.fn = Node.prototype;\n Node.fn.init = Node.fn.constructor;\n Node.prototype.initClip = function initClip() {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n };\n Node.prototype.clear = function clear() {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode$$1.prototype.clear.call(this);\n };\n Node.prototype.clearClip = function clearClip() {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n };\n Node.prototype.setClip = function setClip(ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n };\n Node.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode$$1.prototype.optionsChange.call(this, e);\n };\n Node.prototype.setTransform = function setTransform(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 Node.prototype.loadElements = function loadElements(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 Node.prototype.load = function load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n };\n Node.prototype.setOpacity = function setOpacity(ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n };\n Node.prototype.globalAlpha = function globalAlpha(ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n };\n Node.prototype.visible = function visible() {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n };\n return Node;\n }(BaseNode);\n var GroupNode$2 = function (superclass) {\n function GroupNode() {\n superclass.apply(this, arguments);\n }\n extendStatic(GroupNode, superclass);\n GroupNode.prototype = Object.create(superclass && superclass.prototype);\n GroupNode.prototype.constructor = GroupNode;\n GroupNode.fn = GroupNode.prototype;\n GroupNode.fn.init = GroupNode.fn.constructor;\n GroupNode.prototype.renderTo = function renderTo(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 return GroupNode;\n }(traversable(Node$2, 'childNodes'));\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = function (superclass) {\n function RootNode(canvas, size) {\n superclass.call(this);\n this.canvas = canvas;\n this.size = size;\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 extendStatic(RootNode, superclass);\n RootNode.prototype = Object.create(superclass && superclass.prototype);\n RootNode.prototype.constructor = RootNode;\n RootNode.fn = RootNode.prototype;\n RootNode.fn.init = RootNode.fn.constructor;\n RootNode.prototype.destroy = function destroy() {\n superclass.prototype.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n };\n RootNode.prototype.load = function load(elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n };\n RootNode.prototype._rescale = function _rescale(scale) {\n var ref = this;\n var canvas = ref.canvas;\n var size = ref.size;\n canvas.width = size.width * scale;\n canvas.height = size.height * scale;\n this.ctx.scale(scale, scale);\n };\n RootNode.prototype._devicePixelRatio = function _devicePixelRatio() {\n if (typeof window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n return 1;\n };\n RootNode.prototype._invalidate = function _invalidate(options) {\n if (!this.ctx) {\n return;\n }\n var fixedScale = options && options.fixedScale;\n var scale = fixedScale ? 1 : this._devicePixelRatio();\n this._rescale(scale);\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n };\n return RootNode;\n }(traversable(GroupNode$2, 'childNodes'));\n var QuadRoot = function (Class$$1) {\n function QuadRoot() {\n Class$$1.call(this);\n this.shapes = [];\n }\n extendStatic(QuadRoot, Class$$1);\n QuadRoot.prototype = Object.create(Class$$1 && Class$$1.prototype);\n QuadRoot.prototype.constructor = QuadRoot;\n QuadRoot.fn = QuadRoot.prototype;\n QuadRoot.fn.init = QuadRoot.fn.constructor;\n QuadRoot.prototype._add = function _add(shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n };\n QuadRoot.prototype.pointShapes = function pointShapes(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 QuadRoot.prototype.insert = function insert(shape, bbox) {\n this._add(shape, bbox);\n };\n QuadRoot.prototype.remove = function remove(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 return QuadRoot;\n }(Class);\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$1\n };\n var QuadNode = function (QuadRoot$$1) {\n function QuadNode(rect) {\n QuadRoot$$1.call(this);\n this.children = [];\n this.rect = rect;\n }\n extendStatic(QuadNode, QuadRoot$$1);\n QuadNode.prototype = Object.create(QuadRoot$$1 && QuadRoot$$1.prototype);\n QuadNode.prototype.constructor = QuadNode;\n QuadNode.fn = QuadNode.prototype;\n QuadNode.fn.init = QuadNode.fn.constructor;\n QuadNode.prototype.inBounds = function inBounds(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 QuadNode.prototype.pointShapes = function pointShapes(point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot$$1.prototype.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append$1$1(result, children[idx].pointShapes(point));\n }\n return result;\n };\n QuadNode.prototype.insert = function insert(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 QuadNode.prototype._initChildren = function _initChildren() {\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 return QuadNode;\n }(QuadRoot);\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = function (Class$$1) {\n function ShapesQuadTree() {\n Class$$1.call(this);\n this.initRoots();\n }\n extendStatic(ShapesQuadTree, Class$$1);\n ShapesQuadTree.prototype = Object.create(Class$$1 && Class$$1.prototype);\n ShapesQuadTree.prototype.constructor = ShapesQuadTree;\n ShapesQuadTree.fn = ShapesQuadTree.prototype;\n ShapesQuadTree.fn.init = ShapesQuadTree.fn.constructor;\n ShapesQuadTree.prototype.initRoots = function initRoots() {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n };\n ShapesQuadTree.prototype.clear = function clear() {\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 ShapesQuadTree.prototype.pointShape = function pointShape(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 ShapesQuadTree.prototype.assignZindex = function assignZindex(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 ShapesQuadTree.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n };\n ShapesQuadTree.prototype.geometryChange = function geometryChange(e) {\n this.bboxChange(e.element);\n };\n ShapesQuadTree.prototype.bboxChange = function bboxChange(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 ShapesQuadTree.prototype.add = function add(elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append$1$1(this.rootElements, elementsArray);\n this._insert(elementsArray);\n };\n ShapesQuadTree.prototype.childrenChange = function childrenChange(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 ShapesQuadTree.prototype._insert = function _insert(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$1$1(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n };\n ShapesQuadTree.prototype._insertShape = function _insertShape(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 ShapesQuadTree.prototype.remove = function remove(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 ShapesQuadTree.prototype.inRoot = function inRoot(sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n };\n ShapesQuadTree.prototype.getSectors = function getSectors(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 return ShapesQuadTree;\n }(Class);\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 = function SurfaceCursor(surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n };\n SurfaceCursor.prototype.clear = function clear() {\n this._resetCursor();\n };\n SurfaceCursor.prototype.destroy = function destroy() {\n this._resetCursor();\n delete this.element;\n };\n SurfaceCursor.prototype._mouseenter = function _mouseenter(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 SurfaceCursor.prototype._mouseleave = function _mouseleave() {\n this._resetCursor();\n };\n SurfaceCursor.prototype._shapeCursor = function _shapeCursor(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 SurfaceCursor.prototype._getCursor = function _getCursor() {\n if (this.element) {\n return this.element.style.cursor;\n }\n };\n SurfaceCursor.prototype._setCursor = function _setCursor(cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n };\n SurfaceCursor.prototype._resetCursor = function _resetCursor() {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\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 = function (Node) {\n function PathNode() {\n Node.apply(this, arguments);\n }\n extendStatic(PathNode, Node);\n PathNode.prototype = Object.create(Node && Node.prototype);\n PathNode.prototype.constructor = PathNode;\n PathNode.fn = PathNode.prototype;\n PathNode.fn.init = PathNode.fn.constructor;\n PathNode.prototype.renderTo = function renderTo(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 PathNode.prototype.setFill = function setFill(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 PathNode.prototype.setGradientFill = function setGradientFill(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 PathNode.prototype.setStroke = function setStroke(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 PathNode.prototype.dashType = function dashType() {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n };\n PathNode.prototype.setLineDash = function setLineDash(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 PathNode.prototype.setLineCap = function setLineCap(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 PathNode.prototype.setLineJoin = function setLineJoin(ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n };\n PathNode.prototype.renderPoints = function renderPoints(ctx, path) {\n renderPath(ctx, path);\n };\n return PathNode;\n }(Node$2);\n var ArcNode$2 = function (PathNode) {\n function ArcNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(ArcNode, PathNode);\n ArcNode.prototype = Object.create(PathNode && PathNode.prototype);\n ArcNode.prototype.constructor = ArcNode;\n ArcNode.fn = ArcNode.prototype;\n ArcNode.fn.init = ArcNode.fn.constructor;\n ArcNode.prototype.renderPoints = function renderPoints(ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n };\n return ArcNode;\n }(PathNode$2);\n var CircleNode$2 = function (PathNode) {\n function CircleNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(CircleNode, PathNode);\n CircleNode.prototype = Object.create(PathNode && PathNode.prototype);\n CircleNode.prototype.constructor = CircleNode;\n CircleNode.fn = CircleNode.prototype;\n CircleNode.fn.init = CircleNode.fn.constructor;\n CircleNode.prototype.renderPoints = function renderPoints(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 return CircleNode;\n }(PathNode$2);\n var ImageNode$2 = function (PathNode) {\n function ImageNode(srcElement, cors) {\n PathNode.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 extendStatic(ImageNode, PathNode);\n ImageNode.prototype = Object.create(PathNode && PathNode.prototype);\n ImageNode.prototype.constructor = ImageNode;\n ImageNode.fn = ImageNode.prototype;\n ImageNode.fn.init = ImageNode.fn.constructor;\n ImageNode.prototype.renderTo = function renderTo(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 ImageNode.prototype.optionsChange = function optionsChange(e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode.prototype.optionsChange.call(this, e);\n }\n };\n ImageNode.prototype.onLoad = function onLoad() {\n this.loading.resolve();\n this.invalidate();\n };\n ImageNode.prototype.onError = function onError() {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n };\n ImageNode.prototype.drawImage = function drawImage(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 return ImageNode;\n }(PathNode$2);\n var MultiPathNode$2 = function (PathNode) {\n function MultiPathNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(MultiPathNode, PathNode);\n MultiPathNode.prototype = Object.create(PathNode && PathNode.prototype);\n MultiPathNode.prototype.constructor = MultiPathNode;\n MultiPathNode.fn = MultiPathNode.prototype;\n MultiPathNode.fn.init = MultiPathNode.fn.constructor;\n MultiPathNode.prototype.renderPoints = function renderPoints(ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n };\n return MultiPathNode;\n }(PathNode$2);\n var RectNode$2 = function (PathNode) {\n function RectNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(RectNode, PathNode);\n RectNode.prototype = Object.create(PathNode && PathNode.prototype);\n RectNode.prototype.constructor = RectNode;\n RectNode.fn = RectNode.prototype;\n RectNode.fn.init = RectNode.fn.constructor;\n RectNode.prototype.renderPoints = function renderPoints(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 return RectNode;\n }(PathNode$2);\n var TextNode$2 = function (PathNode) {\n function TextNode() {\n PathNode.apply(this, arguments);\n }\n extendStatic(TextNode, PathNode);\n TextNode.prototype = Object.create(PathNode && PathNode.prototype);\n TextNode.prototype.constructor = TextNode;\n TextNode.fn = TextNode.prototype;\n TextNode.fn.init = TextNode.fn.constructor;\n TextNode.prototype.renderTo = function renderTo(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 return TextNode;\n }(PathNode$2);\n NODE_MAP$2.Arc = ArcNode$2;\n NODE_MAP$2.Circle = CircleNode$2;\n NODE_MAP$2.Group = GroupNode$2;\n NODE_MAP$2.Image = ImageNode$2;\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n NODE_MAP$2.Path = PathNode$2;\n NODE_MAP$2.Rect = RectNode$2;\n NODE_MAP$2.Text = TextNode$2;\n var Surface$4 = function (BaseSurface) {\n function Surface(element, options) {\n BaseSurface.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, size);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n }\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create(BaseSurface && BaseSurface.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n var prototypeAccessors = { type: {} };\n prototypeAccessors.type.get = function () {\n return 'canvas';\n };\n Surface.prototype.destroy = function destroy() {\n BaseSurface.prototype.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 Surface.prototype.draw = function draw(element) {\n BaseSurface.prototype.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 Surface.prototype.clear = function clear() {\n BaseSurface.prototype.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 Surface.prototype.eventTarget = function eventTarget(e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n };\n Surface.prototype.image = function image() {\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({ fixedScale: true });\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 Surface.prototype.suspendTracking = function suspendTracking() {\n BaseSurface.prototype.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n };\n Surface.prototype.resumeTracking = function resumeTracking() {\n BaseSurface.prototype.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 Surface.prototype._resize = function _resize() {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.size = this._size;\n this._root.invalidate();\n };\n Surface.prototype._template = function _template() {\n return '';\n };\n Surface.prototype._enableTracking = function _enableTracking() {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n BaseSurface.prototype._enableTracking.call(this);\n };\n Surface.prototype._trackMouse = function _trackMouse(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 Object.defineProperties(Surface.prototype, prototypeAccessors);\n return Surface;\n }(Surface$2);\n var instance$2;\n var support$1;\n var hasDocument = function () {\n return typeof document !== 'undefined';\n };\n var supportsCanvas = function () {\n return hasDocument() && document.createElement('canvas').getContext;\n };\n var supportsSVG = function () {\n return hasDocument() && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');\n };\n var SurfaceFactory = function (Class$$1) {\n function SurfaceFactory() {\n Class$$1.call(this);\n this._items = [\n {\n name: 'svg',\n type: Surface$3\n },\n {\n name: 'canvas',\n type: Surface$4\n }\n ];\n }\n extendStatic(SurfaceFactory, Class$$1);\n SurfaceFactory.prototype = Object.create(Class$$1 && Class$$1.prototype);\n SurfaceFactory.prototype.constructor = SurfaceFactory;\n SurfaceFactory.fn = SurfaceFactory.prototype;\n SurfaceFactory.fn.init = SurfaceFactory.fn.constructor;\n var staticAccessors = {\n support: {},\n current: {}\n };\n staticAccessors.support.get = function () {\n if (!support$1) {\n support$1 = {\n canvas: supportsCanvas(),\n svg: supportsSVG()\n };\n }\n return support$1;\n };\n staticAccessors.current.get = function () {\n if (!instance$2) {\n instance$2 = new SurfaceFactory();\n }\n return instance$2;\n };\n SurfaceFactory.prototype.create = function create(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 Object.defineProperties(SurfaceFactory, staticAccessors);\n return SurfaceFactory;\n }(Class);\n var Surface = function (BaseSurface) {\n function Surface() {\n BaseSurface.apply(this, arguments);\n }\n extendStatic(Surface, BaseSurface);\n Surface.prototype = Object.create(BaseSurface && BaseSurface.prototype);\n Surface.prototype.constructor = Surface;\n Surface.fn = Surface.prototype;\n Surface.fn.init = Surface.fn.constructor;\n var staticAccessors = { support: {} };\n staticAccessors.support.get = function () {\n return SurfaceFactory.support;\n };\n Surface.create = function create(element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Object.defineProperties(Surface, staticAccessors);\n return Surface;\n }(Surface$2);\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$1().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$1 = {\n Surface: Surface$3,\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 canvas = {\n Surface: Surface$4,\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$1().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$4(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$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 inBrowser = typeof window !== 'undefined';\n var microsoft = inBrowser ? browser.msie || browser.edge : false;\n var TextRect = function (Text$$1) {\n function TextRect(str, rect, options) {\n Text$$1.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n }\n extendStatic(TextRect, Text$$1);\n TextRect.prototype = Object.create(Text$$1 && Text$$1.prototype);\n TextRect.prototype.constructor = TextRect;\n TextRect.fn = TextRect.prototype;\n TextRect.fn.init = TextRect.fn.constructor;\n TextRect.prototype.rect = function rect() {\n return this._pdfRect;\n };\n TextRect.prototype.rawBBox = function rawBBox() {\n return this._pdfRect;\n };\n return TextRect;\n }(Text);\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 if (!/^textarea$/i.test(el.tagName)) {\n clone.value = el.value;\n }\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$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$1(clone.querySelectorAll('input, select, textarea, option')).forEach(function (el, i) {\n el.removeAttribute('id');\n el.removeAttribute('name');\n if (!/^textarea$/i.test(el.tagName)) {\n el.value = orig[i].value;\n }\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$1(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) {\n if (template != null) {\n if (typeof template == 'string') {\n template = kendo.template(template.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template == 'function') {\n return function (data) {\n var el = template(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.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template = 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$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1$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) {\n pages.forEach(function (page, i) {\n var el = template({\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 if (keepTogether(element)) {\n return;\n }\n var style = getComputedStyle$1(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$1(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 function drawText(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$1(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)|0)/;\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 == '0') {\n angle = '0deg';\n }\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$1(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1$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$1(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$1(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$1(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$1(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$1(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$1(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 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 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$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 if (microsoft && textOverflow == 'ellipsis') {\n element.style.textOverflow = saveTextOverflow;\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$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$1(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$1(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$1().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$1(a);\n var sb = getComputedStyle$1(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$1(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$1(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$1(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$1(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$1(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 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 (hasDecoration) {\n range.selectNode(node);\n slice$1$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 }, done = false;\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 done = true;\n }\n if (!done) {\n return range.getBoundingClientRect();\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$1(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$1(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$1,\n canvas: canvas,\n util: util,\n HasObservers: HasObservers,\n PathParser: PathParser,\n parsePath: parsePath,\n BaseNode: BaseNode,\n OptionsStore: OptionsStore,\n Surface: Surface,\n SurfaceFactory: SurfaceFactory,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\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 drawText: drawText,\n getFontFaces: getFontFaces\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 this.element.on('mouseleave' + NS, proxy(this._tooltipLeave, 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 this.element.off('mouseleave' + 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).appendTo(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 _tooltipLeave: function () {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\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 = drawing.drawText;\n drawing.drawDOM.getFontFaces = drawing.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 ARC = 'arc';\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var BLACK = '#000';\n var BOTTOM = 'bottom';\n var CENTER = 'center';\n var CIRCLE = 'circle';\n var COORD_PRECISION = 3;\n var CROSS = 'cross';\n var DATE = 'date';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_HEIGHT = 400;\n var DEFAULT_PRECISION = 10;\n var DEFAULT_WIDTH = 600;\n var END = 'end';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HEIGHT = 'height';\n var HIGHLIGHT_ZINDEX = 100;\n var INSIDE = 'inside';\n var LEFT = 'left';\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var NONE = 'none';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var NOTE_LEAVE = 'noteLeave';\n var OBJECT = 'object';\n var OUTSIDE = 'outside';\n var RIGHT = 'right';\n var START = 'start';\n var STRING = 'string';\n var TOP = 'top';\n var TRIANGLE = 'triangle';\n var VALUE = 'value';\n var WHITE = '#fff';\n var WIDTH = 'width';\n var X = 'x';\n var Y = 'y';\n var DEFAULT_SERIES_OPACITY = 1;\n var constants = {\n ARC: ARC,\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n BLACK: BLACK,\n BOTTOM: BOTTOM,\n CENTER: CENTER,\n CIRCLE: CIRCLE,\n COORD_PRECISION: COORD_PRECISION,\n CROSS: CROSS,\n DATE: DATE,\n DEFAULT_FONT: DEFAULT_FONT,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n END: END,\n FORMAT_REGEX: FORMAT_REGEX,\n HEIGHT: HEIGHT,\n HIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX,\n INSIDE: INSIDE,\n LEFT: LEFT,\n MAX_VALUE: MAX_VALUE,\n MIN_VALUE: MIN_VALUE,\n NONE: NONE,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n NOTE_LEAVE: NOTE_LEAVE,\n OBJECT: OBJECT,\n OUTSIDE: OUTSIDE,\n RIGHT: RIGHT,\n START: START,\n STRING: STRING,\n TOP: TOP,\n TRIANGLE: TRIANGLE,\n VALUE: VALUE,\n WHITE: WHITE,\n WIDTH: WIDTH,\n X: X,\n Y: Y,\n DEFAULT_SERIES_OPACITY: DEFAULT_SERIES_OPACITY\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 firstDay: function () {\n return 0;\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.intl;\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.intl;\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 intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\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 = Boolean(context.rtl);\n },\n notify: function (name, args) {\n if (this.chart) {\n this.chart.trigger(name, args);\n }\n },\n isPannable: function (axis) {\n var pannable = ((this.chart || {}).options || {}).pannable;\n return pannable && pannable.lock !== axis;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(ChartService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\n this.format.intl = value;\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 var HashMap = function HashMap() {\n this._map = {};\n };\n HashMap.prototype.get = function get(name) {\n return this._map[this._key(name)];\n };\n HashMap.prototype.set = function set(name, value) {\n this._map[this._key(name)] = value;\n };\n HashMap.prototype._key = function _key(name) {\n return name instanceof Date ? name.getTime() : name;\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 function find(array, predicate) {\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (predicate(item, i, array)) {\n return item;\n }\n }\n }\n var Matrix = geometry.Matrix;\n var matrixRegexp = /matrix\\((.*)\\)/;\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n var members = match[1].split(',').map(function (x) {\n return parseFloat(x);\n });\n return new (Function.prototype.bind.apply(Matrix, [null].concat(members)))();\n }\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n if (transform === 'none') {\n return Matrix.unit();\n }\n return parseMatrix(transform);\n }\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n var matrix = transformMatrix(element);\n var parent = element.parentElement;\n while (parent) {\n var parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\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 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, this.initUserOptions(options));\n },\n initUserOptions: function (options) {\n return 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 && this.options.animation) {\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, opacity) {\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: opacity || 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 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 supportsPointInactiveOpacity: function () {\n return true;\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 cleanGradients: function () {\n var gradients = this.gradients;\n for (var hashCode in gradients) {\n gradients[hashCode]._observers = [];\n }\n },\n size: function () {\n var options = this.options;\n return new Box(0, 0, options.width, options.height);\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, data) {\n BoxElement.fn.init.call(this, options);\n this.content = content;\n this.data = data;\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 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.visible) {\n return;\n }\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 visualContext: function (targetBox) {\n var this$1 = this;\n var context = {\n text: this.content,\n rect: targetBox.toRect(),\n sender: this.getSender(),\n options: this.options,\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 if (this.data) {\n $.extend(context, this.data);\n }\n return context;\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 this$1 = this;\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 childAlias = function () {\n return this$1;\n };\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 this.label.aliasFor = childAlias;\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 marker.aliasFor = childAlias;\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 over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(NOTE_HOVER, args)) {\n e.preventDefault();\n }\n },\n out: function (widget, e) {\n var args = this.eventArgs(e);\n widget.trigger(NOTE_LEAVE, args);\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 this.initFields();\n if (!this.options._deferLabels) {\n this.createLabels();\n }\n this.createTitle();\n this.createNotes();\n },\n initFields: function () {\n },\n labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.labelsCount()\n };\n },\n normalizeLabelRotation: function (labelOptions) {\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\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.clearLabels();\n if (labelOptions.visible) {\n this.normalizeLabelRotation(labelOptions);\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n var range = this.labelsRange();\n for (var idx = range.min; idx < range.max; idx += step) {\n var labelContext = {\n index: idx,\n count: range.max\n };\n var label = this$1.createAxisLabel(idx, labelOptions, labelContext);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n clearLabels: function () {\n this.children = grep(this.children, function (child) {\n return !(child instanceof AxisLabel);\n });\n this.labels = [];\n },\n clearTitle: function () {\n var this$1 = this;\n if (this.title) {\n this.children = grep(this.children, function (child) {\n return child !== this$1.title;\n });\n this.title = undefined;\n }\n },\n clear: function () {\n this.clearLabels();\n this.clearTitle();\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 var labelOptions = item.label;\n var label = 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 (labelOptions) {\n labelOptions.vAlign = labelOptions.position || LEFT;\n label = this$1.createPlotBandLabel(labelOptions, item, new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2));\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 if (label) {\n group.append(label);\n }\n }\n }\n this.appendVisual(group);\n },\n createPlotBandLabel: function (label, item, box) {\n if (label.visible === false) {\n return null;\n }\n var text = label.text;\n var textbox;\n if (defined(label) && label.visible) {\n var labelTemplate = getTemplate(label);\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n item: item\n });\n } else if (label.format) {\n text = this.chartService.format.auto(label.format, text);\n }\n if (!label.color) {\n label.color = this.options.labels.color;\n }\n }\n textbox = new TextBox(text, label);\n textbox.reflow(box);\n textbox.renderVisual();\n return textbox.visual;\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 = this.labelsBetweenTicks();\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\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 firstTickPosition = tickPositions[tickIx];\n var nextTickPosition = tickPositions[tickIx + 1];\n var positionStart = void 0, positionEnd = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n positionStart = middle - labelSize / 2;\n } else {\n positionStart = firstTickPosition - labelSize / 2;\n }\n positionEnd = positionStart;\n } else {\n if (labelsBetweenTicks) {\n positionStart = firstTickPosition;\n positionEnd = nextTickPosition;\n } else {\n positionStart = firstTickPosition - labelSize / 2;\n positionEnd = positionStart + labelSize;\n }\n }\n this$1.positionLabel(label, mirror, positionStart, positionEnd);\n }\n },\n positionLabel: function (label, mirror, positionStart, positionEnd) {\n if (positionEnd === void 0) {\n positionEnd = positionStart;\n }\n var options = this.options;\n var vertical = options.vertical;\n var lineBox = this.lineBox();\n var labelOffset = this.getActualTickSize() + options.margin;\n var labelBox;\n if (vertical) {\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, positionStart);\n } else {\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(positionStart, labelY, positionEnd, labelY + label.box.height());\n }\n label.reflow(labelBox);\n },\n autoRotateLabelAngle: function (labelBox, slotWidth) {\n if (labelBox.width() < slotWidth) {\n return 0;\n }\n if (labelBox.height() > slotWidth) {\n return -90;\n }\n return -45;\n },\n autoRotateLabels: function () {\n var this$1 = this;\n if (!this.options.autoRotateLabels || this.options.vertical) {\n return false;\n }\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var limit = Math.min(labels.length, tickPositions.length - 1);\n var angle = 0;\n for (var idx = 0; idx < limit; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n angle = this$1.autoRotateLabelAngle(labelBox, width);\n if (angle === -90) {\n break;\n }\n }\n if (angle !== 0) {\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 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, options, context) {\n var this$1 = this;\n var text;\n var tmpl = getTemplate(options);\n var defaultText = function () {\n if (!options.format) {\n return value;\n }\n return this$1.chartService.format.localeAuto(options.format, [value], options.culture);\n };\n if (tmpl) {\n var templateContext = $.extend({}, context, {\n get text() {\n return defaultText();\n },\n value: value,\n format: options.format,\n culture: options.culture\n });\n text = tmpl(templateContext);\n } else {\n text = defaultText();\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 var axis = this.options.vertical ? Y : X;\n if (this.chartService.isPannable(axis)) {\n var offset = this.maxLabelOffset();\n box[axis + 1] -= offset.start;\n box[axis + 2] += offset.end;\n } else {\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 }\n return box;\n },\n maxLabelOffset: function () {\n var this$1 = this;\n var ref = this.options;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var labelsBetweenTicks = this.labelsBetweenTicks();\n var tickPositions = this.getLabelsTickPositions();\n var offsetField = vertical ? Y : X;\n var labels = this.labels;\n var startPosition = reverse ? 1 : 0;\n var endPosition = reverse ? 0 : 1;\n var maxStartOffset = 0;\n var maxEndOffset = 0;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var startTick = void 0, endTick = void 0;\n if (labelsBetweenTicks) {\n startTick = tickPositions[tickIx + startPosition];\n endTick = tickPositions[tickIx + endPosition];\n } else {\n startTick = endTick = tickPositions[tickIx];\n }\n maxStartOffset = Math.max(maxStartOffset, startTick - label.box[offsetField + 1]);\n maxEndOffset = Math.max(maxEndOffset, label.box[offsetField + 2] - endTick);\n }\n return {\n start: maxStartOffset,\n end: maxEndOffset\n };\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 && offset < 0) {\n minValue = limitValue(from, min, max);\n maxValue = limitValue(from + rangeSize, min + rangeSize, max);\n } else if (to > max && offset > 0) {\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 labelsBetweenTicks: function () {\n return !this.options.justified;\n },\n prepareUserOptions: function () {\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 function firstDay(options, intlService) {\n if (isNumber(options.weekStartDay)) {\n return options.weekStartDay;\n }\n if (intlService && intlService.firstDay) {\n return intlService.firstDay();\n }\n return 0;\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 initFields: function () {\n this._ticks = {};\n },\n categoriesHash: function () {\n return '';\n },\n clone: function () {\n var copy = new CategoryAxis($.extend({}, this.options, { categories: this.options.srcCategories }), this.chartService);\n copy.createLabels();\n return copy;\n },\n initUserOptions: function (options) {\n var categories = options.categories || [];\n var definedMin = defined(options.min);\n var definedMax = defined(options.max);\n options.srcCategories = options.categories = categories;\n if ((definedMin || definedMax) && categories.length) {\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 return options;\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 = this.totalRange().max || 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 var min = isNumber(options.min) ? options.min : 0;\n var max = isNumber(options.max) ? options.max : this.totalRange().max;\n return {\n min: min,\n max: max\n };\n },\n roundedRange: function () {\n return this.range();\n },\n totalRange: function () {\n var options = this.options;\n return {\n min: 0,\n max: Math.max(this._seriesMax || 0, options.srcCategories.length) - (options.justified ? 1 : 0)\n };\n },\n scaleOptions: 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 {\n scale: scale * (this.options.reverse ? -1 : 1),\n box: lineBox,\n min: min,\n max: max\n };\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 > 0) {\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 getLabelsTickPositions: function () {\n return this.getTicks().labelTicks;\n },\n tickIndices: function (stepSize) {\n var ref = this.rangeIndices();\n var min = ref.min;\n var max = ref.max;\n var limit = Math.ceil(max);\n var current = Math.floor(min);\n var indices = [];\n while (current <= limit) {\n indices.push(current);\n current += stepSize;\n }\n return indices;\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.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var pos = box[(vertical ? Y : X) + (reverse ? 2 : 1)];\n var indices = this.tickIndices(stepSize);\n var positions = [];\n for (var idx = 0; idx < indices.length; idx++) {\n positions.push(pos + round(scale * (indices[idx] - min), COORD_PRECISION));\n }\n return positions;\n },\n getTicks: function () {\n var options = this.options;\n var cache = this._ticks;\n var range = this.rangeIndices();\n var lineBox = this.lineBox();\n var hash = lineBox.getHash() + range.min + ',' + range.max + options.reverse + options.justified;\n if (cache._hash !== hash) {\n var hasMinor = options.minorTicks.visible || options.minorGridLines.visible;\n cache._hash = hash;\n cache.labelTicks = this.getTickPositions(1);\n cache.majorTicks = this.filterOutOfRangePositions(cache.labelTicks, lineBox);\n cache.minorTicks = hasMinor ? this.filterOutOfRangePositions(this.getTickPositions(0.5), lineBox) : [];\n }\n return cache;\n },\n filterOutOfRangePositions: function (positions, lineBox) {\n if (!positions.length) {\n return positions;\n }\n var axis = this.options.vertical ? Y : X;\n var inRange = function (position) {\n return lineBox[axis + 1] <= position && position <= lineBox[axis + 2];\n };\n var end = positions.length - 1;\n var startIndex = 0;\n while (!inRange(positions[startIndex]) && startIndex <= end) {\n startIndex++;\n }\n var endIndex = end;\n while (!inRange(positions[endIndex]) && endIndex >= 0) {\n endIndex--;\n }\n return positions.slice(startIndex, endIndex + 1);\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.scaleOptions();\n var scale = ref.scale;\n var box = ref.box;\n var min = ref.min;\n var valueAxis = vertical ? Y : X;\n var lineStart = box[valueAxis + (reverse ? 2 : 1)];\n var slotBox = box.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, box[valueAxis + 1], box[valueAxis + 2]);\n p2 = limitValue(p2, box[valueAxis + 1], box[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 min = Math.floor(this.options.min || 0);\n var start = from;\n var end = to;\n if (typeof start === 'string') {\n start = this.categoryIndex(start);\n } else if (isNumber(start)) {\n start -= min;\n }\n if (typeof end === 'string') {\n end = this.categoryIndex(end);\n } else if (isNumber(end)) {\n end -= min;\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 ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var min = ref$1.min;\n var max = ref$1.max;\n var startValue = reverse ? max : min;\n var lineStart = box[valueAxis + 1];\n var lineEnd = box[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 return this.totalIndex(value) - Math.floor(this.options.min || 0);\n },\n categoryAt: function (index, total) {\n var options = this.options;\n return (total ? options.srcCategories : options.categories)[index];\n },\n categoriesCount: function () {\n return (this.options.categories || []).length;\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, labelContext) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n labelContext.dataItem = dataItem;\n var text = this.axisLabelText(category, labelOptions, labelContext);\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 ref = this.scaleOptions();\n var scale = ref.scale;\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 range = this.totalRangeIndices(true);\n var ref$1 = this.scaleOptions();\n var scale = ref$1.scale;\n var box = ref$1.box;\n var lineStart = box[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 totalIndex: function (value) {\n var options = this.options;\n var index = this._categoriesMap ? this._categoriesMap.get(value) : indexOf(value, options.srcCategories);\n return index;\n },\n currentRangeIndices: function () {\n var options = this.options;\n var min = 0;\n if (isNumber(options.min)) {\n min = Math.floor(options.min);\n }\n var max;\n if (isNumber(options.max)) {\n max = options.justified ? Math.floor(options.max) : Math.ceil(options.max) - 1;\n } else {\n max = this.totalCount() - 1;\n }\n return {\n min: min,\n max: max\n };\n },\n mapCategories: function () {\n if (!this._categoriesMap) {\n var map$$1 = this._categoriesMap = new HashMap();\n var srcCategories = this.options.srcCategories;\n for (var idx = 0; idx < srcCategories.length; idx++) {\n map$$1.set(srcCategories[idx], idx);\n }\n }\n },\n totalCount: function () {\n return Math.max(this.options.srcCategories.length, this._seriesMax || 0);\n }\n });\n setDefaultOptions(CategoryAxis, {\n type: 'category',\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 function categoryRange(categories) {\n var range = categories._range;\n if (!range) {\n range = categories._range = sparseArrayLimits(categories);\n range.min = toDate(range.min);\n range.max = toDate(range.max);\n }\n return range;\n }\n var EmptyDateRange = Class.extend({\n init: function (options) {\n this.options = options;\n },\n displayIndices: function () {\n return {\n min: 0,\n max: 1\n };\n },\n displayRange: function () {\n return {};\n },\n total: function () {\n return {};\n },\n valueRange: function () {\n return {};\n },\n valueIndex: function () {\n return -1;\n },\n values: function () {\n return [];\n },\n totalIndex: function () {\n return -1;\n },\n valuesCount: function () {\n return 0;\n },\n totalCount: function () {\n return 0;\n },\n dateAt: function () {\n return null;\n }\n });\n var DateRange = Class.extend({\n init: function (start, end, options) {\n this.options = options;\n options.baseUnitStep = options.baseUnitStep || 1;\n var roundToBaseUnit = options.roundToBaseUnit;\n var justified = options.justified;\n this.start = addDuration(start, 0, options.baseUnit, options.weekStartDay);\n var lowerEnd = this.roundToTotalStep(end);\n var expandEnd = !justified && dateEquals(end, lowerEnd) && !options.justifyEnd;\n this.end = this.roundToTotalStep(end, !justified, expandEnd ? 1 : 0);\n var min = options.min || start;\n this.valueStart = this.roundToTotalStep(min);\n this.displayStart = roundToBaseUnit ? this.valueStart : min;\n var max = options.max;\n if (!max) {\n this.valueEnd = lowerEnd;\n this.displayEnd = roundToBaseUnit || expandEnd ? this.end : end;\n } else {\n var next = !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0;\n this.valueEnd = this.roundToTotalStep(max, false, next);\n this.displayEnd = roundToBaseUnit ? this.roundToTotalStep(max, !justified) : options.max;\n }\n if (this.valueEnd < this.valueStart) {\n this.valueEnd = this.valueStart;\n }\n if (this.displayEnd <= this.displayStart) {\n this.displayEnd = this.roundToTotalStep(this.displayStart, false, 1);\n }\n },\n displayRange: function () {\n return {\n min: this.displayStart,\n max: this.displayEnd\n };\n },\n displayIndices: function () {\n if (!this._indices) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var baseUnitStep = options.baseUnitStep;\n var minIdx = dateIndex(this.displayStart, this.valueStart, baseUnit, baseUnitStep);\n var maxIdx = dateIndex(this.displayEnd, this.valueStart, baseUnit, baseUnitStep);\n this._indices = {\n min: minIdx,\n max: maxIdx\n };\n }\n return this._indices;\n },\n total: function () {\n return {\n min: this.start,\n max: this.end\n };\n },\n totalCount: function () {\n var last$$1 = this.totalIndex(this.end);\n return last$$1 + (this.options.justified ? 1 : 0);\n },\n valueRange: function () {\n return {\n min: this.valueStart,\n max: this.valueEnd\n };\n },\n valueIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep));\n },\n totalIndex: function (value) {\n var options = this.options;\n return Math.floor(dateIndex(value, this.start, options.baseUnit, options.baseUnitStep));\n },\n dateIndex: function (value) {\n var options = this.options;\n return dateIndex(value, this.valueStart, options.baseUnit, options.baseUnitStep);\n },\n valuesCount: function () {\n var maxIdx = this.valueIndex(this.valueEnd);\n return maxIdx + 1;\n },\n values: function () {\n var values = this._values;\n if (!values) {\n var options = this.options;\n var range = this.valueRange();\n this._values = values = [];\n for (var date = range.min; date <= range.max;) {\n values.push(date);\n date = addDuration(date, options.baseUnitStep, options.baseUnit, options.weekStartDay);\n }\n }\n return values;\n },\n dateAt: function (index, total) {\n var options = this.options;\n return addDuration(total ? this.start : this.valueStart, options.baseUnitStep * index, options.baseUnit, options.weekStartDay);\n },\n roundToTotalStep: function (value, upper, next) {\n var ref = this.options;\n var baseUnit = ref.baseUnit;\n var baseUnitStep = ref.baseUnitStep;\n var weekStartDay = ref.weekStartDay;\n var start = this.start;\n var step = dateIndex(value, start, baseUnit, baseUnitStep);\n var roundedStep = upper ? Math.ceil(step) : Math.floor(step);\n if (next) {\n roundedStep += next;\n }\n return addDuration(start, roundedStep * baseUnitStep, baseUnit, weekStartDay);\n }\n });\n function autoBaseUnit(options, startUnit, startStep) {\n var categoryLimits = categoryRange(options.categories);\n var span = (options.max || categoryLimits.max) - (options.min || categoryLimits.min);\n var autoBaseUnitSteps = options.autoBaseUnitSteps;\n var maxDateGroups = options.maxDateGroups;\n var autoUnit = options.baseUnit === FIT;\n var autoUnitIx = startUnit ? BASE_UNITS.indexOf(startUnit) : 0;\n var baseUnit = autoUnit ? BASE_UNITS[autoUnitIx++] : options.baseUnit;\n var units = span / TIME_PER_UNIT[baseUnit];\n var totalUnits = units;\n var unitSteps, step, nextStep;\n while (!step || units >= maxDateGroups) {\n unitSteps = unitSteps || autoBaseUnitSteps[baseUnit].slice(0);\n do {\n nextStep = unitSteps.shift();\n } while (nextStep && startUnit === baseUnit && nextStep < startStep);\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 function defaultBaseUnit(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 options.baseUnit = unit || DAYS;\n }\n function initUnit(options) {\n var baseUnit = (options.baseUnit || '').toLowerCase();\n var useDefault = baseUnit !== FIT && !inArray(baseUnit, BASE_UNITS);\n if (useDefault) {\n defaultBaseUnit(options);\n }\n if (baseUnit === FIT || options.baseUnitStep === AUTO) {\n autoBaseUnit(options);\n }\n return options;\n }\n var DateCategoryAxis = CategoryAxis.extend({\n clone: function () {\n var copy = new DateCategoryAxis($.extend({}, this.options), this.chartService);\n copy.createLabels();\n return copy;\n },\n categoriesHash: function () {\n var start = this.dataRange.total().min;\n return this.options.baseUnit + this.options.baseUnitStep + start;\n },\n initUserOptions: function (options) {\n return options;\n },\n initFields: function () {\n CategoryAxis.fn.initFields.call(this);\n var chartService = this.chartService;\n var intlService = chartService.intl;\n var options = this.options;\n var categories = options.categories || [];\n if (!categories._parsed) {\n categories = parseDates(intlService, categories);\n categories._parsed = true;\n }\n options = deepExtend({ roundToBaseUnit: true }, options, {\n categories: categories,\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n weekStartDay: firstDay(options, intlService)\n });\n if (chartService.panning && chartService.isPannable(options.vertical ? Y : X)) {\n options.roundToBaseUnit = false;\n }\n options.userSetBaseUnit = options.userSetBaseUnit || options.baseUnit;\n options.userSetBaseUnitStep = options.userSetBaseUnitStep || options.baseUnitStep;\n this.options = options;\n options.srcCategories = categories;\n if (categories.length > 0) {\n var range = categoryRange(categories);\n var maxDivisions = options.maxDivisions;\n this.dataRange = new DateRange(range.min, range.max, initUnit(options));\n if (maxDivisions) {\n var dataRange = this.dataRange.displayRange();\n var divisionOptions = $.extend({}, options, {\n justified: true,\n roundToBaseUnit: false,\n baseUnit: 'fit',\n min: dataRange.min,\n max: dataRange.max,\n maxDateGroups: maxDivisions\n });\n var dataRangeOptions = this.dataRange.options;\n autoBaseUnit(divisionOptions, dataRangeOptions.baseUnit, dataRangeOptions.baseUnitStep);\n this.divisionRange = new DateRange(range.min, range.max, divisionOptions);\n } else {\n this.divisionRange = this.dataRange;\n }\n } else {\n options.baseUnit = options.baseUnit || DAYS;\n this.dataRange = this.divisionRange = new EmptyDateRange(options);\n }\n this.rangeLabels = [];\n },\n tickIndices: function (stepSize) {\n var ref = this;\n var dataRange = ref.dataRange;\n var divisionRange = ref.divisionRange;\n var valuesCount = divisionRange.valuesCount();\n if (!this.options.maxDivisions || !valuesCount) {\n return CategoryAxis.fn.tickIndices.call(this, stepSize);\n }\n var indices = [];\n var values = divisionRange.values();\n var offset = 0;\n if (!this.options.justified) {\n values = values.concat(divisionRange.dateAt(valuesCount));\n offset = 0.5;\n }\n for (var idx = 0; idx < values.length; idx++) {\n indices.push(dataRange.dateIndex(values[idx]) + offset);\n if (stepSize !== 1 && idx >= 1) {\n var last$$1 = indices.length - 1;\n indices.splice(idx, 0, indices[last$$1 - 1] + (indices[last$$1] - indices[last$$1 - 1]) * stepSize);\n }\n }\n return indices;\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 labelsRange: function () {\n return {\n min: this.options.labels.skip,\n max: this.divisionRange.valuesCount()\n };\n },\n pan: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var ref = this.dataRange.displayRange();\n var min = ref.min;\n var max = ref.max;\n var totalLimits = this.dataRange.total();\n var scale = size / (max - min);\n var offset = round(delta / scale, DEFAULT_PRECISION) * (options.reverse ? -1 : 1);\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 if (this.isEmpty()) {\n return null;\n }\n var pointsRange = CategoryAxis.fn.pointsRange.call(this, start, end);\n var datesRange = this.dataRange.displayRange();\n var indicesRange = this.dataRange.displayIndices();\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 || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n },\n zoomRange: function (delta) {\n if (this.isEmpty()) {\n return null;\n }\n var options = this.options;\n var fit = options.userSetBaseUnit === FIT;\n var totalLimits = this.dataRange.total();\n var ref = this.dataRange.displayRange();\n var rangeMin = ref.min;\n var rangeMax = ref.max;\n var ref$1 = this.dataRange.options;\n var weekStartDay = ref$1.weekStartDay;\n var baseUnit = ref$1.baseUnit;\n var baseUnitStep = ref$1.baseUnitStep;\n var min = addDuration(rangeMin, delta * baseUnitStep, baseUnit, weekStartDay);\n var max = addDuration(rangeMax, -delta * baseUnitStep, baseUnit, weekStartDay);\n if (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 if (min < totalLimits.min) {\n min = totalLimits.min;\n }\n if (max > totalLimits.max) {\n max = totalLimits.max;\n }\n if (min && max && dateDiff(max, min) > 0) {\n return {\n min: min,\n max: max,\n baseUnit: options.userSetBaseUnit || options.baseUnit,\n baseUnitStep: options.userSetBaseUnitStep || options.baseUnitStep\n };\n }\n },\n range: function () {\n return this.dataRange.displayRange();\n },\n createLabels: function () {\n CategoryAxis.fn.createLabels.call(this);\n this.createRangeLabels();\n },\n clearLabels: function () {\n CategoryAxis.fn.clearLabels.call(this);\n this.rangeLabels = [];\n },\n arrangeLabels: function () {\n this.arrangeRangeLabels();\n CategoryAxis.fn.arrangeLabels.call(this);\n },\n arrangeRangeLabels: function () {\n var ref = this;\n var options = ref.options;\n var rangeLabels = ref.rangeLabels;\n if (rangeLabels.length === 0) {\n return;\n }\n var lineBox = this.lineBox();\n var vertical = options.vertical;\n var mirror = options.rangeLabels.mirror || options.labels.mirror;\n var firstLabel = rangeLabels[0];\n if (firstLabel) {\n var position = vertical ? lineBox.y1 - firstLabel.box.height() / 2 : lineBox.x1;\n this.positionLabel(firstLabel, mirror, position);\n }\n var lastLabel = rangeLabels[1];\n if (lastLabel) {\n var position$1 = vertical ? lineBox.y2 - lastLabel.box.height() / 2 : lineBox.x2;\n this.positionLabel(lastLabel, mirror, position$1);\n }\n },\n autoRotateLabels: function () {\n CategoryAxis.fn.autoRotateLabels.call(this);\n this.autoRotateRangeLabels();\n },\n hideOutOfRangeLabels: function () {\n CategoryAxis.fn.hideOutOfRangeLabels.call(this);\n this.hideOverlappingLabels();\n },\n hideOverlappingLabels: function () {\n var ref = this;\n var rangeLabels = ref.rangeLabels;\n var labels = ref.labels;\n if (rangeLabels.length === 0) {\n return;\n }\n function clip(rangeLabel, label) {\n if (!label.options.visible || label.box.overlaps(rangeLabel.box)) {\n label.options.visible = false;\n return true;\n }\n return false;\n }\n var firstRangeLabel = rangeLabels[0];\n if (firstRangeLabel && firstRangeLabel.options.visible) {\n for (var i = 0; i < labels.length; i++) {\n var overlaps = clip(firstRangeLabel, labels[i]);\n if (!overlaps) {\n break;\n }\n }\n }\n var lastRangeLabel = rangeLabels[1];\n if (lastRangeLabel && lastRangeLabel.options.visible) {\n for (var i$1 = labels.length - 1; i$1 > 0; --i$1) {\n var overlaps$1 = clip(lastRangeLabel, labels[i$1]);\n if (!overlaps$1) {\n break;\n }\n }\n }\n },\n contentBox: function () {\n var box = CategoryAxis.fn.contentBox.call(this);\n var rangeLabels = this.rangeLabels;\n for (var i = 0; i < rangeLabels.length; i++) {\n var label = rangeLabels[i];\n if (label.options.visible) {\n box.wrap(label.box);\n }\n }\n return box;\n },\n createAxisLabel: function (index, labelOptions, labelContext) {\n if (labelContext === void 0) {\n labelContext = {};\n }\n var options = this.options;\n var dataItem = options.dataItems && !options.maxDivisions ? options.dataItems[index] : null;\n var date = this.divisionRange.dateAt(index);\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n labelContext.dataItem = dataItem;\n var text = this.axisLabelText(date, labelOptions, labelContext);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\n },\n createRangeLabels: function () {\n var this$1 = this;\n var ref = this.divisionRange;\n var displayStart = ref.displayStart;\n var displayEnd = ref.displayEnd;\n var options = this.options;\n var labelOptions = $.extend({}, options.labels, options.rangeLabels, {\n align: CENTER,\n zIndex: options.zIndex\n });\n if (labelOptions.visible !== true) {\n return;\n }\n this.normalizeLabelRotation(labelOptions);\n labelOptions.alignRotation = CENTER;\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateRangeLabels = true;\n }\n var unitFormat = labelOptions.dateFormats[this.divisionRange.options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var createLabel = function (index, date, text) {\n if (text) {\n var label = new AxisLabel(date, text, index, null, labelOptions);\n this$1.append(label);\n this$1.rangeLabels.push(label);\n }\n };\n var startText = this.axisLabelText(displayStart, labelOptions, {\n index: 0,\n count: 2\n });\n createLabel(0, displayStart, startText);\n var endText = this.axisLabelText(displayEnd, labelOptions, {\n index: 1,\n count: 2\n });\n createLabel(1, displayEnd, endText);\n },\n autoRotateRangeLabels: function () {\n var this$1 = this;\n var labels = this.rangeLabels;\n if (!this.options.autoRotateRangeLabels || this.options.vertical || labels.length !== 2) {\n return;\n }\n var rotateLabel = function (label, tickPositions, index) {\n var width = Math.abs(tickPositions[index + 1] - tickPositions[index]) * 2;\n var angle = this$1.autoRotateLabelAngle(label.box, width);\n if (angle !== 0) {\n label.options.rotation = angle;\n label.reflow(new Box());\n }\n };\n var tickPositions = this.getMajorTickPositions();\n rotateLabel(labels[0], tickPositions, 0);\n rotateLabel(labels[1], tickPositions, tickPositions.length - 2);\n },\n categoryIndex: function (value) {\n return this.dataRange.valueIndex(value);\n },\n slot: function (from, to, limit) {\n var dateRange = this.dataRange;\n var start = from;\n var end = to;\n if (start instanceof Date) {\n start = dateRange.dateIndex(start);\n }\n if (end instanceof Date) {\n end = dateRange.dateIndex(end);\n }\n var slot = this.getSlot(start, end, limit);\n if (slot) {\n return slot.toRect();\n }\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 = categoryRange(options.srcCategories);\n return {\n min: toDate(range.min),\n max: toDate(range.max)\n };\n },\n categoryAt: function (index, total) {\n return this.dataRange.dateAt(index, total);\n },\n categoriesCount: function () {\n return this.dataRange.valuesCount();\n },\n rangeIndices: function () {\n return this.dataRange.displayIndices();\n },\n labelsBetweenTicks: function () {\n return !this.divisionRange.options.justified;\n },\n prepareUserOptions: function () {\n if (this.isEmpty()) {\n return;\n }\n this.options.categories = this.dataRange.values();\n },\n getCategory: function (point) {\n var index = this.pointCategoryIndex(point);\n if (index === null) {\n return null;\n }\n return this.dataRange.dateAt(index);\n },\n totalIndex: function (value) {\n return this.dataRange.totalIndex(value);\n },\n currentRangeIndices: function () {\n var range = this.dataRange.valueRange();\n return {\n min: this.dataRange.totalIndex(range.min),\n max: this.dataRange.totalIndex(range.max)\n };\n },\n totalRange: function () {\n return this.dataRange.total();\n },\n totalCount: function () {\n return this.dataRange.totalCount();\n },\n isEmpty: function () {\n return !this.options.srcCategories.length;\n },\n roundedRange: function () {\n if (this.options.roundToBaseUnit !== false || this.isEmpty()) {\n return this.range();\n }\n var options = this.options;\n var datesRange = categoryRange(options.srcCategories);\n var dateRange = new DateRange(datesRange.min, datesRange.max, $.extend({}, options, {\n justified: false,\n roundToBaseUnit: true,\n justifyEnd: options.justified\n }));\n return dateRange.displayRange();\n }\n });\n setDefaultOptions(DateCategoryAxis, {\n type: DATE,\n labels: { dateFormats: DateLabelFormats },\n rangeLabels: { visible: false },\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 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 Axis.fn.init.call(this, $.extend({}, options, {\n seriesMin: seriesMin,\n seriesMax: seriesMax\n }), chartService);\n },\n initUserOptions: function (options) {\n var autoOptions = autoAxisOptions(options.seriesMin, options.seriesMax, options);\n this.totalOptions = totalAxisOptions(autoOptions, options);\n return axisOptions(autoOptions, options);\n },\n initFields: function () {\n this.totalMin = this.totalOptions.min;\n this.totalMax = this.totalOptions.max;\n this.totalMajorUnit = this.totalOptions.majorUnit;\n this.seriesMin = this.options.seriesMin;\n this.seriesMax = this.options.seriesMax;\n },\n clone: function () {\n return new NumericAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\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 offset: 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, labelContext) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, labelOptions, labelContext);\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, range.offset);\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 clearNullValues(options, fields) {\n for (var idx = 0; idx < fields.length; idx++) {\n var field = fields[idx];\n if (options[field] === null) {\n options[field] = undefined;\n }\n }\n }\n function axisOptions(autoOptions, userOptions) {\n var options = userOptions;\n var userSetMin, userSetMax;\n if (userOptions) {\n clearNullValues(userOptions, [\n 'min',\n 'max'\n ]);\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 weekStartDay: firstDay(options, intlService)\n });\n options = applyDefaults(min, max, options);\n Axis.fn.init.call(this, options, chartService);\n this.intlService = intlService;\n this.seriesMin = min;\n this.seriesMax = max;\n var weekStartDay = options.weekStartDay || 0;\n this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit, weekStartDay));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit, weekStartDay));\n },\n clone: function () {\n return new DateValueAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\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 weekStartDay = options.weekStartDay || 0;\n var positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit, weekStartDay);\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, parseDate(this.intlService, a), parseDate(this.intlService, 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, labelContext) {\n var options = this.options;\n var offset = index * options.majorUnit;\n var weekStartDay = options.weekStartDay || 0;\n var date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit, weekStartDay);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, labelOptions, labelContext);\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 || 0;\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) * (options.reverse ? -1 : 1);\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 offset: offset\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, range.offset);\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 weekStartDay = options.weekStartDay || 0;\n var autoMin = floorDate(toTime(min) - 1, baseUnit, weekStartDay) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit, weekStartDay);\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, weekStartDay);\n options.max = options.max || addDuration(autoMax, tail, baseUnit, weekStartDay);\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 clone: function () {\n return new LogarithmicAxis(this.seriesMin, this.seriesMax, $.extend({}, this.options), this.chartService);\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 offset: 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, labelContext) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, labelOptions, labelContext);\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, range.offset);\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 HashMap: HashMap,\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 find: find,\n elementScale: elementScale,\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 firstDay: firstDay\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.SASS_THEMES = [\n 'sass',\n 'default-v2',\n 'bootstrap-v4',\n 'material-v2'\n ];\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 firstDay: function () {\n return kendo.culture().calendars.standard.firstDay;\n }\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 (function ($) {\n var cache;\n var SERIES_COLORS = 30;\n function seriesTemplate() {\n var template = '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ';\n for (var i = 0; i < SERIES_COLORS; i++) {\n template += '
    ';\n }\n return template;\n }\n function autoTheme(force) {\n if (!force && cache) {\n return cache;\n }\n var theme = { chart: kendo.dataviz.chartBaseTheme() };\n var hook = $('
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + seriesTemplate() + '
    ' + '
    ' + '
    ' + '
    ').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 setInactiveOpacity(seriesTypes, selector) {\n var inactiveOpacity = parseFloat(queryStyle(selector, 'opacity'));\n if (!isNaN(inactiveOpacity) && inactiveOpacity < 1) {\n seriesTypes.forEach(function (type) {\n set('chart.seriesDefaults.' + type + '.highlight.inactiveOpacity', inactiveOpacity);\n });\n }\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 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 mapColor('gauge.pointer.color', 'gauge-pointer');\n mapColor('gauge.scale.labels.color', 'normal-text-color');\n mapColor('gauge.scale.minorTicks.color', 'normal-text-color');\n mapColor('gauge.scale.majorTicks.color', 'normal-text-color');\n mapColor('gauge.scale.line.color', 'normal-text-color');\n mapColor('gauge.scale.rangePlaceholderColor', 'gauge-track');\n var opacity = parseFloat(queryStyle('chart-area-opacity', 'opacity'));\n if (!isNaN(opacity)) {\n set('chart.seriesDefaults.area.opacity', opacity);\n set('chart.seriesDefaults.radarArea.opacity', opacity);\n set('chart.seriesDefaults.verticalArea.opacity', opacity);\n set('chart.seriesDefaults.labels.opacity', opacity);\n }\n setInactiveOpacity([\n 'area',\n 'verticalArea'\n ], 'chart-area-inactive-opacity');\n setInactiveOpacity([\n 'line',\n 'verticalLine'\n ], 'chart-line-inactive-opacity');\n }());\n (function setFonts() {\n function font(varName) {\n return queryStyle(varName, 'fontWeight') + ' ' + queryStyle(varName, 'fontSize') + ' ' + queryStyle(varName, 'fontFamily');\n }\n var defaultFont = font('chart-font');\n var titleFont = font('chart-title-font');\n var paneTitleFont = font('chart-pane-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 set('chart.paneDefaults.title.font', paneTitleFont);\n }());\n (function setSeriesColors() {\n function letterPos(letter) {\n return letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);\n }\n function seriesPos(name) {\n var alpha = name.match(/series-([a-z])$/);\n if (alpha !== null) {\n return letterPos(alpha[1]);\n }\n var num = name.split('--series-')[1];\n return parseInt(num, 10) - 1;\n }\n var series = $('.k-var--series div').toArray();\n var unsetColor = $('.k-var--series-unset').css('backgroundColor');\n var seriesColors = series.reduce(function (arr, el) {\n var pos = seriesPos(el.className);\n var color = $(el).css('backgroundColor');\n if (color !== unsetColor) {\n arr[pos] = color;\n }\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 }(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/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 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 registerTheme('default-v2', {\n chart: {},\n gauge: {},\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 limitValue = dataviz.limitValue;\n var grep = dataviz.grep;\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 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 function findAxisByName(name, axes) {\n for (var idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n axes[idx].prepareUserOptions();\n return new ChartAxis(axes[idx]);\n }\n }\n }\n var ChartPane = kendo.Class.extend({\n init: function (pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this._pane = pane;\n },\n findAxisByName: function (name) {\n return findAxisByName(name, this._pane.axes);\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 if (srcFieldName !== null) {\n value[fieldName] = getField(srcFieldName, object);\n }\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] !== null ? series[sourceFieldName] || fieldName : null);\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 LEGEND_ITEM_LEAVE = 'legendItemLeave';\n var SERIES_CLICK = 'seriesClick';\n var SERIES_HOVER = 'seriesHover';\n var SERIES_OVER = 'seriesOver';\n var SERIES_LEAVE = 'seriesLeave';\n var PLOT_AREA_CLICK = 'plotAreaClick';\n var PLOT_AREA_HOVER = 'plotAreaHover';\n var PLOT_AREA_LEAVE = 'plotAreaLeave';\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 PANE_RENDER = 'paneRender';\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 LEGEND_ITEM_LEAVE: LEGEND_ITEM_LEAVE,\n SERIES_CLICK: SERIES_CLICK,\n SERIES_HOVER: SERIES_HOVER,\n SERIES_OVER: SERIES_OVER,\n SERIES_LEAVE: SERIES_LEAVE,\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 PLOT_AREA_LEAVE: PLOT_AREA_LEAVE,\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 PANE_RENDER: PANE_RENDER,\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 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 = this$1.categoryAxis.categoryAt(categoryIx);\n var pointData = this$1._bindPoint(currentSeries, seriesIx$1, categoryIx);\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n categoriesCount: count,\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 over: function (chart, e) {\n return chart.trigger(SERIES_OVER, this.eventArgs(e));\n },\n out: function (chart, e) {\n return chart.trigger(SERIES_LEAVE, 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 pointData = this.pointData();\n var labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\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), pointData);\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: this.series.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 pointData: function () {\n return {\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 }\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 this$1 = this;\n var customVisual = this.series.visual;\n if (customVisual) {\n this.visual = customVisual({\n points: this.toGeometryPoints(this.linePoints),\n series: this.series,\n sender: this.getSender(),\n createVisual: function () {\n this$1.segmentVisual();\n return this$1.visual;\n }\n });\n if (this.visual && !defined(this.visual.options.zIndex)) {\n this.visual.options.zIndex = this.series.zIndex;\n }\n } else {\n this.segmentVisual();\n }\n },\n segmentVisual: 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 segmentVisual: 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.size();\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 supportsPointInactiveOpacity: function () {\n return false;\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, pointData) {\n ChartElement.fn.init.call(this, options);\n this.textBox = new TextBox(content, this.options, pointData);\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 pointData = this.pointData();\n var labelTemplate = getTemplate(labels);\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n this.label = new BarLabel(labelText, deepExtend({ vertical: options.vertical }, labels), pointData);\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 pointData: function () {\n return {\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 }\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.options.border || {}).color) {\n return this.options.border.color;\n }\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 supportsPointInactiveOpacity: function () {\n return false;\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 this.visible = true;\n },\n hide: function () {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n this.visible = false;\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 alignPathToPixel(clipPath);\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 appendAxisAt: function (axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, 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 this.notifyRender();\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 notifyRender: function () {\n var service = this.getService();\n if (service) {\n service.notify(PANE_RENDER, {\n pane: new ChartPane(this),\n index: this.paneIndex,\n name: this.options.name\n });\n }\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 appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\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 AREA_REGEX = /area/i;\n function seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n }\n function hasValue$1(series, item) {\n var fields = SeriesBinder.current.bindPoint(series, null, item);\n var valueFields = fields.valueFields;\n for (var field in valueFields) {\n if (dataviz.convertableToNumber(valueFields[field])) {\n return true;\n }\n }\n }\n function findNext(ref) {\n var start = ref.start;\n var dir = ref.dir;\n var min = ref.min;\n var max = ref.max;\n var getter$$1 = ref.getter;\n var hasItem = ref.hasItem;\n var series = ref.series;\n var pointHasValue, outPoint;\n var idx = start;\n do {\n idx += dir;\n if (hasItem(idx)) {\n outPoint = getter$$1(idx);\n pointHasValue = hasValue$1(series, outPoint.item);\n }\n } while (min <= idx && idx <= max && !pointHasValue);\n if (pointHasValue) {\n return outPoint;\n }\n }\n function createOutOfRangePoints(series, range, count, getter$$1, hasItem) {\n var min = range.min;\n var max = range.max;\n var hasMinPoint = min > 0 && min < count;\n var hasMaxPoint = max + 1 < count;\n if (hasMinPoint || hasMaxPoint) {\n var missingValues = seriesMissingValues(series);\n var minPoint, maxPoint;\n if (missingValues !== INTERPOLATE) {\n if (hasMinPoint) {\n minPoint = getter$$1(min - 1);\n }\n if (hasMaxPoint) {\n maxPoint = getter$$1(max + 1);\n }\n } else {\n var outPoint, pointHasValue;\n if (hasMinPoint) {\n outPoint = getter$$1(min - 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n minPoint = findNext({\n start: min,\n dir: -1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n minPoint = outPoint;\n }\n }\n if (hasMaxPoint) {\n outPoint = getter$$1(max + 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n maxPoint = findNext({\n start: max,\n dir: 1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n maxPoint = outPoint;\n }\n }\n }\n if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\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 = this.options.legend || {};\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 titleOptions = this.options.title || {};\n var paneDefaults = this.options.paneDefaults;\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n var panes = [];\n var defaults = deepExtend({ title: { color: titleOptions.color } }, paneDefaults);\n for (var i = 0; i < panesLength; i++) {\n var options = deepExtend({}, defaults, paneOptions[i]);\n if (isString(options.title)) {\n options.title = deepExtend({ text: options.title }, defaults.title);\n }\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.detachLabels();\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 var root = this.getRoot();\n if (root) {\n root.cleanGradients();\n }\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.detachLabels();\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 panes = ref.panes;\n var axes = allPaneAxes(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 detachLabels: function () {\n var axes = this.groupAxes(this.panes);\n var xAxes = axes.x;\n var yAxes = axes.y;\n this.detachAxisGroupLabels(yAxes, xAxes);\n this.detachAxisGroupLabels(xAxes, yAxes);\n },\n detachAxisGroupLabels: function (axes, crossingAxes) {\n var this$1 = this;\n var labelAxisCount = 0;\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var pane = axis.pane;\n var anchor = paneAnchor(crossingAxes, pane) || crossingAxes[0];\n var axisIndex = i + labelAxisCount;\n var labelAxis = this$1.createLabelAxis(axis, axisIndex, anchor);\n if (labelAxis) {\n labelAxisCount++;\n var pos = pane.axes.indexOf(axis) + labelAxisCount;\n pane.appendAxisAt(labelAxis, pos);\n }\n }\n },\n createLabelAxis: function (axis, axisIndex, anchor) {\n var labelOptions = axis.options.labels;\n var position = labelOptions.position;\n var onAxis = position !== datavizConstants.END && position !== datavizConstants.START;\n var visible = labelOptions.visible;\n if (onAxis || visible === false) {\n return null;\n }\n var allAxes = this.groupAxes(this.panes);\n var crossingAxes = anchor.options.vertical ? allAxes.x : allAxes.y;\n var anchorCrossings = this.axisCrossingValues(anchor, crossingAxes);\n var end = position === datavizConstants.END;\n var range = anchor.range();\n var edge = end ? range.max : range.min;\n var crossingValue = limitValue(anchorCrossings[axisIndex], range.min, range.max);\n if (crossingValue - edge === 0) {\n return null;\n }\n anchorCrossings.splice(axisIndex + 1, 0, edge);\n anchor.options.axisCrossingValues = anchorCrossings;\n var labelAxis = axis.clone();\n axis.clear();\n labelAxis.options.name = undefined;\n labelAxis.options.line.visible = false;\n labelAxis.options.crosshair = undefined;\n labelAxis.options.notes = undefined;\n labelAxis.options.plotBands = undefined;\n return labelAxis;\n }\n });\n function isSingleAxis(axis) {\n return !axis.pane.axes.some(function (a) {\n return a.options.vertical === axis.options.vertical && a !== axis && a.options.visible !== false;\n });\n }\n function axisGroupBox(axes) {\n var length = axes.length;\n var box;\n for (var i = 0; i < length; i++) {\n var axis = axes[i];\n var visible = axis.options.visible !== false;\n if (visible || isSingleAxis(axis)) {\n var axisBox = visible ? axis.contentBox() : axis.lineBox();\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 var allPaneAxes = function (panes) {\n return panes.reduce(function (acc, pane) {\n return acc.concat(pane.axes);\n }, []);\n };\n setDefaultOptions(PlotAreaBase, {\n series: [],\n plotArea: { margin: {} },\n background: '',\n border: {\n color: BLACK,\n width: 0\n },\n paneDefaults: { title: {} },\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 pointData = this.pointData();\n var labelText;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(options.format);\n }\n return new BarLabel(labelText, deepExtend({ vertical: this.options.vertical }, options), pointData);\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 this$1 = this;\n var series = this.options.series;\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: this$1.categoryAxis.categoryAt(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 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 this._currentPointsCache = {};\n this._seriesPointsCache = this._seriesPointsCache || {};\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 {\n currentSeries = this$1.filterSeries(currentSeries, categoryAxis);\n }\n processedSeries.push(currentSeries);\n }\n this._seriesPointsCache = this._currentPointsCache;\n this._currentPointsCache = null;\n this.srcSeries = series;\n this.series = processedSeries;\n },\n filterSeries: function (series, categoryAxis) {\n var dataLength = (series.data || {}).length;\n categoryAxis._seriesMax = Math.max(categoryAxis._seriesMax || 0, dataLength);\n if (!(isNumber(categoryAxis.options.min) || isNumber(categoryAxis.options.max))) {\n return series;\n }\n var range = categoryAxis.currentRangeIndices();\n var outOfRangePoints = inArray(series.type, OUT_OF_RANGE_SERIES);\n var currentSeries = deepExtend({}, series);\n currentSeries.data = (currentSeries.data || []).slice(range.min, range.max + 1);\n if (outOfRangePoints) {\n createOutOfRangePoints(currentSeries, range, dataLength, function (idx) {\n return {\n item: series.data[idx],\n category: categoryAxis.categoryAt(idx, true),\n categoryIx: idx - range.min\n };\n }, function (idx) {\n return defined(series.data[idx]);\n });\n }\n return currentSeries;\n },\n clearSeriesPointsCache: function () {\n this._seriesPointsCache = {};\n },\n seriesSourcePoints: function (series, categoryAxis) {\n var this$1 = this;\n var key = series.index + ';' + categoryAxis.categoriesHash();\n if (this._seriesPointsCache[key]) {\n this._currentPointsCache[key] = this._seriesPointsCache[key];\n return this._seriesPointsCache[key];\n }\n var axisOptions = categoryAxis.options;\n var srcCategories = axisOptions.srcCategories;\n var dateAxis = equalsIgnoreCase(axisOptions.type, DATE);\n var srcData = series.data;\n var getFn = dateAxis ? getDateField : getField;\n var result = [];\n if (!dateAxis) {\n categoryAxis.mapCategories();\n }\n for (var idx = 0; idx < srcData.length; idx++) {\n var category = void 0;\n if (series.categoryField) {\n category = getFn(series.categoryField, srcData[idx], this$1.chartService.intl);\n } else {\n category = srcCategories[idx];\n }\n if (defined(category) && category !== null) {\n var categoryIx = categoryAxis.totalIndex(category);\n result[categoryIx] = result[categoryIx] || {\n items: [],\n category: category\n };\n result[categoryIx].items.push(idx);\n }\n }\n this._currentPointsCache[key] = result;\n return result;\n },\n aggregateSeries: function (series, categoryAxis) {\n var srcData = series.data;\n if (!srcData.length) {\n return series;\n }\n var srcPoints = this.seriesSourcePoints(series, categoryAxis);\n var result = deepExtend({}, series);\n var aggregator = new SeriesAggregator(deepExtend({}, series), SeriesBinder.current, DefaultAggregates.current);\n var data = result.data = [];\n var dataItems = categoryAxis.options.dataItems || [];\n var range = categoryAxis.currentRangeIndices();\n var categoryItem = function (idx) {\n var categoryIdx = idx - range.min;\n var point = srcPoints[idx];\n if (!point) {\n point = srcPoints[idx] = {};\n }\n point.categoryIx = categoryIdx;\n if (!point.item) {\n var category = categoryAxis.categoryAt(idx, true);\n point.category = category;\n point.item = aggregator.aggregatePoints(point.items, category);\n }\n return point;\n };\n for (var idx = range.min; idx <= range.max; idx++) {\n var point = categoryItem(idx);\n data[point.categoryIx] = point.item;\n if (point.items && point.items.length) {\n dataItems[point.categoryIx] = point.item;\n }\n }\n if (inArray(result.type, OUT_OF_RANGE_SERIES)) {\n createOutOfRangePoints(result, range, categoryAxis.totalCount(), categoryItem, function (idx) {\n return srcPoints[idx];\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 if (categoriesToAdd > 0) {\n categories = categoryAxis.options.categories = categoryAxis.options.categories.slice(0);\n while (categoriesToAdd--) {\n categories.push('');\n }\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 dataviz.DateCategoryAxis(axisOptions, this$1.chartService);\n } else {\n categoryAxis = new CategoryAxis(axisOptions, this$1.chartService);\n }\n definitions[i].categories = categoryAxis.options.srcCategories;\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: {},\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, opacity) {\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, opacity);\n this$1._points.push(point);\n }\n }\n },\n togglePointHighlight: function (point, show, opacity) {\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, opacity);\n }\n } else {\n point.toggleHighlight(show, opacity);\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 var clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n if (zoomPane && clipBox) {\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) && defined(axis.axisIndex)) {\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) && axis.zoomRange) {\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 var plotArea = this.chart._plotArea;\n if (axisRanges && axisRanges.length && plotArea.updateAxisOptions) {\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) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n },\n over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n return true;\n },\n out: function (widget, e) {\n widget._unsetActivePoint();\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\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.createContainers();\n this.createLegendTitle(options.title);\n this.createItems();\n },\n createContainers: 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 if (this.hasTitle()) {\n this.itemsContainer = new BoxElement({\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n } else {\n this.itemsContainer = this.container;\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.itemsContainer.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 if (this.hasTitle()) {\n this.title.reflow(new Box(this.container.box.x1, this.title.box.y1, this.container.box.x2, this.title.box.y2));\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 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 createLegendTitle: function (title) {\n var titleOptions = deepExtend({}, {\n color: BLACK,\n position: TOP,\n align: CENTER\n }, title);\n var text = titleOptions.text;\n if (!title || title.visible === false) {\n return;\n }\n if (defined(titleOptions) && titleOptions.visible) {\n var labelTemplate = getTemplate(titleOptions);\n if (labelTemplate) {\n text = labelTemplate({ text: text });\n } else if (titleOptions.format) {\n text = this.chartService.format.auto(titleOptions.format, text);\n }\n }\n this.title = new TextBox(text, titleOptions);\n this.createTitleLayout();\n this.appendTitleLayoutContent();\n },\n createTitleLayout: function () {\n this.layout = new dataviz.FloatElement({\n vertical: true,\n wrap: false\n });\n this.container.append(this.layout);\n },\n hasTitle: function () {\n return Boolean(this.options.title && this.options.title.visible !== false);\n },\n appendTitleLayoutContent: function () {\n var options = this.options;\n if (options.title.position === BOTTOM) {\n this.layout.append(this.itemsContainer);\n this.layout.append(this.title);\n } else {\n this.layout.append(this.title);\n this.layout.append(this.itemsContainer);\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 dataviz.DateCategoryAxis;\n this.initOptions();\n this.visible = this.options.visible && chartElement.offsetHeight;\n if (this.visible) {\n this.createElements();\n this.set(this._index(this.options.from), this._index(this.options.to));\n this.bindEvents();\n }\n },\n onPane: function (pane) {\n return this.categoryAxis.pane === pane;\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 if (this.options.mousewheel !== false) {\n this._mousewheelHandler = this._mousewheel.bind(this);\n var obj;\n bindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n }\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\n stopPropagation: true,\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 if (this._mousewheelHandler) {\n var obj;\n unbindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this._mousewheelHandler = null;\n }\n this.chartElement.removeChild(this.wrapper);\n this.wrapper = null;\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 categoryAxis = ref.categoryAxis;\n var range = state.range;\n var target = state.moveTarget;\n var reverse = categoryAxis.options.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 / (categoryAxis.categoriesCount() - 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 value = index;\n if (this._dateAxis) {\n value = this.categoryAxis.categoryAt(index);\n if (value > this.options.max) {\n value = this.options.max;\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 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 var pointData = this.pointData();\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\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 }), pointData);\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 pointData: function () {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n };\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 active: pointVisible,\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 this.targetBox = targetBox;\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 renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n if (dataviz.find(this.options.series, function (options) {\n return options.autoFit;\n })) {\n var targetBox = this.targetBox;\n var pieCenter = this.box.center();\n var bbox = this.visual.bbox();\n if (!bbox) {\n return;\n }\n var bboxBottom = bbox.bottomRight();\n var scale = Math.min((pieCenter.y - targetBox.y1) / (pieCenter.y - bbox.origin.y), (targetBox.y2 - pieCenter.y) / (bboxBottom.y - pieCenter.y), (pieCenter.x - targetBox.x1) / (pieCenter.x - bbox.origin.x), (targetBox.x2 - pieCenter.x) / (bboxBottom.x - pieCenter.x));\n if (scale < 1) {\n this.visual.transform(transform().scale(scale, scale, [\n pieCenter.x,\n pieCenter.y\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 stackRoot: function () {\n return this;\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 PieChart.prototype.isStackRoot = true;\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 detachLabels: function () {\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 function groupBySeriesIx(segments) {\n var seriesSegments = [];\n for (var idx = 0; idx < segments.length; idx++) {\n var segment = segments[idx];\n seriesSegments[segment.seriesIx] = seriesSegments[segment.seriesIx] || [];\n seriesSegments[segment.seriesIx].push(segment);\n }\n return seriesSegments;\n }\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 renderSegments: function () {\n LineChart.fn.renderSegments.call(this);\n if (this._segments && this._segments.length > 1) {\n var seriesSegments = groupBySeriesIx(this._segments);\n for (var idx = 0; idx < seriesSegments.length; idx++) {\n var segments = seriesSegments[idx];\n if (segments && segments.length > 1) {\n var firstPoint = segments[0].linePoints[0];\n var lastSegment = last(segments);\n var lastPoint = last(lastSegment.linePoints);\n var isFirstDataPoint = firstPoint.categoryIx === 0;\n var isLastDataPoint = lastPoint.categoryIx === lastPoint.categoriesCount - 1;\n if (isFirstDataPoint && isLastDataPoint) {\n last(segments).linePoints.push(firstPoint);\n }\n }\n }\n }\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 var missingValues = this.seriesMissingValues(currentSeries);\n if (linePoints.length === currentSeries.data.length || missingValues === INTERPOLATE) {\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 seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints\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 var data = {\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n };\n if (labelTemplate) {\n text = labelTemplate(data);\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), data);\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 MOUSELEAVE = 'mouseleave';\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._initHandlers();\n this._initSurface();\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n this$1.fontLoaded = true;\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 var chartArea = this.options.chartArea || {};\n var width = chartArea.width ? parseInt(chartArea.width, 10) : Math.floor(this.element.offsetWidth);\n var height = chartArea.height ? parseInt(chartArea.height, 10) : Math.floor(this.element.offsetHeight);\n return {\n width: width,\n height: height\n };\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this._size;\n var hasSize = size.width > 0 || size.height > 0;\n if (force || hasSize && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n } else if (hasSize && this._selections && dataviz.find(this._selections, function (s) {\n return !s.visible;\n })) {\n this._destroySelections();\n this._setupSelection();\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 return findAxisByName(name, this._plotArea.axes);\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 this._destroySurface();\n this.surface = drawing.Surface.create(wrap, { type: this.options.renderAs });\n this.surface.bind('mouseenter', this._surfaceMouseenterHandler);\n this.surface.bind('mouseleave', this._surfaceMouseleaveHandler);\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._size = {\n width: model.options.width,\n height: model.options.height\n };\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 triggerPaneRender(this._plotArea.panes);\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 triggerPaneRender(model._plotArea.panes);\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 && 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 _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 _toggleDragZoomEvents: function () {\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n var mousewheel = (zoomable || {}).mousewheel;\n var allowDrag = !pannable && (zoomable === false || selection === false) && !this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ]);\n var allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([\n ZOOM_START,\n ZOOM,\n ZOOM_END\n ]);\n var element = this.element;\n if (this._dragZoomEnabled && allowDrag && allowZoom) {\n element.style.touchAction = this._touchAction || '';\n this._dragZoomEnabled = false;\n } else if (!this._dragZoomEnabled && !(allowDrag && allowZoom)) {\n element.style.touchAction = 'none';\n this._dragZoomEnabled = true;\n }\n this._toggleDomEvents(!allowDrag, !allowZoom);\n },\n _toggleDomEvents: function (drag, zoom) {\n var domEvents = this.domEvents;\n if (!domEvents) {\n return;\n }\n if (domEvents.toggleDrag) {\n domEvents.toggleDrag(drag);\n }\n if (domEvents.toggleZoom) {\n domEvents.toggleZoom(zoom);\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 && 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 options = this.options;\n var size = this.getSize();\n return deepExtend({\n transitions: options.transitions,\n width: size.width || datavizConstants.DEFAULT_WIDTH,\n height: size.height || datavizConstants.DEFAULT_HEIGHT\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 _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 range = axis.range();\n var selection = new Selection(this$1, axis, deepExtend({\n min: range.min,\n max: range.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._mouseleaveHandler = this._mouseleave.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 element = this.element;\n this._touchAction = element.style.touchAction;\n var obj;\n bindEvents(element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj[MOUSELEAVE] = this._mouseleaveHandler, 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._toggleDragZoomEvents();\n },\n _mouseleave: function (e) {\n if (this._hoveredPoint) {\n this._hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n if (this._plotArea.hovered) {\n this.trigger(PLOT_AREA_LEAVE);\n this._plotArea.hovered = false;\n }\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._stopChartHandlers(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\n }\n },\n _gestureend: function (e) {\n if (this._zooming && !this._stopChartHandlers(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._stopChartHandlers(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._stopChartHandlers(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 this.chartService.panning = 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._stopChartHandlers(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._stopChartHandlers(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 this.chartService.panning = 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 _stopChartHandlers: function (e) {\n var selections = this._selections || [];\n if (!selections.length) {\n return false;\n }\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n if (pane) {\n for (var idx = 0; idx < selections.length; idx++) {\n if (selections[idx].onPane(pane)) {\n return true;\n }\n }\n }\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._stopChartHandlers(e) || !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 var inverseTransform = dataviz.elementScale(element).invert();\n var point = new GeometryPoint(clientX - offset.left - padding.left, clientY - offset.top - padding.top).transform(inverseTransform);\n return new Point(point.x, point.y);\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 var sharedTooltip = this._sharedTooltip();\n if (!this._startHover(drawingElement, e) && !sharedTooltip) {\n this._unsetActivePoint();\n }\n if (sharedTooltip) {\n this._trackSharedTooltip(this._eventCoordinates(e), e, true);\n }\n this._propagateClick(element, e);\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 if (this._suppressHover) {\n return false;\n }\n var point = this._drawingChartElement(element, e, function (element) {\n return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n });\n var activePoint = this._activePoint;\n var multipleSeries = this._plotArea.series.length > 1;\n var hasInactiveOpacity = this._hasInactiveOpacity();\n this._updateHoveredPoint(point, e);\n if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n this._displayTooltip(point);\n if (hasInactiveOpacity) {\n this._displayInactiveOpacity(point, multipleSeries);\n } else {\n this._highlight.show(point);\n }\n }\n } else if (!point && hasInactiveOpacity) {\n if (multipleSeries && this._activeChartInstance) {\n this._updateSeriesOpacity(point, true);\n this._applySeriesOpacity(this._activeChartInstance.children, null, true);\n this._activeChartInstance = null;\n }\n this._highlight && this._highlight.hide();\n this._activePoint = null;\n }\n return point;\n },\n _displayTooltip: function (point) {\n var tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n this._tooltip.show(point);\n }\n },\n _displayInactiveOpacity: function (activePoint, multipleSeries, highlightPoints) {\n var chartInstance = this._activeChartInstance = this._chartInstanceFromPoint(activePoint);\n if (multipleSeries) {\n this._updateSeriesOpacity(activePoint);\n this._applySeriesOpacity(chartInstance.children, null, true);\n this._applySeriesOpacity(chartInstance.children, activePoint.series);\n this._highlight.show(highlightPoints || activePoint);\n } else {\n var inactivePoints;\n if (!chartInstance.supportsPointInactiveOpacity()) {\n this._highlight.show(activePoint);\n return;\n }\n inactivePoints = this._getInactivePoints(activePoint, chartInstance);\n if (inactivePoints && inactivePoints.length) {\n this._highlight.show(inactivePoints, 1 - this._getInactiveOpacityForSeries(activePoint.series));\n }\n }\n },\n _getInactivePoints: function (activePoint, chartInstance) {\n var allPoints = this._getAllPointsOfType(chartInstance, activePoint.constructor);\n return allPoints.filter(function (point) {\n return point !== activePoint;\n });\n },\n _getAllPointsOfType: function (container, type) {\n var this$1 = this;\n var points = [];\n for (var i = 0; i < container.children.length; i++) {\n var element = container.children[i];\n if (element.constructor === type) {\n points.push(element);\n } else if (element.children && element.children.length) {\n points = points.concat(this$1._getAllPointsOfType(element, type));\n }\n }\n return points;\n },\n _updateHoveredPoint: function (point, e) {\n var hoveredPoint = this._hoveredPoint;\n if (hoveredPoint && hoveredPoint !== point) {\n hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n if (point && hoveredPoint !== point && point.over) {\n this._hoveredPoint = point;\n point.over(this, e);\n }\n },\n _updateSeriesOpacity: function (point, resetOpacity) {\n var this$1 = this;\n var plotArea = this._plotArea;\n var length = plotArea.series.length;\n for (var i = 0; i < length; i++) {\n var currSeries = plotArea.series[i];\n var defaultOpacity = this$1._getDefaultOpacityForSeries(currSeries);\n var inactiveOpacity = this$1._getInactiveOpacityForSeries(currSeries);\n if (!resetOpacity && currSeries !== point.series) {\n currSeries.defaultOpacity = defaultOpacity;\n currSeries.opacity = inactiveOpacity;\n if (currSeries.line) {\n currSeries.line.opacity = inactiveOpacity;\n }\n } else {\n currSeries.opacity = defaultOpacity;\n if (currSeries.line) {\n currSeries.line.opacity = defaultOpacity;\n }\n }\n }\n },\n _applySeriesOpacity: function (elements, activeSeries, reset, series) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var currSeries = element.series || series;\n if (currSeries && element.visual) {\n var opacity = series ? series.opacity : element.series.opacity;\n if (currSeries !== activeSeries || reset) {\n element.visual.opacity(reset ? 1 : opacity);\n }\n }\n if (element.children && element.children.length) {\n this$1._applySeriesOpacity(element.children, activeSeries, reset, element.series);\n }\n }\n },\n _chartInstanceFromPoint: function (point) {\n var chartInstance = point.parent;\n while (chartInstance && !chartInstance.plotArea) {\n chartInstance = chartInstance.parent;\n }\n return chartInstance;\n },\n _hasInactiveOpacity: function () {\n var hasDefaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity !== undefined;\n var hasInactiveOpacity = this.options.series.filter(function (s) {\n return s.highlight.inactiveOpacity !== undefined;\n }).length > 0;\n return hasDefaultInactiveOpacity || hasInactiveOpacity;\n },\n _getInactiveOpacityForSeries: function (series) {\n var defaultInactiveOpacity = this.options.seriesDefaults.highlight.inactiveOpacity;\n var seriesInactiveOpacity = series.highlight.inactiveOpacity;\n return seriesInactiveOpacity || defaultInactiveOpacity || series.opacity || datavizConstants.DEFAULT_SERIES_OPACITY;\n },\n _getDefaultOpacityForSeries: function (series) {\n return series.defaultOpacity || series.opacity || datavizConstants.DEFAULT_SERIES_OPACITY;\n },\n _mouseover: function (e) {\n var point = this._startHover(e.element, e.originalEvent);\n if (point && point.tooltipTracking && !this._mouseMoveTrackHandler && !this._sharedTooltip()) {\n 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 this._activePoint = seriesPoint;\n if (!seriesPoint.hover(this, e)) {\n var tooltipOptions = deepExtend({}, options.tooltip, seriesPoint.options.tooltip);\n if (tooltipOptions.visible) {\n tooltip.show(seriesPoint);\n }\n highlight.show(seriesPoint);\n }\n }\n }\n } else {\n var obj;\n unbindEvents(document, (obj = {}, obj[MOUSEMOVE] = this._mouseMoveTrackHandler, obj));\n this._unsetActivePoint();\n this._mouseMoveTrackHandler = null;\n }\n },\n _mousemove: function (e) {\n var coords = this._eventCoordinates(e);\n var plotArea = this._plotArea;\n this._trackCrosshairs(coords);\n if (plotArea.hover) {\n var overPlotArea = plotArea.backgroundContainsPoint(coords);\n if (overPlotArea) {\n plotArea.hovered = true;\n this._plotArea.hover(this, e);\n } else if (plotArea.hovered && !overPlotArea) {\n this.trigger(PLOT_AREA_LEAVE);\n plotArea.hovered = false;\n }\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, toggle) {\n if (this._suppressHover) {\n return;\n }\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.backgroundContainsPoint(coords)) {\n var index = categoryAxis.pointCategoryIndex(coords);\n if (index !== this._tooltipCategoryIx || !this._sharedHighlight && toggle) {\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 this._sharedHighlight = true;\n } else {\n tooltip.hide();\n }\n this._tooltipCategoryIx = index;\n } else if (toggle && this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._sharedHighlight = false;\n }\n } else if (this._sharedHighlight) {\n highlight.hide();\n tooltip.hide();\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\n }\n },\n hideElements: function (options) {\n var plotArea = this._plotArea;\n this._mousemove.cancel();\n plotArea.hideCrosshairs();\n this._unsetActivePoint(options);\n },\n _unsetActivePoint: function (options) {\n var ref = this;\n var tooltip = ref._tooltip;\n var highlight = ref._highlight;\n this._activePoint = null;\n this._hoveredPoint = null;\n if (tooltip && !(options && options.keepTooltipOpen)) {\n tooltip.hide();\n }\n this._tooltipCategoryIx = null;\n this._sharedHighlight = false;\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 = new dataviz.HashMap();\n var items = [];\n var bindable = false;\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 var bind = s.categoryField && onAxis;\n bindable = bind || bindable;\n if (bind && 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.get(category)) {\n items.push([\n category,\n dataRow\n ]);\n if (!dateAxis) {\n uniqueCategories.set(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 } else if (bindable) {\n axis.categories = [];\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 !== false) {\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 if (this._hasInactiveOpacity() && currentSeries.visible && items) {\n var multipleSeries = plotArea.series.length > 1;\n var point = items.length ? items[0] : items;\n this._displayInactiveOpacity(point, multipleSeries, items);\n } else {\n highlight.show(items);\n }\n },\n _shouldAttachMouseMove: function () {\n return this._plotArea.crosshairs.length || this._tooltip && this._sharedTooltip() || this.requiresHandlers([\n PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE\n ]);\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 this._toggleDragZoomEvents();\n },\n setOptions: function (options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n },\n setDirection: function (rtl) {\n this.chartService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this._destroySurface();\n }\n },\n setIntlService: function (intl) {\n this.chartService.intl = intl;\n },\n noTransitionsRedraw: function () {\n this._noTransitionsRedraw();\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[MOUSELEAVE] = this._mouseleaveHandler, obj));\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n if (this._mouseMoveTrackHandler) {\n var obj$1;\n unbindEvents(document, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mouseMoveTrackHandler, obj$1));\n }\n this._destroyView();\n this._destroySurface();\n this._clearRedrawTimeout();\n },\n _destroySurface: function () {\n var surface = this.surface;\n if (surface) {\n surface.unbind('mouseenter', this._surfaceMouseenterHandler);\n surface.unbind('mouseleave', this._surfaceMouseleaveHandler);\n surface.destroy();\n this.surface = null;\n }\n },\n _destroySelections: function () {\n var selections = this._selections;\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n },\n _destroyView: function () {\n var model = this._model;\n if (model) {\n model.destroy();\n this._model = null;\n }\n this._unsetActivePoint();\n this._destroySelections();\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 series[i].data = series[i].data || [];\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 var DATA_FIELDS = [\n 'data',\n 'categories'\n ];\n function clearMissingValues(originalOptions, options) {\n for (var field in options) {\n if (!inArray(field, DATA_FIELDS) && options.hasOwnProperty(field)) {\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 }\n function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\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 findAxisByName: findAxisByName,\n anyHasZIndex: anyHasZIndex,\n appendIfNotNull: appendIfNotNull,\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 createOutOfRangePoints: createOutOfRangePoints\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 LEGEND_ITEM_LEAVE = constants.LEGEND_ITEM_LEAVE;\n var SERIES_CLICK = constants.SERIES_CLICK;\n var SERIES_HOVER = constants.SERIES_HOVER;\n var SERIES_OVER = constants.SERIES_OVER;\n var SERIES_LEAVE = constants.SERIES_LEAVE;\n var PANE_RENDER = constants.PANE_RENDER;\n var PLOT_AREA_CLICK = constants.PLOT_AREA_CLICK;\n var PLOT_AREA_HOVER = constants.PLOT_AREA_HOVER;\n var PLOT_AREA_LEAVE = constants.PLOT_AREA_LEAVE;\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 NOTE_LEAVE = constants.NOTE_LEAVE;\n var DOCUMENT_ELEMENT = $(document.documentElement);\n var CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var LEAVE = 'leave';\n var MOUSEDOWN = 'down';\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 SERIES_OVER,\n SERIES_LEAVE,\n AXIS_LABEL_CLICK,\n LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER,\n LEGEND_ITEM_LEAVE,\n PANE_RENDER,\n PLOT_AREA_CLICK,\n PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE,\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 NOTE_LEAVE,\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 exportVisual: function (options) {\n var instance = this._instance;\n if (!instance) {\n return;\n }\n var visual;\n if (options && (options.width || options.height)) {\n var chartArea = instance.options.chartArea;\n var originalChartArea = instance._originalOptions.chartArea;\n deepExtend(chartArea, options);\n var model = instance._getModel();\n chartArea.width = originalChartArea.width;\n chartArea.height = originalChartArea.height;\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n visual = model.visual;\n } else {\n visual = instance.exportVisual();\n }\n return visual;\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({ keepTooltipOpen: !tooltip.options.autoHide });\n }\n },\n _getThemeOptions: function (userOptions) {\n var themeName = (userOptions || {}).theme;\n if (themeName && dataviz.SASS_THEMES.indexOf(themeName.toLowerCase()) !== -1) {\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();\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 (chart._hasInactiveOpacity() && chart._activеChartInstance) {\n chart._updateSeriesOpacity(null, true);\n chart._applySeriesOpacity(chart._activеChartInstance.children, null, true);\n chart._activеChartInstance = null;\n }\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 if (this._instance && this._instance.fontLoaded) {\n this._redraw();\n }\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 '_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('
    ' + '
    ' + '#if (!d.autoHide) {#
    #}#' + '
    ', {\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 tooltip.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n tooltip._closeTooltipHandler = proxy(tooltip._closeTooltip, tooltip);\n },\n destroy: function () {\n var tooltip = this;\n this._clearShowTimeout();\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler);\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 autoHide: true\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 var tooltip = this;\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.find('.k-tooltip-content').html(content);\n if (!tooltip.options.autoHide) {\n tooltip.element.off('click' + NS).on('click' + NS, '.k-tooltip-button', tooltip._closeTooltipHandler);\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler).on(tooltip.downEvent, tooltip._closeTooltipHandler);\n }\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n hide: function (forceHide) {\n var tooltip = this;\n if (!tooltip.options.autoHide && !forceHide) {\n return;\n }\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n DOCUMENT_ELEMENT.off(tooltip.downEvent, tooltip._closeTooltipHandler);\n }\n },\n _closeTooltip: function (e) {\n var target = $(e.target);\n if (!target.is('.k-chart-tooltip, .k-tooltip-content')) {\n e.preventDefault();\n this.chartElement.data('kendoChart')._instance.hideElements();\n this.hide(true);\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 function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\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 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/gauge/kendo-gauges', [\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 getSpacing = dataviz.getSpacing;\n var defined = dataviz.defined;\n var constants = dataviz.constants;\n var BLACK = constants.BLACK;\n var COORD_PRECISION = constants.COORD_PRECISION;\n var services = dataviz.services;\n var deepExtend = dataviz.deepExtend;\n var isArray = dataviz.isArray;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var NumericAxis = dataviz.NumericAxis;\n var limitValue = dataviz.limitValue;\n var Box = dataviz.Box;\n var interpolateValue = dataviz.interpolateValue;\n var round = dataviz.round;\n var drawing = kendo.drawing;\n var DrawingGroup = drawing.Group;\n var DrawingPath = drawing.Path;\n var Animation = drawing.Animation;\n var AnimationFactory = drawing.AnimationFactory;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var GeometryPoint = geometry.Point;\n var transform = geometry.transform;\n var ANGULAR_SPEED = 150;\n var LINEAR_SPEED = 250;\n var ARROW = 'arrow';\n var ARROW_POINTER = 'arrowPointer';\n var BAR_POINTER = 'barPointer';\n var DEFAULT_HEIGHT = 200;\n var DEFAULT_LINE_WIDTH = 0.5;\n var DEFAULT_WIDTH = 200;\n var DEGREE = Math.PI / 180;\n var INSIDE = 'inside';\n var LINEAR = 'linear';\n var OUTSIDE = 'outside';\n var RADIAL_POINTER = 'radialPointer';\n var RADIAL_RANGE_POINTER = 'radialRangePointer';\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 var Group = DrawingGroup;\n var Path$1 = DrawingPath;\n var Text = drawing.Text;\n function buildLabelElement(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 wrapper = Path$1.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 GeometryPoint(textBox.x1, textBox.y1), {\n font: options.font,\n fill: { color: options.color }\n });\n var styleGeometry = pad(text.bbox().clone(), options.padding);\n var styleBox = Path$1.fromRect(styleGeometry, {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n opacity: border.opacity,\n dashType: border.dashType,\n lineJoin: 'round',\n lineCap: 'round'\n },\n fill: { color: background }\n });\n var elements = new Group();\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 : constants.MIN_VALUE;\n var to = defined(range.to) ? range.to : constants.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 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 var DEFAULT_MARGIN = 5;\n var Path = DrawingPath;\n var Surface = drawing.Surface;\n var Gauge = dataviz.Class.extend({\n init: function (element, userOptions, theme, context) {\n if (context === void 0) {\n context = {};\n }\n this.element = element;\n this.theme = theme;\n this.contextService = new services.ChartService(this, context);\n this._originalOptions = deepExtend({}, this.options, userOptions);\n this.options = deepExtend({}, this._originalOptions);\n this._initTheme(theme);\n this.redraw();\n },\n destroy: function () {\n if (this.surface) {\n this.surface.destroy();\n this.surface = null;\n }\n delete this.element;\n delete this.surfaceElement;\n },\n value: function (pointerValue) {\n var pointer = this.pointers[0];\n if (arguments.length === 0) {\n return pointer.value();\n }\n pointer.value(pointerValue);\n this._setValueOptions(pointerValue);\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 pointers = this.pointers;\n var allValues = [];\n if (arguments.length === 0) {\n for (var i = 0; i < pointers.length; i++) {\n allValues.push(pointers[i].value());\n }\n return allValues;\n }\n if (isArray(values)) {\n for (var i$1 = 0; i$1 < values.length; i$1++) {\n if (dataviz.isNumber(values[i$1])) {\n pointers[i$1].value(values[i$1]);\n }\n }\n }\n this._setValueOptions(values);\n },\n _setValueOptions: function (values) {\n var pointers = [].concat(this.options.pointer);\n var arrayValues = [].concat(values);\n for (var i = 0; i < arrayValues.length; i++) {\n pointers[i].value = arrayValues[i];\n }\n },\n resize: function () {\n this.noTransitionsRedraw();\n },\n noTransitionsRedraw: function () {\n var transitions = this.options.transitions;\n this._toggleTransitions(false);\n this.redraw();\n this._toggleTransitions(transitions);\n },\n redraw: function () {\n var size = this._surfaceSize();\n var wrapper = new Rect([\n 0,\n 0\n ], [\n size.width,\n size.height\n ]);\n this._initSurface();\n this.gaugeArea = this._createGaugeArea();\n this._createModel();\n var bbox = unpad(wrapper.bbox(), this._gaugeAreaMargin);\n this.reflow(bbox);\n },\n setOptions: function (options, theme) {\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n this._initTheme(theme);\n this.redraw();\n },\n setDirection: function (rtl) {\n this.contextService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this.surface.destroy();\n this.surface = null;\n }\n },\n setIntlService: function (intl) {\n this.contextService.intl = intl;\n },\n _initTheme: function (theme) {\n var currentTheme = theme || this.theme || {};\n this.theme = currentTheme;\n this.options = deepExtend({}, currentTheme, this.options);\n var options = this.options;\n var pointer = options.pointer;\n if (isArray(pointer)) {\n var pointers = [];\n for (var i = 0; i < pointer.length; i++) {\n pointers.push(deepExtend({}, currentTheme.pointer, pointer[i]));\n }\n options.pointer = pointers;\n }\n },\n _createGaugeArea: function () {\n var options = this.options.gaugeArea;\n var size = this.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 this._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 _initSurface: function () {\n var ref = this;\n var options = ref.options;\n var surface = ref.surface;\n var element = this._surfaceElement();\n var size = this._surfaceSize();\n dataviz.elementSize(element, size);\n if (!surface || surface.options.type !== options.renderAs) {\n if (surface) {\n surface.destroy();\n }\n this.surface = Surface.create(element, { type: options.renderAs });\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n _surfaceSize: function () {\n var options = this.options;\n var size = this._getSize();\n if (options.gaugeArea) {\n deepExtend(size, options.gaugeArea);\n }\n return size;\n },\n _surfaceElement: function () {\n if (!this.surfaceElement) {\n this.surfaceElement = document.createElement('div');\n this.element.appendChild(this.surfaceElement);\n }\n return this.surfaceElement;\n },\n getSize: function () {\n return this._getSize();\n },\n _getSize: function () {\n var element = this.element;\n var defaultSize = this._defaultSize();\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n if (!width) {\n width = defaultSize.width;\n }\n if (!height) {\n height = defaultSize.height;\n }\n return {\n width: width,\n height: height\n };\n },\n _defaultSize: function () {\n return {\n width: DEFAULT_WIDTH,\n height: DEFAULT_HEIGHT\n };\n },\n _toggleTransitions: function (value) {\n var this$1 = this;\n this.options.transitions = value;\n for (var i = 0; i < this.pointers.length; i++) {\n this$1.pointers[i].options.animation.transitions = value;\n }\n }\n });\n setDefaultOptions(Gauge, {\n plotArea: {},\n theme: 'default',\n renderAs: '',\n pointer: {},\n scale: {},\n gaugeArea: {}\n });\n var Path$2 = DrawingPath;\n var Group$2 = DrawingGroup;\n var Point = GeometryPoint;\n function renderAxisTick(tickRenderOptions, tickOptions) {\n var position = tickRenderOptions.position;\n var tickX = tickRenderOptions.tickX;\n var tickY = tickRenderOptions.tickY;\n var start, end;\n if (tickRenderOptions.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 var tickPath = new Path$2({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(start).lineTo(end);\n return tickPath;\n }\n function renderTicks(tickGroup, tickPositions, tickRenderOptions, tickOptions) {\n var count = tickPositions.length;\n if (tickOptions.visible) {\n var mirror = tickRenderOptions.mirror;\n var lineBox = tickRenderOptions.lineBox;\n for (var i = tickOptions.skip; i < count; i += tickOptions.step) {\n if (i % tickOptions.skipUnit === 0) {\n continue;\n }\n tickRenderOptions.tickX = mirror ? lineBox.x2 : lineBox.x2 - tickOptions.size;\n tickRenderOptions.tickY = mirror ? lineBox.y1 - tickOptions.size : lineBox.y1;\n tickRenderOptions.position = tickPositions[i];\n tickGroup.append(renderAxisTick(tickRenderOptions, tickOptions));\n }\n }\n }\n var LinearScale = NumericAxis.extend({\n init: function (options, service) {\n var scaleOptions = options || {};\n if (!defined(scaleOptions.reverse) && scaleOptions.vertical === false && (service || {}).rtl) {\n scaleOptions = $.extend({}, scaleOptions, { reverse: true });\n }\n NumericAxis.fn.init.call(this, 0, 1, scaleOptions, service);\n this.options.minorUnit = this.options.minorUnit || this.options.majorUnit / 10;\n },\n initUserOptions: function (options) {\n var scaleOptions = deepExtend({}, this.options, options);\n scaleOptions = deepExtend({}, scaleOptions, { labels: { mirror: scaleOptions.mirror } });\n scaleOptions.majorUnit = scaleOptions.majorUnit || dataviz.autoMajorUnit(scaleOptions.min, scaleOptions.max);\n return scaleOptions;\n },\n initFields: function () {\n },\n render: function () {\n var elements = this.elements = new Group$2();\n var labels = this.renderLabels();\n var scaleLine = this.renderLine();\n var scaleTicks = this.renderTicks();\n var ranges = this.renderRanges();\n elements.append(scaleLine, labels, scaleTicks, ranges);\n return elements;\n },\n renderRanges: function () {\n var this$1 = this;\n var options = this.options;\n var min = options.min;\n var max = options.max;\n var vertical = options.vertical;\n var mirror = options.labels.mirror;\n var ranges = options.ranges || [];\n var elements = new Group$2();\n var count = ranges.length;\n var rangeSize = options.rangeSize || options.minorTicks.size / 2;\n for (var i = 0; i < count; i++) {\n var range = getRange(ranges[i], min, max);\n var slot = this$1.getSlot(range.from, range.to);\n var slotX = vertical ? this$1.lineBox() : slot;\n var slotY = vertical ? slot : this$1.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$2.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 return elements;\n },\n renderLabels: function () {\n var ref = this;\n var labels = ref.labels;\n var options = ref.options;\n var elements = new Group$2();\n for (var i = 0; i < labels.length; i++) {\n elements.append(buildLabelElement(labels[i], options.labels));\n }\n return elements;\n },\n renderLine: function () {\n var line = this.options.line;\n var lineBox = this.lineBox();\n var elements = new Group$2();\n if (line.width > 0 && line.visible) {\n var linePath = new Path$2({\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 ticks = new Group$2();\n var options = this.options;\n var majorUnit = options.majorTicks.visible ? options.majorUnit : 0;\n var tickRenderOptions = {\n vertical: options.vertical,\n mirror: options.labels.mirror,\n lineBox: this.lineBox()\n };\n renderTicks(ticks, this.getMajorTickPositions(), tickRenderOptions, options.majorTicks);\n renderTicks(ticks, this.getMinorTickPositions(), tickRenderOptions, deepExtend({}, { skipUnit: majorUnit / options.minorUnit }, options.minorTicks));\n return ticks;\n }\n });\n setDefaultOptions(LinearScale, {\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 var Pointer = dataviz.Class.extend({\n init: function (scale, userOptions) {\n var ref = scale.options;\n var min = ref.min;\n var max = ref.max;\n var options = this.options = deepExtend({}, this.options, userOptions);\n options.fill = options.color;\n this.scale = scale;\n if (defined(options.value)) {\n options.value = limitValue(options.value, min, max);\n } else {\n options.value = min;\n }\n },\n value: function (newValue) {\n var options = this.options;\n var value = options.value;\n if (arguments.length === 0) {\n return value;\n }\n var ref = this.scale.options;\n var min = ref.min;\n var max = ref.max;\n options._oldValue = defined(options._oldValue) ? options.value : min;\n options.value = limitValue(newValue, min, max);\n if (this.elements) {\n this.repaint();\n }\n }\n });\n setDefaultOptions(Pointer, { color: BLACK });\n var LinearPointer = Pointer.extend({\n init: function (scale, options) {\n Pointer.fn.init.call(this, scale, options);\n this.options = deepExtend({ track: { visible: defined(options.track) } }, this.options);\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var scale = ref.scale;\n var ref$1 = scale.options;\n var mirror = ref$1.mirror;\n var vertical = ref$1.vertical;\n var scaleLine = scale.lineBox();\n var trackSize = options.track.size || options.size;\n var pointerHalfSize = options.size / 2;\n var margin = getSpacing(options.margin);\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 Box(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 Box(scaleLine.x2 + space, scaleLine.y1 - pointerHalfSize, scaleLine.x2 + space, scaleLine.y2 + pointerHalfSize);\n pointerBox = pointerRangeBox;\n }\n } else {\n trackBox = new Box(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 Box(scaleLine.x1 - pointerHalfSize, scaleLine.y1 - space, scaleLine.x2 + pointerHalfSize, scaleLine.y1 - space);\n pointerBox = pointerRangeBox;\n }\n }\n this.trackBox = trackBox;\n this.pointerRangeBox = pointerRangeBox;\n this.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 ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var ref$1 = scale.options;\n var mirror = ref$1.mirror;\n var vertical = ref$1.vertical;\n var margin = getSpacing(options.margin);\n var space = vertical ? margin[mirror ? 'left' : 'right'] : margin[mirror ? 'bottom' : 'top'];\n return space;\n }\n });\n setDefaultOptions(LinearPointer, {\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 var ArrowLinearPointerAnimation = Animation.extend({\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 vertical = options.vertical;\n var axis = vertical ? 'x1' : 'y1';\n if (options.mirror === 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 GeometryPoint(from.x1, from.y1);\n var toScale = this.toScale = new GeometryPoint(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(transform().translate(translateX, translateY));\n }\n });\n setDefaultOptions(ArrowLinearPointerAnimation, {\n easing: LINEAR,\n duration: LINEAR_SPEED\n });\n AnimationFactory.current.register(ARROW_POINTER, ArrowLinearPointerAnimation);\n var Point$1 = GeometryPoint;\n var Path$3 = DrawingPath;\n var ArrowLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.6;\n }\n },\n pointerShape: function () {\n var ref = this;\n var scale = ref.scale;\n var size = ref.options.size;\n var halfSize = size / 2;\n var sign = scale.options.mirror ? -1 : 1;\n var shape;\n if (scale.options.vertical) {\n shape = [\n new Point$1(0, 0 - halfSize),\n new Point$1(0 - sign * size, 0),\n new Point$1(0, 0 + halfSize)\n ];\n } else {\n shape = [\n new Point$1(0 - halfSize, 0),\n new Point$1(0, 0 + sign * size),\n new Point$1(0 + halfSize, 0)\n ];\n }\n return shape;\n },\n repaint: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var animation = new ArrowLinearPointerAnimation(this.elements, deepExtend(options.animation, {\n vertical: scale.options.vertical,\n mirror: scale.options.mirror,\n margin: this._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 ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var elementOptions = this.getElementOptions();\n var shape = this.pointerShape(options.value);\n options.animation.type = ARROW_POINTER;\n var elements = new Path$3({\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(transform().translate(slot.x1, slot.y1));\n this.elements = elements;\n return elements;\n }\n });\n var BarLinearPointerAnimation = Animation.extend({\n setup: function () {\n var options = this.options;\n var axis = this.axis = options.vertical ? constants.Y : constants.X;\n var to = this.to = options.newPoints[0][axis];\n var from = this.from = options.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 setDefaultOptions(BarLinearPointerAnimation, {\n easing: LINEAR,\n speed: LINEAR_SPEED\n });\n AnimationFactory.current.register(BAR_POINTER, BarLinearPointerAnimation);\n var Group$3 = DrawingGroup;\n var Path$4 = DrawingPath;\n var BarLinearPointer = LinearPointer.extend({\n init: function (scale, options) {\n LinearPointer.fn.init.call(this, scale, options);\n if (!defined(this.options.size)) {\n this.options.size = this.scale.options.majorTicks.size * 0.3;\n }\n },\n pointerShape: function (value) {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var ref$1 = scale.options;\n var mirror = ref$1.mirror;\n var vertical = ref$1.vertical;\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 ? constants.Y : constants.X;\n var sizeAxis = vertical ? constants.X : constants.Y;\n var margin = this._margin() * dir;\n var p1 = new GeometryPoint();\n p1[axis] = minSlot[axis + '1'];\n p1[sizeAxis] = minSlot[sizeAxis + '1'];\n var p2 = new GeometryPoint();\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 ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var shape = this.pointerShape(options.value);\n var pointerPath = this.pointerPath;\n var oldShape = this.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 group = new Group$3();\n var elementOptions = this.getElementOptions();\n if (this.options.track.visible) {\n group.append(this.renderTrack());\n }\n var pointer = this.pointerPath = new Path$4({\n stroke: elementOptions.stroke,\n fill: elementOptions.fill\n });\n group.append(pointer);\n this.elements = group;\n return group;\n },\n renderTrack: function () {\n var trackOptions = this.options.track;\n var border = trackOptions.border || {};\n var trackBox = this.trackBox.clone().pad(border.width || 0);\n return new Path$4.fromRect(trackBox.toRect(), {\n fill: {\n color: trackOptions.color,\n opacity: trackOptions.opacity\n },\n stroke: {\n color: border.width ? border.color || trackOptions.color : '',\n width: border.width,\n dashType: border.dashType\n }\n });\n }\n });\n var DEFAULT_MIN_WIDTH = 60;\n var DEFAULT_MIN_HEIGHT = 60;\n var Group$1 = DrawingGroup;\n var LinearGauge = Gauge.extend({\n reflow: function (bbox) {\n var pointers = this.pointers;\n var bboxX = bbox.origin.x;\n var bboxY = bbox.origin.y;\n var box = new Box(bboxX, bboxY, bboxX + bbox.width(), bboxY + bbox.height());\n this.scale.reflow(box);\n this._shrinkScaleWidth(box);\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow();\n }\n this.bbox = this._getBox(box);\n this._alignElements();\n this._shrinkElements();\n this._buildVisual();\n this._draw();\n },\n _buildVisual: function () {\n var visuals = new Group$1();\n var scaleElements = this.scale.render();\n var pointers = this.pointers;\n visuals.append(this.gaugeArea);\n visuals.append(scaleElements);\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n visuals.append(current.render());\n current.value(current.options.value);\n }\n this._visuals = visuals;\n },\n _createModel: function () {\n var this$1 = this;\n var options = this.options;\n var scale = this.scale = new LinearScale(options.scale, this.contextService);\n this.pointers = [];\n var pointers = options.pointer;\n pointers = isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointers.length; i++) {\n var currentOptions = deepExtend({}, pointers[i], { animation: { transitions: options.transitions } });\n var pointerType = currentOptions.shape === ARROW ? ArrowLinearPointer : BarLinearPointer;\n this$1.pointers.push(new pointerType(scale, currentOptions));\n }\n },\n _defaultSize: function () {\n var vertical = this.options.scale.vertical;\n return {\n width: vertical ? DEFAULT_MIN_WIDTH : DEFAULT_WIDTH,\n height: vertical ? DEFAULT_HEIGHT : DEFAULT_MIN_HEIGHT\n };\n },\n _getBox: function (box) {\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.pointers;\n var boxCenter = box.center();\n var plotAreaBox = pointers[0].box.clone().wrap(scale.box);\n for (var i = 0; i < pointers.length; i++) {\n plotAreaBox.wrap(pointers[i].box.clone());\n }\n var size;\n if (scale.options.vertical) {\n size = plotAreaBox.width() / 2;\n plotAreaBox = new Box(boxCenter.x - size, box.y1, boxCenter.x + size, box.y2);\n } else {\n size = plotAreaBox.height() / 2;\n plotAreaBox = new Box(box.x1, boxCenter.y - size, box.x2, boxCenter.y + size);\n }\n return plotAreaBox;\n },\n _alignElements: function () {\n var this$1 = this;\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.pointers;\n var scaleBox = scale.box;\n var box = pointers[0].box.clone().wrap(scale.box);\n var plotAreaBox = this.bbox;\n for (var i = 0; i < pointers.length; i++) {\n box.wrap(pointers[i].box.clone());\n }\n var diff;\n if (scale.options.vertical) {\n diff = plotAreaBox.center().x - box.center().x;\n scale.reflow(new Box(scaleBox.x1 + diff, plotAreaBox.y1, scaleBox.x2 + diff, plotAreaBox.y2));\n } else {\n diff = plotAreaBox.center().y - box.center().y;\n scale.reflow(new Box(scaleBox.x1, scaleBox.y1 + diff, scaleBox.x2, scaleBox.y2 + diff));\n }\n for (var i$1 = 0; i$1 < pointers.length; i$1++) {\n pointers[i$1].reflow(this$1.bbox);\n }\n },\n _shrinkScaleWidth: function (bbox) {\n var ref = this;\n var scale = ref.scale;\n if (!scale.options.vertical) {\n var overflow = scale.contentBox().width() - bbox.width();\n if (overflow > 0) {\n scale.box.shrink(overflow, 0);\n scale.box.alignTo(bbox, 'center');\n scale.reflow(scale.box);\n }\n }\n },\n _shrinkElements: function () {\n var this$1 = this;\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.pointers;\n var scaleBox = scale.box.clone();\n var pos = scale.options.vertical ? 'y' : 'x';\n var pointerBox = pointers[0].box;\n for (var 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 (var i$1 = 0; i$1 < pointers.length; i$1++) {\n pointers[i$1].reflow(this$1.bbox);\n }\n }\n });\n setDefaultOptions(LinearGauge, {\n transitions: true,\n gaugeArea: { background: '' },\n scale: { vertical: true }\n });\n var GEO_ARC_ADJUST_ANGLE = 180;\n var Arc = drawing.Arc;\n var Path$5 = DrawingPath;\n var Group$5 = DrawingGroup;\n function drawTicks(arc, tickAngles, unit, tickOptions) {\n var ticks = new Group$5();\n var center = arc.center;\n var radius = arc.getRadiusX();\n if (tickOptions.visible) {\n for (var i = 0; i < tickAngles.length; i++) {\n var tickStart = arc.pointAt(tickAngles[i]);\n var tickEnd = new GeometryPoint(center.x + radius - tickOptions.size, center.y).rotate(tickAngles[i], center);\n ticks.append(new Path$5({\n stroke: {\n color: tickOptions.color,\n width: tickOptions.width\n }\n }).moveTo(tickStart).lineTo(tickEnd));\n }\n }\n return ticks;\n }\n function rangeSegment(from, to, color, opacity) {\n return {\n from: from,\n to: to,\n color: color,\n opacity: opacity\n };\n }\n var RadialScale = NumericAxis.extend({\n init: function (options, service) {\n NumericAxis.fn.init.call(this, 0, 1, options, service);\n },\n initUserOptions: function (options) {\n var scaleOptions = deepExtend({}, this.options, options);\n scaleOptions.majorUnit = scaleOptions.majorUnit || dataviz.autoMajorUnit(scaleOptions.min, scaleOptions.max);\n scaleOptions.minorUnit = scaleOptions.minorUnit || scaleOptions.majorUnit / 10;\n return scaleOptions;\n },\n initFields: function () {\n },\n render: function (center, radius) {\n var arc = this.renderArc(center, radius);\n this.bbox = arc.bbox();\n this.labelElements = this.renderLabels();\n this.ticks = this.renderTicks();\n this.ranges = this.renderRanges();\n },\n reflow: function (bbox) {\n var center = bbox.center();\n var radius = Math.min(bbox.height(), bbox.width()) / 2;\n if (defined(this.bbox)) {\n this.bbox = this.arc.bbox();\n this.radius(this.arc.getRadiusX());\n this.repositionRanges();\n this.renderLabels();\n } else {\n return this.render(center, radius);\n }\n },\n slotAngle: function (value) {\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var reverse = ref.reverse;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var angle = endAngle - startAngle;\n var result;\n if (reverse) {\n result = 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 hasRanges: function () {\n var ranges = this.options.ranges;\n return ranges && ranges.length;\n },\n ticksSize: function () {\n var ref = this.options;\n var majorTicks = ref.majorTicks;\n var minorTicks = ref.minorTicks;\n var size = 0;\n if (majorTicks.visible) {\n size = majorTicks.size;\n }\n if (minorTicks.visible) {\n size = Math.max(minorTicks.size, size);\n }\n return size;\n },\n labelsCount: function () {\n var count = NumericAxis.fn.labelsCount.call(this);\n var options = this.options;\n var angle = options.endAngle - options.startAngle;\n if (angle >= 360 && options.max % options.majorUnit === 0) {\n count -= 1;\n }\n return count;\n },\n renderLabels: function () {\n var this$1 = this;\n var options = this.options;\n var arc = this.arc.clone();\n var radius = arc.getRadiusX();\n var tickAngles = this.tickAngles(arc, options.majorUnit);\n var rangeSize = options.rangeSize = options.rangeSize || radius * 0.1;\n var labelsGroup = new Group$5();\n var rangeDistance = radius * 0.05;\n if (defined(options.rangeDistance)) {\n rangeDistance = options.rangeDistance;\n } else {\n options.rangeDistance = rangeDistance;\n }\n var labelsOptions = options.labels;\n var isInside = labelsOptions.position === INSIDE;\n var hasLabelElements = defined(this.labelElements);\n if (isInside) {\n radius -= this.ticksSize();\n if (this.hasRanges() && !hasLabelElements) {\n radius -= rangeSize + rangeDistance;\n }\n arc.setRadiusX(radius).setRadiusY(radius);\n }\n var labels = this.labels;\n var count = labels.length;\n var padding = getSpacing(labelsOptions.padding);\n var paddingWidth = (padding.left + padding.right) / 2;\n var paddingHeight = (padding.top + padding.bottom) / 2;\n for (var i = 0; i < count; i++) {\n var label = labels[i];\n var halfWidth = label.box.width() / 2;\n var halfHeight = label.box.height() / 2;\n var angle = tickAngles[i];\n var labelAngle = (angle - GEO_ARC_ADJUST_ANGLE) * DEGREE;\n var lp = arc.pointAt(angle);\n var cx = lp.x + Math.cos(labelAngle) * (halfWidth + paddingWidth) * (isInside ? 1 : -1);\n var cy = lp.y + Math.sin(labelAngle) * (halfHeight + paddingHeight) * (isInside ? 1 : -1);\n label.reflow(new Box(cx - halfWidth, cy - halfHeight, cx + halfWidth, cy + halfHeight));\n var labelPos = new GeometryPoint(label.box.x1, label.box.y1);\n var labelElement = void 0;\n if (!hasLabelElements) {\n labelElement = buildLabelElement(label, options.labels);\n labelsGroup.append(labelElement);\n } else {\n labelElement = this$1.labelElements.children[i];\n var prevLabelPos = labelElement.bbox().origin;\n var labelTransform = labelElement.transform() || transform();\n labelTransform.translate(labelPos.x - prevLabelPos.x, labelPos.y - prevLabelPos.y);\n labelElement.transform(labelTransform);\n }\n this$1.bbox = Rect.union(this$1.bbox, labelElement.bbox());\n }\n return labelsGroup;\n },\n repositionRanges: function () {\n var ranges = this.ranges.children;\n if (ranges.length > 0) {\n var ref = this.options;\n var rangeDistance = ref.rangeDistance;\n var rangeSize = ref.rangeSize;\n var rangeRadius = this.getRangeRadius();\n if (this.options.labels.position === INSIDE) {\n rangeRadius += rangeSize + rangeDistance;\n }\n var newRadius = rangeRadius + rangeSize / 2;\n for (var i = 0; i < ranges.length; i++) {\n ranges[i]._geometry.setRadiusX(newRadius).setRadiusY(newRadius);\n }\n this.bbox = Rect.union(this.bbox, this.ranges.bbox());\n }\n },\n renderRanges: function () {\n var this$1 = this;\n var segments = this.rangeSegments();\n var segmentsCount = segments.length;\n var result = new Group$5();\n if (segmentsCount) {\n var ref = this.options;\n var rangeSize = ref.rangeSize;\n var reverse = ref.reverse;\n var rangeDistance = ref.rangeDistance;\n var rangeRadius = this.getRangeRadius();\n this.radius(this.radius() - rangeSize - rangeDistance);\n for (var i = 0; i < segmentsCount; i++) {\n var segment = segments[i];\n var from = this$1.slotAngle(segment[reverse ? 'to' : 'from']);\n var to = this$1.slotAngle(segment[!reverse ? 'to' : 'from']);\n if (to - from !== 0) {\n result.append(this$1.createRange(from, to, rangeRadius, segment));\n }\n }\n }\n return result;\n },\n createRange: function (startAngle, endAngle, rangeRadius, options) {\n var rangeSize = this.options.rangeSize;\n var rangeGeom = new geometry.Arc(this.arc.center, {\n radiusX: rangeRadius + rangeSize / 2,\n radiusY: rangeRadius + rangeSize / 2,\n startAngle: startAngle,\n endAngle: endAngle\n });\n return new Arc(rangeGeom, {\n stroke: {\n width: rangeSize,\n color: options.color,\n opacity: options.opacity,\n lineCap: options.lineCap\n }\n });\n },\n rangeSegments: function () {\n var options = this.options;\n var ranges = options.ranges || [];\n var count = ranges.length;\n var segments = [];\n if (count) {\n var min = options.min;\n var max = options.max;\n var defaultColor = options.rangePlaceholderColor;\n segments.push(rangeSegment(min, max, defaultColor));\n for (var i = 0; i < count; i++) {\n var range = getRange(ranges[i], min, max);\n var segmentsCount = segments.length;\n for (var j = 0; j < segmentsCount; j++) {\n var 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 ref = this;\n var arc = ref.arc;\n var options = ref.options;\n var rangeSize = options.rangeSize;\n var rangeDistance = options.rangeDistance;\n var majorTickSize = options.majorTicks.size;\n var radius;\n if (options.labels.position === OUTSIDE) {\n radius = arc.getRadiusX() - majorTickSize - rangeDistance - rangeSize;\n } else {\n radius = arc.getRadiusX() - rangeSize;\n }\n return radius;\n },\n renderArc: function (center, radius) {\n var options = this.options;\n var arc = this.arc = new geometry.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 ref = this;\n var arc = ref.arc;\n var options = ref.options;\n var tickArc = arc.clone();\n this.majorTickAngles = this.tickAngles(arc, options.majorUnit);\n this.majorTicks = drawTicks(tickArc, this.majorTickAngles, options.majorUnit, options.majorTicks);\n var allTicks = new Group$5();\n allTicks.append(this.majorTicks);\n var majorTickSize = options.majorTicks.size;\n var minorTickSize = options.minorTicks.size;\n this._tickDifference = majorTickSize - minorTickSize;\n if (options.labels.position === OUTSIDE) {\n var radius = tickArc.getRadiusX();\n tickArc.setRadiusX(radius - majorTickSize + minorTickSize).setRadiusY(radius - majorTickSize + minorTickSize);\n }\n this.minorTickAngles = this.normalizeTickAngles(this.tickAngles(arc, options.minorUnit));\n this.minorTicks = drawTicks(tickArc, this.minorTickAngles, options.minorUnit, options.minorTicks);\n allTicks.append(this.minorTicks);\n return allTicks;\n },\n normalizeTickAngles: function (angles) {\n var options = this.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 options = this.options;\n var reverse = options.reverse;\n var range = options.max - options.min;\n var angle = ring.endAngle - ring.startAngle;\n var tickCount = range / stepValue;\n var pos = ring.startAngle;\n var step = angle / tickCount;\n if (reverse) {\n pos += angle;\n step = -step;\n }\n if (angle >= 360 && options.max % stepValue === 0) {\n tickCount -= 1;\n }\n var positions = [];\n for (var 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 (value) {\n if (value) {\n this.arc.setRadiusX(value).setRadiusY(value);\n this.repositionTicks(this.majorTicks.children, this.majorTickAngles);\n this.repositionTicks(this.minorTicks.children, this.minorTickAngles, true);\n } else {\n return this.arc.getRadiusX();\n }\n },\n repositionTicks: function (ticks, tickAngles, minor) {\n var diff = minor ? this._tickDifference || 0 : 0;\n var tickArc = this.arc;\n var radius = tickArc.getRadiusX();\n if (minor && this.options.labels.position === OUTSIDE && diff !== 0) {\n tickArc = this.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 transform().translate(xDiff, yDiff));\n }\n }\n });\n setDefaultOptions(RadialScale, {\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 var RadialPointerAnimation = Animation.extend({\n init: function (element, options) {\n Animation.fn.init.call(this, element, options);\n var animationOptions = this.options;\n animationOptions.duration = Math.max(Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration * 1000, 1);\n },\n step: function (pos) {\n var options = this.options;\n var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n this.element.transform(transform().rotate(angle, options.center));\n }\n });\n setDefaultOptions(RadialPointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n });\n AnimationFactory.current.register(RADIAL_POINTER, RadialPointerAnimation);\n var CAP_SIZE = 0.05;\n var Circle = drawing.Circle;\n var Group$6 = DrawingGroup;\n var Path$6 = DrawingPath;\n var RadialPointer = Pointer.extend({\n setAngle: function (angle) {\n this.elements.transform(transform().rotate(angle, this.center));\n },\n repaint: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var oldAngle = scale.slotAngle(options._oldValue);\n var newAngle = scale.slotAngle(options.value);\n if (options.animation.transitions === false) {\n this.setAngle(newAngle);\n } else {\n new RadialPointerAnimation(this.elements, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n })).play();\n }\n },\n render: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var elements = new Group$6();\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n elements.append(this._renderNeedle(), this._renderCap());\n this.elements = elements;\n this.setAngle(DEGREE);\n return elements;\n },\n reflow: function (arc) {\n var center = this.center = arc.center;\n var length = limitValue(this.options.length || 1, 0.1, 1.5);\n var radius = this.radius = arc.getRadiusX() * length;\n var capSize = this.capSize = Math.round(radius * this.options.cap.size);\n this.bbox = Rect.fromPoints(new GeometryPoint(center.x - capSize, center.y - capSize), new GeometryPoint(center.x + capSize, center.y + capSize));\n },\n _renderNeedle: function () {\n var minorTickSize = this.scale.options.minorTicks.size;\n var center = this.center;\n var needleColor = this.options.color;\n var needlePath = new Path$6({\n fill: { color: needleColor },\n stroke: {\n color: needleColor,\n width: DEFAULT_LINE_WIDTH\n }\n });\n needlePath.moveTo(center.x + this.radius - minorTickSize, center.y).lineTo(center.x, center.y - this.capSize / 2).lineTo(center.x, center.y + this.capSize / 2).close();\n return needlePath;\n },\n _renderCap: function () {\n var options = this.options;\n var capColor = options.cap.color || options.color;\n var circle = new geometry.Circle(this.center, this.capSize);\n var cap = new Circle(circle, {\n fill: { color: capColor },\n stroke: { color: capColor }\n });\n return cap;\n }\n });\n setDefaultOptions(RadialPointer, {\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 var Group$4 = DrawingGroup;\n var RadialGauge = Gauge.extend({\n reflow: function (bbox) {\n var this$1 = this;\n var pointers = this.pointers;\n this.scale.reflow(bbox);\n this._initialPlotArea = this.scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(this$1.scale.arc);\n this$1._initialPlotArea = Rect.union(this$1._initialPlotArea, pointers[i].bbox);\n }\n this.fitScale(bbox);\n this.alignScale(bbox);\n this._buildVisual(this.gaugeArea, pointers, this.scale);\n this._draw();\n },\n _buildVisual: function (gaugeArea, pointers, scale) {\n var visuals = this._visuals = new Group$4();\n visuals.append(gaugeArea);\n visuals.append(scale.ticks);\n visuals.append(scale.ranges);\n this._buildPointers(pointers);\n visuals.append(scale.labelElements);\n },\n _buildPointers: function (pointers) {\n var this$1 = this;\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n current.render();\n this$1._visuals.append(current.elements);\n current.value(current.options.value);\n }\n },\n fitScale: function (bbox) {\n var this$1 = this;\n var arc = this.scale.arc;\n var plotAreaBox = this._initialPlotArea;\n var step = Math.abs(this.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 = this$1.getPlotBox(min, bbox, arc);\n if (0 <= minDiff && minDiff <= 2) {\n break;\n }\n }\n if (max !== mid) {\n maxDiff = this$1.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 = this$1.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 this$1 = this;\n var scale = this.scale;\n var pointers = this.pointers;\n var radius = arc.getRadiusX();\n var scaleArc = arc.clone();\n scaleArc.setRadiusX(radius + step).setRadiusY(radius + step);\n scale.arc = scaleArc;\n scale.reflow(bbox);\n this.plotBbox = scale.bbox;\n for (var i = 0; i < pointers.length; i++) {\n pointers[i].reflow(scaleArc);\n this$1.plotBbox = Rect.union(this$1.plotBbox, pointers[i].bbox);\n }\n return this.getDiff(this.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 this$1 = this;\n var plotBoxCenter = this.plotBbox.center();\n var boxCenter = bbox.center();\n var paddingX = plotBoxCenter.x - boxCenter.x;\n var paddingY = plotBoxCenter.y - boxCenter.y;\n var ref = this;\n var scale = ref.scale;\n var pointers = ref.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 this$1.plotBbox = Rect.union(scale.bbox, pointers[i].bbox);\n }\n },\n _createModel: function () {\n var this$1 = this;\n var options = this.options;\n var pointers = options.pointer;\n var scale = this.scale = new RadialScale(options.scale, this.contextService);\n this.pointers = [];\n var pointersArr = isArray(pointers) ? pointers : [pointers];\n for (var i = 0; i < pointersArr.length; i++) {\n var current = new RadialPointer(scale, deepExtend({}, pointersArr[i], { animation: { transitions: options.transitions } }));\n this$1.pointers.push(current);\n }\n }\n });\n setDefaultOptions(RadialGauge, {\n transitions: true,\n gaugeArea: { background: '' }\n });\n var ArcScale = RadialScale.extend({\n rangeSegments: function () {\n var ref = this.options;\n var min = ref.min;\n var max = ref.max;\n var rangePlaceholderColor = ref.rangePlaceholderColor;\n var rangeLineCap = ref.rangeLineCap;\n return [{\n from: min,\n to: max,\n color: rangePlaceholderColor,\n lineCap: rangeLineCap\n }];\n },\n hasRanges: function () {\n return true;\n },\n placeholderRangeAngle: function (angle) {\n var geometry$$1 = this.ranges.children[0].geometry();\n if (this.options.reverse) {\n geometry$$1.setEndAngle(angle);\n } else {\n geometry$$1.setStartAngle(angle);\n }\n },\n addRange: function (from, to, options) {\n var reverse = this.options.reverse;\n var startAngle = this.slotAngle(reverse ? to : from);\n var endAngle = this.slotAngle(reverse ? from : to);\n var range = this.createRange(startAngle, endAngle, this.getRangeRadius(), options);\n this.ranges.append(range);\n return range;\n }\n });\n setDefaultOptions(ArcScale, {\n min: 0,\n max: 100,\n majorTicks: { visible: false },\n minorTicks: { visible: false },\n labels: { visible: false },\n startAngle: 0,\n endAngle: 180,\n rangeLineCap: 'round'\n });\n var MAX_DURATION = 800;\n var RangePointerAnimation = Animation.extend({\n init: function (element, options) {\n Animation.fn.init.call(this, element, options);\n var animationOptions = this.options;\n var duration = Math.abs(animationOptions.newAngle - animationOptions.oldAngle) / animationOptions.duration * 1000;\n animationOptions.duration = limitValue(duration, ANGULAR_SPEED, MAX_DURATION);\n var startColor = element.elements.options.get('stroke.color');\n var color = element.currentColor();\n if (startColor !== color) {\n this.startColor = new kendo.Color(startColor);\n this.color = new kendo.Color(color);\n }\n },\n step: function (pos) {\n var ref = this;\n var options = ref.options;\n var startColor = ref.startColor;\n var color = ref.color;\n var angle = interpolateValue(options.oldAngle, options.newAngle, pos);\n this.element.angle(angle);\n if (color) {\n var r = round(interpolateValue(startColor.r, color.r, pos));\n var g = round(interpolateValue(startColor.g, color.g, pos));\n var b = round(interpolateValue(startColor.b, color.b, pos));\n this.element.stroke(new kendo.Color(r, g, b).toHex());\n }\n }\n });\n setDefaultOptions(RangePointerAnimation, {\n easing: LINEAR,\n duration: ANGULAR_SPEED\n });\n AnimationFactory.current.register(RADIAL_RANGE_POINTER, RangePointerAnimation);\n var RangePointer = Pointer.extend({\n repaint: function () {\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n var oldAngle = scale.slotAngle(options._oldValue);\n var newAngle = scale.slotAngle(options.value);\n if (this.animation) {\n this.animation.abort();\n }\n if (options.animation.transitions === false) {\n this.angle(newAngle);\n this.stroke(this.currentColor());\n } else {\n this.animation = new RangePointerAnimation(this, deepExtend(options.animation, {\n oldAngle: oldAngle,\n newAngle: newAngle\n }));\n this.animation.play();\n }\n },\n angle: function (value) {\n var geometry$$1 = this.elements.geometry();\n if (this.scale.options.reverse) {\n geometry$$1.setStartAngle(value);\n } else {\n geometry$$1.setEndAngle(value);\n }\n this.scale.placeholderRangeAngle(value);\n },\n stroke: function (value) {\n this.elements.stroke(value);\n },\n render: function () {\n if (this.elements) {\n return;\n }\n var ref = this;\n var scale = ref.scale;\n var options = ref.options;\n if (options.animation !== false) {\n deepExtend(options.animation, {\n startAngle: 0,\n center: scale.arc.center,\n reverse: scale.options.reverse\n });\n }\n this.elements = scale.addRange(scale.options.min, this.options.value, {\n color: this.currentColor(),\n opacity: options.opacity,\n lineCap: scale.options.rangeLineCap\n });\n },\n currentColor: function () {\n var ref = this.scale.options;\n var min = ref.min;\n var max = ref.max;\n var ref$1 = this.options;\n var colors = ref$1.colors;\n var color = ref$1.color;\n var value = ref$1.value;\n var currentValue = dataviz.isNumber(value) ? value : min;\n if (colors) {\n for (var idx = 0; idx < colors.length; idx++) {\n var ref$2 = colors[idx];\n var rangeColor = ref$2.color;\n var from = ref$2.from;\n if (from === void 0) {\n from = min;\n }\n var to = ref$2.to;\n if (to === void 0) {\n to = max;\n }\n if (from <= currentValue && currentValue <= to) {\n return rangeColor;\n }\n }\n }\n return color;\n },\n reflow: function () {\n this.render();\n this.bbox = this.elements.bbox();\n }\n });\n setDefaultOptions(RangePointer, {\n animation: {\n type: RADIAL_RANGE_POINTER,\n duration: ANGULAR_SPEED\n }\n });\n var ArcGauge = RadialGauge.extend({\n _initTheme: function (theme) {\n RadialGauge.fn._initTheme.call(this, theme);\n this.options.color = this.options.color || (this.theme.pointer || {}).color;\n },\n _createModel: function () {\n var options = this.options;\n var scale = this.scale = new ArcScale(options.scale, this.contextService);\n var pointer = new RangePointer(scale, deepExtend({}, {\n colors: options.colors,\n color: options.color,\n value: options.value,\n opacity: options.opacity,\n animation: { transitions: options.transitions }\n }));\n this.pointers = [pointer];\n },\n _buildPointers: function (pointers) {\n for (var i = 0; i < pointers.length; i++) {\n var current = pointers[i];\n current.render();\n current.value(current.options.value);\n }\n },\n _setValueOptions: function (value) {\n this.options.value = value;\n },\n currentColor: function () {\n var pointer = this.pointers[0];\n if (pointer) {\n return pointer.currentColor();\n }\n },\n centerLabelPosition: function (width, height) {\n var size = this.getSize();\n var center = this.scale.arc.center;\n var left = center.x - width / 2;\n var top = center.y - height / 2;\n if (width < size.width) {\n var right = left + width;\n left = Math.max(left, 0);\n if (right > size.width) {\n left -= right - size.width;\n }\n }\n if (height < size.height) {\n var bbox = this.scale.bbox;\n var yLimit = bbox.bottomRight().y;\n var bottom = top + height;\n top = Math.max(top, bbox.origin.y);\n if (bottom > yLimit) {\n top -= bottom - yLimit;\n }\n }\n return {\n left: left,\n top: top\n };\n }\n });\n var defaultStartAngle = 90;\n var CircularGauge = ArcGauge.extend({\n _createModel: function () {\n var scaleOptions = this.options.scale;\n if (typeof scaleOptions.startAngle !== 'number') {\n scaleOptions.startAngle = defaultStartAngle;\n }\n scaleOptions.endAngle = scaleOptions.startAngle + 360;\n ArcGauge.fn._createModel.call(this);\n }\n });\n kendo.deepExtend(kendo.dataviz, {\n Gauge: Gauge,\n LinearGauge: LinearGauge,\n LinearPointer: LinearPointer,\n ArrowLinearPointer: ArrowLinearPointer,\n BarLinearPointer: BarLinearPointer,\n LinearScale: LinearScale,\n RadialGauge: RadialGauge,\n RadialPointer: RadialPointer,\n RadialScale: RadialScale,\n ArcGauge: ArcGauge,\n RangePointer: RangePointer,\n ArcScale: ArcScale,\n CircularGauge: CircularGauge\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/gauge/main', ['dataviz/gauge/kendo-gauges'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var dataviz = kendo.dataviz;\n var LinearGauge = dataviz.LinearGauge;\n var RadialGauge = dataviz.RadialGauge;\n var ArcGauge = dataviz.ArcGauge;\n var CircularGauge = dataviz.CircularGauge;\n var draw = kendo.drawing;\n function themeOptions(options) {\n var themes = dataviz.ui.themes || {};\n var themeName = options.theme || '';\n var lowerName = themeName.toLowerCase();\n if (dataviz.SASS_THEMES.indexOf(lowerName) != -1) {\n return dataviz.autoTheme().gauge;\n }\n return (themes[themeName] || themes[lowerName] || {}).gauge;\n }\n var Gauge = Widget.extend({\n init: function (element, userOptions) {\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(this, element);\n this.options = kendo.deepExtend(this.options, userOptions);\n this.wrapper = this.element;\n this._createInstance();\n this.element.addClass('k-gauge');\n kendo.notify(this, dataviz.ui);\n },\n options: {\n theme: 'default',\n renderAs: '',\n pointer: {},\n scale: {},\n gaugeArea: { background: '' },\n transitions: true\n },\n setOptions: function (options) {\n this._instance.setOptions(options, themeOptions(options));\n this._copyFields();\n },\n redraw: function () {\n this._instance.redraw();\n this._copyFields();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this._instance.destroy();\n },\n _createInstance: function () {\n var gaugeType = this._gaugeType();\n this._instance = new gaugeType(this.element[0], this.options, themeOptions(this.options));\n this._copyFields();\n },\n _copyFields: function () {\n this._originalOptions = this._instance._originalOptions;\n this.options = this._instance.options;\n this.surface = this._instance.surface;\n this.bbox = this._instance.bbox;\n this.gaugeArea = this._instance.gaugeArea;\n this.pointers = this._instance.pointers;\n this.scale = this._instance.scale;\n },\n _resize: function () {\n this._instance.resize();\n }\n });\n var proxyMembers = [\n 'getSize',\n 'value',\n 'allValues',\n 'exportVisual'\n ];\n function createProxyMember(name) {\n Gauge.fn[name] = function () {\n return this._instance[name].apply(this._instance, arguments);\n };\n }\n for (var idx = 0; idx < proxyMembers.length; idx++) {\n createProxyMember(proxyMembers[idx]);\n }\n dataviz.ExportMixin.extend(Gauge.fn);\n var RadialGaugeWidget = Gauge.extend({\n options: { name: 'RadialGauge' },\n _gaugeType: function () {\n return RadialGauge;\n }\n });\n var LinearGaugeWidget = Gauge.extend({\n options: {\n name: 'LinearGauge',\n scale: { vertical: true }\n },\n _gaugeType: function () {\n return LinearGauge;\n }\n });\n var ArcGaugeWidget = Gauge.extend({\n init: function (element, userOptions) {\n Gauge.fn.init.call(this, element, userOptions);\n this.element.css('position', 'relative');\n this.element.addClass('k-arcgauge');\n this._centerTemplate();\n },\n options: { name: 'ArcGauge' },\n setOptions: function (options) {\n Gauge.fn.setOptions.call(this, options);\n this._centerTemplate();\n },\n redraw: function () {\n Gauge.fn.redraw.call(this);\n this._centerTemplate();\n },\n value: function (value) {\n var instance = this._instance;\n if (arguments.length === 0) {\n return instance.value();\n }\n instance.value(value);\n this._centerTemplate();\n },\n destroy: function () {\n Gauge.fn.destroy.call(this);\n delete this._centerElement;\n },\n exportVisual: function () {\n if (this._centerElement) {\n return false;\n }\n return Gauge.fn.exportVisual.call(this);\n },\n _resize: function () {\n this._instance.resize();\n this._centerTemplate();\n },\n _centerTemplate: function () {\n if (this.options.centerTemplate) {\n var template = kendo.template(this.options.centerTemplate);\n var instance = this._instance;\n var centerElement = this._getCenterElement();\n centerElement.html(template({\n color: instance.currentColor(),\n value: instance.value()\n }));\n var position = instance.centerLabelPosition(centerElement.width(), centerElement.height());\n centerElement.css(position);\n } else if (this._centerElement) {\n this._centerElement.remove();\n this._centerElement = null;\n }\n },\n _getCenterElement: function () {\n var centerElement = this._centerElement;\n if (!centerElement) {\n centerElement = this._centerElement = $('
    ').addClass('k-arcgauge-label');\n this.element.append(centerElement);\n }\n return centerElement;\n },\n _gaugeType: function () {\n return ArcGauge;\n }\n });\n var CircularGaugeWidget = ArcGaugeWidget.extend({\n options: { name: 'CircularGauge' },\n _gaugeType: function () {\n return CircularGauge;\n }\n });\n function createExportMethod(name) {\n ArcGaugeWidget.fn[name] = function (options) {\n var gauge = this;\n var method = draw[name];\n if (!gauge._centerElement) {\n return method(gauge.exportVisual(), options);\n }\n return draw.drawDOM(gauge.element).then(function (visual) {\n return method(visual, options);\n });\n };\n }\n var exportMethods = [\n 'exportSVG',\n 'exportImage',\n 'exportPDF'\n ];\n for (idx = 0; idx < exportMethods.length; idx++) {\n createExportMethod(exportMethods[idx]);\n }\n dataviz.ui.plugin(LinearGaugeWidget);\n dataviz.ui.plugin(RadialGaugeWidget);\n dataviz.ui.plugin(ArcGaugeWidget);\n dataviz.ui.plugin(CircularGaugeWidget);\n kendo.deepExtend(dataviz, {\n Gauge: Gauge,\n LinearGauge: LinearGaugeWidget,\n RadialGauge: RadialGaugeWidget,\n ArcGauge: ArcGaugeWidget,\n CircularGauge: CircularGaugeWidget\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.gauge', [\n 'dataviz/gauge/main',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.gauge',\n name: 'Gauge',\n category: 'dataviz',\n description: 'Linear, Radial and Arc gauges.',\n depends: [\n 'dataviz.core',\n 'dataviz.themes'\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.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, IMAGE = 'image', SWISS_QR = 'swiss', crossPattern = [\n [\n 0,\n 1\n ],\n [\n 1,\n 1\n ],\n [\n 1,\n 2\n ],\n [\n 2,\n 2\n ],\n [\n 2,\n 1\n ],\n [\n 3,\n 1\n ],\n [\n 3,\n 0\n ],\n [\n 2,\n 0\n ],\n [\n 2,\n -1\n ],\n [\n 1,\n -1\n ],\n [\n 1,\n 0\n ]\n ], squarePattern = [\n [\n 0,\n 1\n ],\n [\n 1,\n 1\n ],\n [\n 1,\n 0\n ]\n ], DEFAULT_LOGO_SIZE = 7;\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.surface.resize();\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 if (that._hasCustomLogo()) {\n visual.append(that._renderLogo(size, baseUnit));\n } else if (that._isSwiss()) {\n visual.append(that._renderSwissCode(size, baseUnit));\n }\n }\n return visual;\n },\n _renderLogo: function name(qrSize, baseUnit) {\n var image;\n var imageRect;\n var center = round(qrSize / 2);\n var logoSize = this._getLogoSize(baseUnit * DEFAULT_LOGO_SIZE);\n var logoUrl = this.options.overlay.imageUrl;\n var position = {\n x: center - logoSize.width / 2,\n y: center - logoSize.height / 2\n };\n imageRect = new kendo.geometry.Rect(new kendo.geometry.Point(position.x, position.y), new kendo.geometry.Size(logoSize.width, logoSize.height));\n image = new draw.Image(logoUrl, imageRect);\n return image;\n },\n _renderSwissCode: function (qrSize, baseUnit) {\n var logoSize = this._getLogoSize(baseUnit * DEFAULT_LOGO_SIZE);\n logoSize = Math.max(logoSize.width, logoSize.height);\n var crossSize = logoSize / 4;\n var crossOffset = crossSize / 2;\n var center = qrSize / 2;\n var start = {};\n var visual = new draw.Group();\n start.x = start.y = Math.ceil(center - baseUnit - logoSize / 2);\n visual.append(this._renderShape(start, Math.ceil(logoSize + baseUnit * 2), squarePattern, '#fff'));\n start.x = start.y = center - logoSize / 2;\n visual.append(this._renderShape(start, logoSize, squarePattern, this.options.color));\n start.x = center + crossOffset - logoSize / 2;\n start.y = center + crossOffset + crossSize - logoSize / 2;\n visual.append(this._renderShape(start, crossSize, crossPattern, '#fff'));\n return visual;\n },\n _renderShape: function (start, step, pattern, color) {\n var path = new draw.MultiPath({\n fill: { color: color },\n stroke: null\n });\n path.moveTo(start.x, start.y);\n for (var i = 0; i < pattern.length; i++) {\n path.lineTo(start.x + step * pattern[i][0], start.y + step * pattern[i][1]);\n }\n path.close();\n return path;\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 overlay: {\n type: IMAGE,\n imageUrl: '',\n width: 0,\n height: 0\n }\n },\n _hasCustomLogo: function () {\n return !!this.options.overlay.imageUrl;\n },\n _isSwiss: function () {\n return this.options.overlay.type === SWISS_QR;\n },\n _getLogoSize: function (defautLogoSize) {\n var width = this.options.overlay.width;\n var height = this.options.overlay.height;\n if (!width && !height) {\n width = height = defautLogoSize;\n } else if (width && !height) {\n height = width;\n } else if (!width && height) {\n width = height;\n }\n return {\n width: width,\n height: height\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 clean: function () {\n if (this.selection) {\n this.selection.destroy();\n this.selection = null;\n }\n if (this.hint) {\n this.hint.destroy();\n this.hint = null;\n }\n },\n destroy: function () {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n this.clean();\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.roundedRange();\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 if (axis.categoriesCount() === 0) {\n return;\n }\n this.clean();\n axisClone.box = axis.box;\n 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 (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.roundedRange();\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.clearSeriesPointsCache();\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.roundedRange();\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 return;\n }\n var mainAxis = this.mainAxis();\n var args = {\n from: select.from,\n to: select.to\n };\n if (mainAxis.options.type !== 'category') {\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 args.from = dataviz.addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit);\n args.to = dataviz.addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit);\n }\n this.chart.trigger('navigatorFilter', args);\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 mainAxis = this.mainAxis();\n var delta = e.delta;\n if (!selection) {\n return;\n }\n var fromIx = mainAxis.categoryIndex(selection.options.from);\n var toIx = mainAxis.categoryIndex(selection.options.to);\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 labels: { position: '' },\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 noTransitionsRedraw: function () {\n var transitions = this.options.transitions;\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n },\n _resize: function () {\n this.noTransitionsRedraw();\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.clean();\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 _stopChartHandlers: function (e) {\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n return Chart.fn._stopChartHandlers.call(this, e) || pane && pane.options.name === NAVIGATOR_PANE;\n },\n _toggleDragZoomEvents: function () {\n if (!this._dragZoomEnabled) {\n this.element.style.touchAction = 'none';\n this._dragZoomEnabled = true;\n }\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 if (this.surface) {\n this.surface.resize();\n }\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.categoriesCount() * (!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-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-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 this._deactivate();\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _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, DEFAULT_ZOOM_RATE = 1;\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(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 point;\n var x;\n var y;\n var offset = this.element.offset();\n if (e.x || e.y) {\n var field = 'location';\n x = e.x[field] - offset.left;\n y = e.y[field] - offset.top;\n point = new g.Point(x, y);\n } else {\n var event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n point = new g.Point(x, y);\n }\n return point;\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 supportDoubleTap: true\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 scroller.userEvents.bind('doubleTap', proxy(this._doubleTap, this));\n scroller.userEvents.bind('tap', proxy(this._tap, 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 _tap: 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 _doubleTap: function (e) {\n var options = this.options;\n if (options.zoomable !== false) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\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 _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, 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 },\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, ns = '.kendoToolBar', 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', SPACER_CLASS = 'k-spacer', SPACER = 'spacer', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', HIDDEN = 'k-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ARIA_DISABLED = 'aria-disabled', ARIA_PRESSED = 'aria-pressed', 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);\n this.element.removeClass(HIDDEN);\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass(HIDDEN);\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.element.attr(ARIA_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 && kendo.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 if (this.options.togglable) {\n this.element.attr(ARIA_PRESSED, selected);\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' + ns, '.' + 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 + ns, '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 + ns, '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.element.attr(ARIA_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);\n this.element.addClass(HIDDEN);\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN);\n this.element.removeClass(HIDDEN);\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({ isChild: true }, 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 isChild: true\n }, items[i], { click: options.click }), 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 ToolBarSpacer = 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 element.addClass(SPACER_CLASS);\n element.data({ type: SPACER });\n }\n });\n kendo.toolbar.registerComponent(SPACER, ToolBarSpacer);\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.length && element.is('.' + OVERFLOW_ANCHOR)) {\n return element;\n }\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';\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 if (options.resizable) {\n that._shrink(that.element.innerWidth());\n }\n }\n that.userEvents = new kendo.UserEvents(document.documentElement, {\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 + ns, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK + ns, +'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(ns, '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(ns, '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 || options.type === SPACER) {\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 var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\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 buttonGroupInstance = item.overflow.getParentGroup();\n item.overflow.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\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 var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.show();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\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 buttonGroupInstance = item.overflow.getParentGroup();\n item.toolbar.show();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\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' + ns, '.' + 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 var paddingEnd = this._isRtl ? 'padding-left' : 'padding-right';\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 this.wrapper.css(paddingEnd, this.overflowAnchor.outerWidth(true));\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n this.wrapper.css(paddingEnd, '');\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 item: item\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 item: item\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' + ns, 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 if (element.length) {\n element[0].focus();\n }\n }).on('keydown' + ns, 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, isOnlyOverflowAnchor = false;\n if (!items.not('.' + OVERFLOW_ANCHOR).length) {\n isOnlyOverflowAnchor = true;\n }\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR) && !isOnlyOverflowAnchor) {\n var lastItemNotOverflowAnchor = items.last();\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (lastItemNotOverflowAnchor.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' && !isOnlyOverflowAnchor) {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus || isOnlyOverflowAnchor && e.shiftKey) {\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 if (keyCode === keys.SPACEBAR) {\n e.preventDefault();\n }\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n this.userEvents.trigger('tap', { target: target });\n } else if (keyCode === keys.SPACEBAR) {\n this.userEvents.trigger('tap', { target: target });\n }\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 + ', .' + SPACER_CLASS + ')').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.addClass(HIDDEN);\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 item.removeClass(HIDDEN);\n var itemOuterWidth = outerWidth(item, true);\n item.addClass(HIDDEN);\n if (item.length && containerWidth > this._childrenWidth() + itemOuterWidth) {\n item.removeClass(HIDDEN);\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.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerHeight = kendo._outerHeight, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', GROUPHEADER = '.k-group-header', ITEMSELECTOR = '.k-item', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', BLUR = 'blur', FOCUS = 'focus', FOCUSOUT = 'focusout', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': [\n 'DropDownList',\n 'MultiColumnComboBox'\n ],\n 'DropDownList': [\n 'ComboBox',\n 'MultiColumnComboBox'\n ],\n 'MultiColumnComboBox': [\n 'ComboBox',\n 'DropDownList'\n ]\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('
          ').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('
          ').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n id = element.attr(ID);\n if (!id) {\n id = kendo.guid();\n }\n that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\n if (options.columns && options.columns.length) {\n that.ul.removeClass('k-list').addClass('k-grid-list');\n that._columnsHeader();\n }\n that._header();\n that._noData();\n that._footer();\n that._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n footerTemplate: '',\n headerTemplate: '',\n noDataTemplate: true,\n messages: {\n 'noData': 'No data found.',\n 'clear': 'clear'\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (options.columns && options.columns.length) {\n this._columnsHeader();\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\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 _header: function () {\n var list = this;\n var header = $(list.header);\n var template = list.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n list.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n list.header = header[0] ? header : null;\n list.list.prepend(header);\n this._angularElement(list.header, 'compile');\n },\n _columnsHeader: function () {\n var list = this;\n var columnsHeader = $(list.columnsHeader);\n this._angularElement(columnsHeader, 'cleanup');\n kendo.destroy(columnsHeader);\n columnsHeader.remove();\n var header = '
          ';\n var colGroup = '';\n var row = '';\n for (var idx = 0; idx < this.options.columns.length; idx++) {\n var currentColumn = this.options.columns[idx];\n var title = currentColumn.title || currentColumn.field || '';\n var template = currentColumn.headerTemplate || title;\n var columnsHeaderTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n var currentWidth = currentColumn.width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n colGroup += '';\n row += '';\n }\n colGroup += '';\n row += '';\n header += colGroup;\n header += row;\n header += '
          ';\n row += columnsHeaderTemplate(currentColumn);\n row += '
          ';\n list.columnsHeader = columnsHeader = $(header);\n list.list.prepend(columnsHeader);\n this._angularElement(list.columnsHeader, 'compile');\n },\n _noData: function () {\n var list = this;\n var noData = $(list.noData);\n var template = list.options.noDataTemplate === true ? list.options.messages.noData : list.options.noDataTemplate;\n list.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n list.noData = null;\n return;\n }\n list.noData = $('
          ').appendTo(list.list);\n list.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _footer: function () {\n var list = this;\n var footer = $(list.footer);\n var template = list.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n list.footer = null;\n return;\n }\n list.footer = $('
          ').appendTo(list.list);\n list.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _listOptions: function (options) {\n var that = this;\n var currentOptions = that.options;\n var virtual = currentOptions.virtual;\n var changeEventOption = { change: proxy(that._listChange, that) };\n var listBoundHandler = proxy(that._listBound, that);\n var focusedElm = that._focused;\n var inputId = that.element.attr('id');\n var labelElm = $('label[for=\"' + that.element.attr('id') + '\"]');\n var labelledBy = focusedElm.attr('aria-labelledby');\n if (!labelledBy && labelElm.length) {\n labelledBy = labelElm.attr('id') || that._generateLabelId(labelElm, inputId || kendo.guid());\n }\n virtual = typeof virtual === 'object' ? virtual : {};\n options = $.extend({\n autoBind: false,\n selectable: true,\n dataSource: that.dataSource,\n click: proxy(that._click, that),\n activate: proxy(that._activateItem, that),\n columns: currentOptions.columns,\n deactivate: proxy(that._deactivateItem, that),\n dataBinding: function () {\n that.trigger('dataBinding');\n },\n dataBound: listBoundHandler,\n height: currentOptions.height,\n dataValueField: currentOptions.dataValueField,\n dataTextField: currentOptions.dataTextField,\n groupTemplate: currentOptions.groupTemplate,\n fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n template: currentOptions.template,\n ariaLabel: focusedElm.attr('aria-label'),\n ariaLabelledBy: labelledBy\n }, options, virtual, changeEventOption);\n if (!options.template) {\n options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n }\n if (currentOptions.$angular) {\n options.$angular = currentOptions.$angular;\n }\n return options;\n },\n _initList: function () {\n var that = this;\n var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n if (!that.options.virtual) {\n that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n } else {\n that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n }\n that.listView.bind('listBound', proxy(that._listBound, that));\n that._setListValue();\n },\n _setListValue: function (value) {\n value = value || this.options.value;\n if (value !== undefined) {\n this.listView.value(value).done(proxy(this._updateSelectionState, this));\n }\n },\n _updateSelectionState: $.noop,\n _listMousedown: function (e) {\n if (!this.filterInput || this.filterInput[0] !== e.target) {\n e.preventDefault();\n }\n },\n _isFilterEnabled: function () {\n var filter = this.options.filter;\n return filter && filter !== 'none';\n },\n _hideClear: function () {\n var list = this;\n if (list._clear) {\n list._clear.addClass(HIDDENCLASS);\n }\n },\n _showClear: function () {\n if (this._clear) {\n this._clear.removeClass(HIDDENCLASS);\n }\n },\n _clearValue: function () {\n this._clearText();\n this._accessor('');\n this.listView.value([]);\n if (this._isSelect) {\n this._customOption = undefined;\n }\n if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n this._filter({\n word: '',\n open: false\n });\n if (this.options.highlightFirst) {\n this.listView.focus(0);\n }\n }\n this._change();\n },\n _clearText: function () {\n this.text('');\n },\n _clearFilter: function () {\n if (!this.options.virtual) {\n this.listView.bound(false);\n }\n this._filterSource();\n },\n _filterSource: function (filter, force) {\n var that = this;\n var options = that.options;\n var isMultiColumnFiltering = options.filterFields && filter && filter.logic && filter.filters && filter.filters.length;\n var dataSource = that.dataSource;\n var expression = extend({}, dataSource.filter() || {});\n var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n var removed = removeFiltersForField(expression, options.dataTextField);\n this._clearFilterExpressions(expression);\n if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n return $.Deferred().reject().promise();\n }\n var newExpression = {\n filters: [],\n logic: 'and'\n };\n if (isMultiColumnFiltering) {\n newExpression.filters.push(filter);\n } else {\n this._pushFilterExpression(newExpression, filter);\n }\n if (isValidFilterExpr(expression)) {\n if (newExpression.logic === expression.logic) {\n newExpression.filters = newExpression.filters.concat(expression.filters);\n } else {\n newExpression.filters.push(expression);\n }\n }\n if (that._cascading) {\n this.listView.setDSFilter(newExpression);\n }\n var dataSourceState = extend({}, {\n page: resetPageSettings ? 1 : dataSource.page(),\n pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n sort: dataSource.sort(),\n filter: dataSource.filter(),\n group: dataSource.group(),\n aggregate: dataSource.aggregate()\n }, { filter: newExpression });\n return dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n },\n _pushFilterExpression: function (newExpression, filter) {\n if (isValidFilterExpr(filter) && filter.value !== '') {\n newExpression.filters.push(filter);\n }\n },\n _clearFilterExpressions: function (expression) {\n if (!expression.filters) {\n return;\n }\n var filtersToRemove;\n for (var i = 0; i < expression.filters.length; i++) {\n if ('fromFilter' in expression.filters[i]) {\n filtersToRemove = i;\n }\n }\n if (!isNaN(filtersToRemove)) {\n expression.filters.splice(filtersToRemove, 1);\n }\n },\n _angularElement: function (element, action) {\n if (!element) {\n return;\n }\n this.angular(action, function () {\n return { elements: element };\n });\n },\n _renderNoData: function () {\n var list = this;\n var noData = list.noData;\n if (!noData) {\n return;\n }\n this._angularElement(noData, 'cleanup');\n noData.children(':first').html(list.noDataTemplate({ instance: list }));\n this._angularElement(noData, 'compile');\n },\n _toggleNoData: function (show) {\n $(this.noData).toggle(show);\n },\n _toggleHeader: function (show) {\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n groupHeader.toggle(show);\n },\n _renderFooter: function () {\n var list = this;\n var footer = list.footer;\n if (!footer) {\n return;\n }\n this._angularElement(footer, 'cleanup');\n footer.html(list.footerTemplate({ instance: list }));\n this._angularElement(footer, 'compile');\n },\n _allowOpening: function () {\n return this.options.noDataTemplate || this.dataSource.flatView().length;\n },\n _initValue: function () {\n var that = this, value = that.options.value;\n if (value !== null) {\n that.element.val(value);\n } else {\n value = that._accessor();\n that.options.value = value;\n }\n that._old = value;\n },\n _ignoreCase: function () {\n var that = this, model = that.dataSource.reader.model, field;\n if (model && model.fields) {\n field = model.fields[that.options.dataTextField];\n if (field && field.type && field.type !== 'string') {\n that.options.ignoreCase = false;\n }\n }\n },\n _focus: function (candidate) {\n return this.listView.focus(candidate);\n },\n _filter: function (options) {\n var that = this;\n var widgetOptions = that.options;\n var word = options.word;\n var filterFields = widgetOptions.filterFields;\n var field = widgetOptions.dataTextField;\n var expression;\n if (filterFields && filterFields.length) {\n expression = {\n logic: 'or',\n filters: [],\n fromFilter: true\n };\n for (var i = 0; i < filterFields.length; i++) {\n this._pushFilterExpression(expression, that._buildExpression(word, filterFields[i]));\n }\n } else {\n expression = that._buildExpression(word, field);\n }\n that._open = options.open;\n that._filterSource(expression);\n },\n _buildExpression: function (value, field) {\n var that = this;\n var widgetOptions = that.options;\n var ignoreCase = widgetOptions.ignoreCase;\n var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n return {\n value: ignoreCase ? accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase() : value,\n field: field,\n operator: widgetOptions.filter,\n ignoreCase: ignoreCase\n };\n },\n _clearButton: function () {\n var list = this;\n var clearTitle = list.options.messages.clear;\n if (!list._clear) {\n list._clear = $('').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n }\n if (!list.options.clearButton) {\n list._clear.remove();\n }\n this._hideClear();\n },\n search: function (word) {\n var options = this.options;\n word = typeof word === 'string' ? word : this._inputValue();\n clearTimeout(this._typingTimeout);\n if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n this._state = 'filter';\n if (this.listView) {\n this.listView._emptySearch = !kendo.trim(word).length;\n }\n if (!this._isFilterEnabled()) {\n this._searchByWord(word);\n } else {\n this._filter({\n word: word,\n open: true\n });\n }\n }\n },\n current: function (candidate) {\n return this._focus(candidate);\n },\n items: function () {\n return this.ul[0].children;\n },\n destroy: function () {\n var that = this;\n var ns = that.ns;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that.listView.destroy();\n that.list.off(ns);\n that.popup.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n dataItem: function (index) {\n var that = this;\n if (index === undefined) {\n return that.listView.selectedDataItems()[0];\n }\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n index = $(that.items()).index(index);\n }\n return that.dataSource.flatView()[index];\n },\n _activateItem: function () {\n var current = this.listView.focus();\n if (current) {\n this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n }\n },\n _deactivateItem: function () {\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n },\n _accessors: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var getter = kendo.getter;\n var textField = element.attr(kendo.attr('text-field'));\n var valueField = element.attr(kendo.attr('value-field'));\n if (!options.dataTextField && textField) {\n options.dataTextField = textField;\n }\n if (!options.dataValueField && valueField) {\n options.dataValueField = valueField;\n }\n that._text = getter(options.dataTextField);\n that._value = getter(options.dataValueField);\n },\n _aria: function (id) {\n var that = this, options = that.options, element = that._focused, autocomplete;\n if (options.suggest !== undefined) {\n if (options.filter === 'none') {\n if (options.suggest === true) {\n autocomplete = 'inline';\n } else {\n autocomplete = 'none';\n }\n } else {\n if (options.suggest === true) {\n autocomplete = 'both';\n } else {\n autocomplete = 'list';\n }\n }\n element.attr('aria-autocomplete', autocomplete);\n }\n id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n element.attr({\n 'aria-owns': id,\n 'aria-controls': id\n });\n if (that.filterInput && that.filterInput.length > 0) {\n that.filterInput.attr('aria-controls', id);\n }\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n that._ariaLabel();\n },\n _ariaLabel: function () {\n var that = this;\n var focusedElm = that._focused;\n var inputElm = that.element;\n var inputId = inputElm.attr('id');\n var labelElm = $('label[for=\"' + inputId + '\"]');\n var ariaLabel = inputElm.attr('aria-label');\n var ariaLabelledBy = inputElm.attr('aria-labelledby');\n if (focusedElm === inputElm) {\n return;\n }\n if (ariaLabel) {\n focusedElm.attr('aria-label', ariaLabel);\n } else if (ariaLabelledBy) {\n focusedElm.attr('aria-labelledby', ariaLabelledBy);\n } else if (labelElm.length) {\n var labelId = labelElm.attr('id') || that._generateLabelId(labelElm, inputId || kendo.guid());\n focusedElm.attr('aria-labelledby', labelId);\n }\n },\n _generateLabelId: function (label, inputId) {\n var labelId = inputId + LABELIDPART;\n label.attr('id', labelId);\n return labelId;\n },\n _blur: function () {\n var that = this;\n that._change();\n that.close();\n that._userTriggered = false;\n },\n _isValueChanged: function (value) {\n return value !== unifyType(this._old, typeof value);\n },\n _change: function () {\n var that = this;\n var index = that.selectedIndex;\n var optionValue = that.options.value;\n var value = that.value();\n var trigger;\n if (that._isSelect && !that.listView.bound() && optionValue) {\n value = optionValue;\n }\n if (that._isValueChanged(value)) {\n trigger = true;\n } else if (that._valueBeforeCascade !== undefined && that._valueBeforeCascade !== unifyType(that._old, typeof that._valueBeforeCascade) && that._userTriggered) {\n trigger = true;\n } else if (index !== undefined && index !== that._oldIndex && !that.listView.isFiltered()) {\n trigger = true;\n }\n if (trigger) {\n if (that._old === null || that._old === '' || value === '') {\n that._valueBeforeCascade = that._old = value;\n } else {\n if (that.dataItem()) {\n that._valueBeforeCascade = that._old = that.options.dataValueField ? that.dataItem()[that.options.dataValueField] : that.dataItem();\n } else {\n that._valueBeforeCascade = that._old = null;\n }\n }\n that._oldIndex = index;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that.typing = false;\n },\n _data: function () {\n return this.dataSource.view();\n },\n _enable: function () {\n var that = this, options = that.options, disabled = that.element.is('[disabled]');\n if (options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (!options.enabled || disabled) {\n that.enable(false);\n } else {\n that.readonly(that.element.is('[readonly]'));\n }\n },\n _dataValue: function (dataItem) {\n var value = this._value(dataItem);\n if (value === undefined) {\n value = this._text(dataItem);\n }\n return value;\n },\n _offsetHeight: function () {\n var offsetHeight = 0;\n var siblings = this.listView.content.prevAll(':visible');\n siblings.each(function () {\n var element = $(this);\n offsetHeight += outerHeight(element, true);\n });\n return offsetHeight;\n },\n _height: function (length) {\n var that = this;\n var list = that.list;\n var height = that.options.height;\n var visible = that.popup.visible();\n var offsetTop;\n var popups;\n var footerHeight;\n if (length || that.options.noDataTemplate) {\n popups = list.add(list.parent('.k-animation-container')).show();\n if (!list.is(':visible')) {\n popups.hide();\n return;\n }\n height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n popups.height(height);\n if (height !== 'auto') {\n offsetTop = that._offsetHeight();\n footerHeight = outerHeight($(that.footer)) || 0;\n height = height - offsetTop - footerHeight;\n }\n that.listView.content.height(height);\n if (!visible) {\n popups.hide();\n }\n }\n return height;\n },\n _openHandler: function (e) {\n this._adjustListWidth();\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', true);\n this.ul.attr('aria-hidden', false);\n }\n },\n _adjustListWidth: function () {\n var that = this, list = that.list, width = list[0].style.width, wrapper = that.wrapper, computedStyle, computedWidth;\n if (!list.data(WIDTH) && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n if (computedStyle && browser.msie) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n if (list.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(list) - list.width());\n } else {\n width = computedWidth;\n }\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: that.options.autoWidth ? 'auto' : width,\n minWidth: width,\n whiteSpace: that.options.autoWidth ? 'nowrap' : 'normal'\n }).data(WIDTH, width);\n return true;\n },\n _closeHandler: function (e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', false);\n this.ul.attr('aria-hidden', true);\n }\n },\n _focusItem: function () {\n var listView = this.listView;\n var noFocusedItem = !listView.focus();\n var index = last(listView.select());\n if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else if (noFocusedItem) {\n listView.scrollToIndex(0);\n }\n },\n _calculateGroupPadding: function (height) {\n var li = this.ul.children('.k-first:first');\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n var padding = 0;\n var direction = 'right';\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n if (this.element.parents('.k-rtl').length) {\n direction = 'left';\n }\n padding += parseFloat(li.css('border-' + direction + '-width'), 10) + parseFloat(li.children('.k-group').css('padding-' + direction), 10);\n groupHeader.css('padding-' + direction, padding);\n }\n },\n _calculatePopupHeight: function (force) {\n var height = this._height(this.dataSource.flatView().length || force);\n this._calculateGroupPadding(height);\n this._calculateColumnsHeaderPadding(height);\n },\n _calculateColumnsHeaderPadding: function (height) {\n if (this.options.columns && this.options.columns.length) {\n var list = this;\n var isRtl = support.isRtl(list.wrapper);\n var scrollbar = kendo.support.scrollbar();\n list.columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', height !== 'auto' ? scrollbar : 0);\n }\n },\n _refreshScroll: function () {\n var listView = this.listView;\n var enableYScroll = listView.element.height() > listView.content.height();\n if (this.options.autoWidth) {\n listView.content.css({\n overflowX: 'hidden',\n overflowY: enableYScroll ? 'scroll' : 'auto'\n });\n }\n },\n _resizePopup: function (force) {\n if (this.options.virtual) {\n return;\n }\n if (!this.popup.element.is(':visible')) {\n this.popup.one('open', function (force) {\n return proxy(function () {\n this._calculatePopupHeight(force);\n }, this);\n }.call(this, force));\n this.popup.one('activate', proxy(this._refreshScroll, this));\n } else {\n this._calculatePopupHeight(force);\n }\n },\n _popup: function () {\n var list = this;\n list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n anchor: list.wrapper,\n open: proxy(list._openHandler, list),\n close: proxy(list._closeHandler, list),\n animation: list.options.animation,\n isRtl: support.isRtl(list.wrapper),\n autosize: list.options.autoWidth\n }));\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n that._cascadedValue = that.value();\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n if (typeof value !== 'boolean') {\n value = value.toString().toLowerCase() === 'true';\n }\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n that.listView._current = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._cascadeValue = that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _syncValueAndText: function () {\n return true;\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('
          ').parent();\n this.header = this.content.before('
          ').prev();\n this.bound(false);\n this._optionID = kendo.guid();\n this._selectedIndices = [];\n this._view = [];\n this._dataItems = [];\n this._values = [];\n var value = this.options.value;\n if (value) {\n this._values = $.isArray(value) ? value.slice(0) : [value];\n }\n this._getter();\n this._templates();\n this.setDataSource(this.options.dataSource);\n this._onScroll = proxy(function () {\n var that = this;\n clearTimeout(that._scrollId);\n that._scrollId = setTimeout(function () {\n that._renderHeader();\n }, 50);\n }, this);\n },\n options: {\n name: 'StaticList',\n dataValueField: null,\n valuePrimitive: false,\n selectable: true,\n template: null,\n groupTemplate: null,\n fixedGroupTemplate: null,\n ariaLabel: null,\n ariaLabelledBy: null\n },\n events: [\n 'click',\n CHANGE,\n 'activate',\n 'deactivate',\n 'dataBinding',\n 'dataBound',\n 'selectedItemChange'\n ],\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n value = that.value();\n that.value([]);\n that.bound(false);\n that.value(value);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n that.setDSFilter(dataSource.filter());\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that._fixedHeader();\n },\n _touchHandlers: function () {\n var that = this;\n var startY;\n var endY;\n var tapPosition = function (event) {\n return (event.originalEvent || event).changedTouches[0].pageY;\n };\n that.element.on('touchstart' + STATIC_LIST_NS, function (e) {\n startY = tapPosition(e);\n });\n that.element.on('touchend' + STATIC_LIST_NS, function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n endY = tapPosition(e);\n if (Math.abs(endY - startY) < 10) {\n that._touchTriggered = true;\n that._triggerClick($(e.target).closest(ITEMSELECTOR).get(0));\n }\n });\n },\n skip: function () {\n return this.dataSource.skip();\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._getter();\n this._templates();\n this._render();\n },\n destroy: function () {\n this.element.off(STATIC_LIST_NS);\n if (this._refreshHandler) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n }\n clearTimeout(this._scrollId);\n Widget.fn.destroy.call(this);\n },\n dataItemByIndex: function (index) {\n return this.dataSource.flatView()[index];\n },\n screenHeight: function () {\n return this.content[0].clientHeight;\n },\n scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n selectedDataItems: function (dataItems) {\n if (dataItems === undefined) {\n return this._dataItems.slice();\n }\n this._dataItems = dataItems;\n this._values = this._getValues(dataItems);\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n focusNext: function () {\n var current = this.focus();\n if (!current) {\n current = 0;\n } else {\n current = current.next();\n }\n this.focus(current);\n },\n focusPrev: function () {\n var current = this.focus();\n if (!current) {\n current = this.element[0].children.length - 1;\n } else {\n current = current.prev();\n }\n this.focus(current);\n },\n focusFirst: function () {\n this.focus(this.element[0].children[0]);\n },\n focusLast: function () {\n this.focus(last(this.element[0].children));\n },\n focus: function (candidate) {\n var that = this;\n var id = that._optionID;\n var hasCandidate;\n if (candidate === undefined) {\n return that._current;\n }\n candidate = last(that._get(candidate));\n candidate = $(this.element[0].children[candidate]);\n if (that._current) {\n that._current.removeClass(FOCUSED).removeAttr(ID);\n that.trigger('deactivate');\n }\n hasCandidate = !!candidate[0];\n if (hasCandidate) {\n candidate.addClass(FOCUSED);\n that.scroll(candidate);\n candidate.attr('id', id);\n }\n that._current = hasCandidate ? candidate : null;\n that.trigger('activate');\n },\n focusIndex: function () {\n return this.focus() ? this.focus().index() : undefined;\n },\n skipUpdate: function (skipUpdate) {\n this._skipUpdate = skipUpdate;\n },\n select: function (indices) {\n var that = this;\n var selectable = that.options.selectable;\n var singleSelection = selectable !== 'multiple' && selectable !== false;\n var selectedIndices = that._selectedIndices;\n var uiSelectedIndices = [this.element.find('.k-state-selected').index()];\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1 && $.inArray(last(indices), uiSelectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children(ITEMSELECTOR);\n },\n _click: function (e) {\n if (this._touchTriggered) {\n this._touchTriggered = false;\n return;\n }\n if (!e.isDefaultPrevented()) {\n this._triggerClick(e.currentTarget);\n }\n },\n _triggerClick: function (item) {\n if (!this.trigger('click', { item: $(item) })) {\n this.select(item);\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected').attr('aria-selected', false);\n var dataItem = this._view[index].item;\n var position = this._dataItemPosition(dataItem, this._values);\n removed.push({\n position: position,\n dataItem: dataItem\n });\n dataItems.splice(j, 1);\n selectedIndices.splice(j, 1);\n indices.splice(i, 1);\n values.splice(j, 1);\n removedIndices += 1;\n i -= 1;\n j -= 1;\n break;\n }\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectFiltered: function (indices) {\n var children = this.element[0].children;\n var dataItem, index, position;\n var removed = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = this._view[index].item;\n position = this._dataItemPosition(dataItem, this._values);\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n if (removed.length) {\n this.trigger(CHANGE, {\n added: [],\n removed: removed\n });\n return true;\n }\n return false;\n },\n _select: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var data = that._view;\n var dataItem, index;\n var added = [];\n var idx = 0;\n if (last(indices) !== -1) {\n that.focus(indices);\n }\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = data[index];\n if (index === -1 || !dataItem) {\n continue;\n }\n dataItem = dataItem.item;\n that._selectedIndices.push(index);\n that._dataItems.push(dataItem);\n that._values.push(that._valueGetter(dataItem));\n $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n added.push({ dataItem: dataItem });\n }\n return added;\n },\n getElementIndex: function (element) {\n return $(element).data('offset-index');\n },\n _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = this.getElementIndex(candidate);\n candidate = [candidate !== undefined ? candidate : -1];\n }\n return candidate;\n },\n _template: function () {\n var that = this;\n var options = that.options;\n var template = options.template;\n if (!template) {\n template = kendo.template('
        • ${' + kendo.expr(options.dataTextField, 'data') + '}
        • ', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '
        • ' + template(data) + '
        • ';\n };\n }\n return template;\n },\n _templates: function () {\n var template;\n var options = this.options;\n var templates = {\n template: options.template,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n template = templates[key];\n if (template && typeof template !== 'function') {\n templates[key] = kendo.template(template);\n }\n }\n this.templates = templates;\n },\n _normalizeIndices: function (indices) {\n var newIndices = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n if (indices[idx] !== undefined) {\n newIndices.push(indices[idx]);\n }\n }\n return newIndices;\n },\n _valueIndices: function (values, indices) {\n var data = this._view;\n var idx = 0;\n var index;\n indices = indices ? indices.slice() : [];\n if (!values.length) {\n return [];\n }\n for (; idx < data.length; idx++) {\n index = this._dataItemPosition(data[idx].item, values);\n if (index !== -1) {\n indices[index] = idx;\n }\n }\n return this._normalizeIndices(indices);\n },\n _firstVisibleItem: function () {\n var element = this.element[0];\n var content = this.content[0];\n var scrollTop = content.scrollTop;\n var itemHeight = $(element.children[0]).height();\n var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n var item = element.children[itemIndex] || element.lastChild;\n var forward = item.offsetTop < scrollTop;\n while (item) {\n if (forward) {\n if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n break;\n }\n item = item.nextSibling;\n } else {\n if (item.offsetTop <= scrollTop || !item.previousSibling) {\n break;\n }\n item = item.previousSibling;\n }\n }\n return this._view[$(item).data('offset-index')];\n },\n _fixedHeader: function () {\n if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n this.header.show();\n this.content.scroll(this._onScroll);\n } else {\n this.header.hide();\n this.content.off('scroll', this._onScroll);\n }\n },\n _renderHeader: function () {\n var template = this.templates.fixedGroupTemplate;\n if (!template) {\n return;\n }\n var visibleItem = this._firstVisibleItem();\n if (visibleItem && visibleItem.group.toString().length) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '
        • ';\n if (hasColumns) {\n item += this._renderColumns(dataItem);\n } else {\n item += this.templates.template(dataItem);\n }\n if (notFirstItem && context.newGroup) {\n if (hasColumns) {\n item += '
          ' + this.templates.groupTemplate(context.group) + '
          ';\n } else {\n item += '
          ' + this.templates.groupTemplate(context.group) + '
          ';\n }\n } else if (isGrouped && hasColumns) {\n item += '
          ';\n }\n return item + '
        • ';\n },\n _renderColumns: function (dataItem) {\n var item = '';\n for (var i = 0; i < this.options.columns.length; i++) {\n var currentWidth = this.options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '';\n item += this.templates['column' + i](dataItem);\n item += '';\n }\n return item;\n },\n _render: function () {\n var html = '';\n var i = 0;\n var idx = 0;\n var context;\n var dataContext = [];\n var view = this.dataSource.view();\n var values = this.value();\n var group, newGroup, j;\n var isGrouped = this.isGrouped();\n if (isGrouped) {\n for (i = 0; i < view.length; i++) {\n group = view[i];\n newGroup = true;\n for (j = 0; j < group.items.length; j++) {\n context = {\n selected: this._selected(group.items[j], values),\n item: group.items[j],\n group: group.value,\n newGroup: newGroup,\n isLastGroupedItem: j === group.items.length - 1,\n index: idx\n };\n dataContext[idx] = context;\n idx += 1;\n html += this._renderItem(context);\n newGroup = false;\n }\n }\n } else {\n for (i = 0; i < view.length; i++) {\n context = {\n selected: this._selected(view[i], values),\n item: view[i],\n index: i\n };\n dataContext[i] = context;\n html += this._renderItem(context);\n }\n }\n this._view = dataContext;\n this.element[0].innerHTML = html;\n if (isGrouped && dataContext.length) {\n this._renderHeader();\n }\n },\n _selected: function (dataItem, values) {\n var select = !this.isFiltered() || this.options.selectable === 'multiple';\n return select && this._dataItemPosition(dataItem, values) !== -1;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var skipUpdateOnBind = that.options.skipUpdateOnBind;\n var isItemChange = action === 'itemchange';\n var result;\n that.trigger('dataBinding');\n that._angularItems('cleanup');\n that._fixedHeader();\n that._render();\n that.bound(true);\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._dataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n } else if (that.isFiltered() || that._skipUpdate || that._emptySearch) {\n that.focus(0);\n if (that._skipUpdate) {\n that._skipUpdate = false;\n that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n }\n } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n that.value(that._values);\n }\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._angularItems('compile');\n that.trigger('dataBound');\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._bound;\n }\n this._bound = bound;\n },\n isGrouped: function () {\n return (this.dataSource.group() || []).length;\n }\n });\n ui.plugin(StaticList);\n function last(list) {\n return list[list.length - 1];\n }\n function getSelectedOption(select) {\n var index = select.selectedIndex;\n return index > -1 ? select.options[index] : {};\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isValidFilterExpr(expression) {\n if (!expression || $.isEmptyObject(expression)) {\n return false;\n }\n if (expression.filters && !expression.filters.length) {\n return false;\n }\n return true;\n }\n function removeFiltersForField(expression, field) {\n var filters;\n var found = false;\n if (expression.filters) {\n filters = $.grep(expression.filters, function (filter) {\n found = removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n if (!found && expression.filters.length !== filters.length) {\n found = true;\n }\n expression.filters = filters;\n }\n return found;\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.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('
          '), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n if (data.index === 0 && this.header && data.group) {\n this.header.html(templates.fixedGroupTemplate(data.group));\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index);\n if (this.options.columns && this.options.columns.length && data.item) {\n element.html(renderColumns(this.options, data.item, templates));\n } else {\n element.html(itemTemplate(data.item || {}));\n }\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-last', data.isLastGroupedItem);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('
          ').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\n }\n function renderColumns(options, dataItem, templates) {\n var item = '';\n for (var i = 0; i < options.columns.length; i++) {\n var currentWidth = options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '';\n item += templates['column' + i](dataItem);\n item += '';\n }\n return item;\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isActivePromise(promise) {\n return promise && promise.state() !== 'resolved';\n }\n var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('
          ').parent();\n that.wrapper = that.content.wrap('
          ').parent();\n that.header = that.content.before('
          ').prev();\n if (options.ariaLabel) {\n this.element.attr('aria-label', options.ariaLabel);\n } else if (options.ariaLabelledBy) {\n this.element.attr('aria-labelledby', options.ariaLabelledBy);\n }\n if (options.columns && options.columns.length) {\n that.element.removeClass(LIST);\n }\n that.element.on('mouseenter' + VIRTUAL_LIST_NS, 'li:not(.k-loading-item)', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + VIRTUAL_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._promisesList = [];\n that._optionID = kendo.guid();\n that._templates();\n that.setDataSource(options.dataSource);\n that.content.on('scroll' + VIRTUAL_LIST_NS, kendo.throttle(function () {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n that._selectable();\n },\n options: {\n name: 'VirtualList',\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: 'flat',\n selectable: false,\n value: [],\n dataValueField: null,\n template: '#:data#',\n placeholderTemplate: 'loading...',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n mapValueTo: 'index',\n valueMapper: null,\n ariaLabel: null,\n ariaLabelledBy: null\n },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n _highlightSelectedItems: function () {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n if (item.length) {\n item.addClass(SELECTED);\n }\n }\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind && !that._emptySearch) {\n that._selectingValue = true;\n that.bound(true);\n that.value(that._values, true).done(function () {\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._highlightSelectedItems();\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n that._fetching = false;\n },\n removeAt: function (position) {\n var value = this._values.splice(position, 1)[0];\n return {\n position: position,\n dataItem: this._removeSelectedDataItem(value)\n };\n },\n _removeSelectedDataItem: function (value) {\n var that = this, valueGetter = that._valueGetter;\n for (var idx in that._selectedDataItems) {\n if (valueGetter(that._selectedDataItems[idx]) === value) {\n that._selectedIndexes.splice(idx, 1);\n return that._selectedDataItems.splice(idx, 1)[0];\n }\n }\n },\n setValue: function (value) {\n this._values = toArray(value);\n },\n value: function (value, _forcePrefetch) {\n var that = this;\n if (value === undefined) {\n return that._values.slice();\n }\n if (value === null) {\n value = [];\n }\n value = toArray(value);\n if (!that._valueDeferred || that._valueDeferred.state() === 'resolved') {\n that._valueDeferred = $.Deferred();\n }\n var shouldClear = that.options.selectable === 'multiple' && that.select().length && value.length;\n if (shouldClear || !value.length) {\n that.select(-1);\n }\n that._values = value;\n if (that.bound() && !that._mute && !that._deferValueSet || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n return that._valueDeferred;\n },\n _checkValuesOrder: function (value) {\n if (this._removedAddedIndexes && this._removedAddedIndexes.length === value.length) {\n var newValue = this._removedAddedIndexes.slice();\n this._removedAddedIndexes = null;\n return newValue;\n }\n return value;\n },\n _prefetchByValue: function (value) {\n var that = this, dataView = that._dataView, valueGetter = that._valueGetter, mapValueTo = that.options.mapValueTo, item, match = false, forSelection = [];\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n if (typeof that.options.valueMapper === 'function') {\n that.options.valueMapper({\n value: this.options.selectable === 'multiple' ? value : value[0],\n success: function (response) {\n if (mapValueTo === 'index') {\n that.mapValueToIndex(response);\n } else if (mapValueTo === 'dataItem') {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n if (!that.value()[0]) {\n that.select([-1]);\n } else {\n that._selectingValue = false;\n that._triggerListBound();\n }\n }\n },\n mapValueToIndex: function (indexes) {\n if (indexes === undefined || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n this.select(indexes);\n },\n mapValueToDataItem: function (dataItems) {\n var removed, added;\n if (dataItems === undefined || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n added = $.map(dataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n this._selectedDataItems = dataItems;\n this._selectedIndexes = [];\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n this._selectedIndexes.push(this._getIndecies(item)[0]);\n item.addClass(SELECTED);\n }\n this._triggerChange(removed, added);\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n deferredRange: function (index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n var pages = high === low ? [high] : [\n low,\n high\n ];\n $.each(pages, function (_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n if (!existingRange || existingRange.end !== end) {\n deferred = $.Deferred();\n ranges[skip] = {\n end: end,\n deferred: deferred\n };\n dataSource._multiplePrefetch(skip, take, function () {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n defs.push(deferred);\n });\n $.when.apply($, defs).then(function () {\n result.resolve();\n });\n return result;\n },\n prefetch: function (indexes) {\n var that = this, take = this.itemCount, isEmptyList = !that._promisesList.length;\n if (!isActivePromise(that._activeDeferred)) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n $.each(indexes, function (_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function () {\n that._promisesList = [];\n that._activeDeferred.resolve();\n });\n }\n return that._activeDeferred;\n },\n _findDataItem: function (view, index) {\n var group;\n if (this.options.type === 'group') {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n return view[index];\n },\n _getRange: function (skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n dataItemByIndex: function (index) {\n var that = this;\n var take = that.itemCount;\n var skip = that._getSkip(index, take);\n var view = this._getRange(skip, take);\n if (!that._getRange(skip, take).length) {\n return null;\n }\n if (that.options.type === 'group') {\n kendo.ui.progress($(that.wrapper), true);\n that.mute(function () {\n that.dataSource.range(skip, take, function () {\n kendo.ui.progress($(that.wrapper), false);\n });\n view = that.dataSource.view();\n });\n }\n return that._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex - 1);\n },\n focusPrev: function () {\n var index = this._focusedIndex;\n var current;\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index += 1;\n this.focus(index);\n }\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n focusNext: function () {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index -= 1;\n this.focus(index);\n }\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n _triggerChange: function (removed, added) {\n removed = removed || [];\n added = added || [];\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n select: function (candidate) {\n var that = this, indices, initialIndices, singleSelection = that.options.selectable !== 'multiple', prefetchStarted = isActivePromise(that._activeDeferred), filtered = this.isFiltered(), isAlreadySelected, deferred, result, removed = [];\n if (candidate === undefined) {\n return that._selectedIndexes.slice();\n }\n if (!that._selectDeferred || that._selectDeferred.state() === 'resolved') {\n that._selectDeferred = $.Deferred();\n }\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n if (that._valueDeferred) {\n that._valueDeferred.resolve().promise();\n }\n return that._selectDeferred.resolve().promise();\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n initialIndices = indices;\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (singleSelection) {\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n var done = function () {\n var added = that._select(indices);\n if (initialIndices.length === indices.length || singleSelection) {\n that.focus(indices);\n }\n that._triggerChange(removed, added);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._selectDeferred.resolve();\n };\n deferred = that.prefetch(indices);\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n return that._selectDeferred.promise();\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._listCreated;\n }\n this._listCreated = bound;\n },\n mute: function (callback) {\n this._mute = true;\n proxy(callback(), this);\n this._mute = false;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = $.extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n skipUpdate: $.noop,\n _getElementByIndex: function (index) {\n return this.items().filter(function (idx, element) {\n return index === parseInt($(element).attr('data-offset-index'), 10);\n });\n },\n _getElementByDataItem: function (dataItem) {\n var dataView = this._dataView, valueGetter = this._valueGetter, element, match;\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : dataView[i].item && dataItem && valueGetter(dataView[i].item) == valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return element ? this._getElementByIndex(element.index) : $();\n },\n _clean: function () {\n this.result = undefined;\n this._lastScrollTop = undefined;\n this._skip = undefined;\n $(this.heightContainer).remove();\n this.heightContainer = undefined;\n this.element.empty();\n },\n _height: function () {\n var hasData = !!this.dataSource.view().length, height = this.options.height, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n return height;\n },\n setScreenHeight: function () {\n var height = this._height();\n this.content.height(height);\n this._screenHeight = height;\n },\n screenHeight: function () {\n return this._screenHeight;\n },\n _getElementLocation: function (index) {\n var scrollTop = this.content.scrollTop(), screenHeight = this._screenHeight, itemHeight = this.options.itemHeight, yPosition = index * itemHeight, yDownPostion = yPosition + itemHeight, screenEnd = scrollTop + screenHeight, position;\n if (yPosition === scrollTop - itemHeight || yDownPostion > scrollTop && yPosition < scrollTop) {\n position = 'top';\n } else if (yPosition === screenEnd || yPosition < screenEnd && screenEnd < yDownPostion) {\n position = 'bottom';\n } else if (yPosition >= scrollTop && yPosition <= scrollTop + (screenHeight - itemHeight)) {\n position = 'inScreen';\n } else {\n position = 'outScreen';\n }\n return position;\n },\n _templates: function () {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n if (typeof templates[key] !== 'function') {\n templates[key] = kendo.template(templates[key] || '');\n }\n }\n this.templates = templates;\n },\n _generateItems: function (element, count) {\n var items = [], item, itemHeight = this.options.itemHeight + 'px';\n while (count-- > 0) {\n item = document.createElement('li');\n item.tabIndex = -1;\n item.className = VIRTUALITEM + ' ' + ITEM;\n item.setAttribute('role', 'option');\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n element.appendChild(item);\n items.push(item);\n }\n return items;\n },\n _saveInitialRanges: function () {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = {\n end: ranges[i].end,\n deferred: deferred\n };\n }\n },\n _createList: function () {\n var that = this, content = that.content.get(0), options = that.options, dataSource = that.dataSource;\n if (that.bound()) {\n that._clean();\n }\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n that._items = that._generateItems(that.element[0], that.itemCount);\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? 'group' : 'flat';\n if (that.options.type === 'flat') {\n that.header.hide();\n } else {\n that.header.show();\n }\n that.getter = that._getter(function () {\n that._renderItems(true);\n });\n that._onScroll = function (scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n that._renderItems = that._whenChanged(scrollCallback(content, that._onScroll), syncList(that._reorderList(that._items, $.proxy(render, that))));\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n that._calculateColumnsHeaderPadding();\n },\n _setHeight: function (height) {\n var currentHeight, heightContainer = this.heightContainer;\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n if (height !== currentHeight) {\n heightContainer.innerHTML = '';\n while (height > 0) {\n var padHeight = Math.min(height, 250000);\n appendChild(heightContainer).style.height = padHeight + 'px';\n height -= padHeight;\n }\n }\n },\n _getter: function () {\n var lastRequestedRange = null, dataSource = this.dataSource, lastRangeStart = dataSource.skip(), type = this.options.type, pageSize = this.itemCount, flatGroups = {};\n if (dataSource.pageSize() < pageSize) {\n this.mute(function () {\n dataSource.pageSize(pageSize);\n });\n }\n return function (index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function () {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n that._getterDeferred = null;\n if (rangeStart <= firstItemIndex && firstItemIndex <= rangeStart + pageSize) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function () {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n var result;\n if (type === 'group') {\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({\n item: group.items[j],\n group: group.value\n });\n }\n }\n }\n result = flatGroups[rangeStart][index - rangeStart];\n } else {\n result = dataSource.view()[index - rangeStart];\n }\n return result;\n }\n };\n },\n _fixedHeader: function (scrollTop, list) {\n var group = this.currentVisibleGroup, itemHeight = this.options.itemHeight, firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight), firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n if (firstVisibleGroup !== group) {\n var fixedGroupText = firstVisibleGroup || '';\n this.header.html(this.templates.fixedGroupTemplate(fixedGroupText));\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n return list;\n },\n _itemMapper: function (item, index, value) {\n var listType = this.options.type, itemHeight = this.options.itemHeight, currentIndex = this._focusedIndex, selected = false, current = false, newGroup = false, group = null, match = false, valueGetter = this._valueGetter;\n if (listType === 'group') {\n if (item) {\n newGroup = index === 0 || this._currentGroup !== false && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (this.options.mapValueTo === 'dataItem' && this._selectedDataItems.length && item) {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n match = valueGetter(this._selectedDataItems[i]) === valueGetter(item);\n if (match) {\n selected = true;\n break;\n }\n }\n } else if (!this.isFiltered() && value.length && item) {\n for (var j = 0; j < value.length; j++) {\n match = isPrimitive(item) ? value[j] === item : value[j] === valueGetter(item);\n if (match) {\n value.splice(j, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = false;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n if (items[items.length - 1]) {\n items[items.length - 1].isLastGroupedItem = item.newGroup;\n }\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n if (this.dataItemByIndex(index)) {\n value = this._valueGetter(this.dataItemByIndex(index));\n }\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n that._values = that._checkValuesOrder(that._values);\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculateColumnsHeaderPadding: function () {\n if (this.options.columns && this.options.columns.length) {\n var isRtl = kendo.support.isRtl(this.wrapper);\n var scrollbar = kendo.support.scrollbar();\n var columnsHeader = this.content.parent().parent().find('.k-grid-header');\n var total = this.dataSource.total();\n columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', total ? scrollbar : 0);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\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.dropdownlist', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dropdownlist',\n name: 'DropDownList',\n category: 'web',\n description: 'The DropDownList widget displays a list of values and allows the selection of a single value from the list.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = '.kendoDropDownList', nsFocusEvent = ns + 'FocusEvent', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', CLICKEVENTS = 'click' + ns + ' touchend' + ns, HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, TABINDEX = 'tabindex', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', MSG_INVALID_OPTION_LABEL = 'The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel', proxy = $.proxy, OPEN = 'open', CLOSE = 'close';\n var DropDownList = Select.extend({\n init: function (element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n that._focusInputHandler = $.proxy(that._focusInput, that);\n that.optionLabel = $();\n that._optionLabel();\n that._inputTemplate();\n that._reset();\n that._prev = '';\n that._word = '';\n that._wrapper();\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n that._span();\n that._popup();\n that._mobile();\n that._dataSource();\n that._ignoreCase();\n that._filterHeader();\n that._aria();\n that.wrapper.attr('aria-live', 'polite');\n that._enable();\n that._attachFocusHandlers();\n that._oldIndex = that.selectedIndex = -1;\n if (index !== undefined) {\n options.index = index;\n }\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that.listView.one('dataBound', proxy(that._attachAriaActiveDescendant, that));\n that._cascade();\n that.one('set', function (e) {\n if (!e.sender.listView.bound() && that.hasOptionLabel()) {\n that._textAccessor(that._optionLabelText());\n }\n });\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (that.selectedIndex === -1) {\n text = options.text || '';\n if (!text) {\n optionLabel = options.optionLabel;\n if (optionLabel && options.index === 0) {\n text = optionLabel;\n } else if (that._isSelect) {\n text = element.children(':selected').text();\n }\n }\n that._textAccessor(text);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n kendo.notify(that);\n },\n options: {\n name: 'DropDownList',\n enabled: true,\n autoBind: true,\n index: 0,\n text: null,\n value: null,\n delay: 500,\n height: 200,\n dataTextField: '',\n dataValueField: '',\n optionLabel: '',\n cascadeFrom: '',\n cascadeFromField: '',\n cascadeFromParentField: '',\n ignoreCase: true,\n animation: {},\n filter: 'none',\n minLength: 1,\n enforceMinLength: false,\n virtual: false,\n template: null,\n valueTemplate: null,\n optionLabelTemplate: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n autoWidth: false,\n popup: null,\n filterTitle: null\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set',\n 'kendoKeydown'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(this._listOptions(options));\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n destroy: function () {\n var that = this;\n Select.fn.destroy.call(that);\n that.wrapper.off(ns);\n that.wrapper.off(nsFocusEvent);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n that.optionLabel.off();\n if (that.filterInput) {\n that.filterInput.off(nsFocusEvent);\n }\n },\n open: function () {\n var that = this;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n var listView = this.listView;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n that._open = true;\n that._state = 'rebind';\n if (that.filterInput) {\n that.filterInput.val('');\n that._prev = '';\n }\n if (that.filterInput && that.options.minLength !== 1 && !isFiltered) {\n that.refresh();\n that.popup.one('activate', that._focusInputHandler);\n that.wrapper.attr('aria-activedescendant', listView._optionID);\n that.popup.open();\n that._resizeFilterInput();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._focusFilter = true;\n that.popup.one('activate', that._focusInputHandler);\n that.popup._hovered = true;\n that.wrapper.attr('aria-activedescendant', listView._optionID);\n that.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n close: function () {\n this._attachAriaActiveDescendant();\n this.popup.close();\n },\n _attachAriaActiveDescendant: function () {\n var wrapper = this.wrapper, inputId = wrapper.find('.k-input').attr('id');\n wrapper.attr('aria-activedescendant', inputId);\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n if (!filterInput) {\n return;\n }\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n this._prevent = true;\n filterInput.css('display', 'none').css('width', this.popup.element.css('width')).css('display', 'inline-block');\n if (isInputActive) {\n filterInput.focus();\n kendo.caret(filterInput[0], caret);\n }\n this._prevent = originalPrevent;\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n current: function (candidate) {\n var current;\n if (candidate === undefined) {\n current = this.listView.focus();\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n return current;\n }\n this._focus(candidate);\n },\n dataItem: function (index) {\n var that = this;\n var dataItem = null;\n if (index === null) {\n return index;\n }\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n if (index.hasClass('k-list-optionlabel')) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n dataItem = that.dataSource.flatView()[index];\n }\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n return dataItem;\n },\n refresh: function () {\n this.listView.refresh();\n },\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text !== 'string') {\n that._textAccessor(text);\n return;\n }\n loweredText = ignoreCase ? text.toLowerCase() : text;\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n that._textAccessor(that.dataItem() || text);\n });\n } else {\n return that._textAccessor();\n }\n },\n _clearFilter: function () {\n $(this.filterInput).val('');\n Select.fn._clearFilter.call(this);\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n this.trigger('set', { value: value });\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n that._valueSetter = proxy(function () {\n that.value(value);\n }, that);\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n hasOptionLabel: function () {\n return this.optionLabel && !!this.optionLabel[0];\n },\n _optionLabel: function () {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n if (!template) {\n template = '#:';\n if (typeof optionLabel === 'string') {\n template += 'data';\n } else {\n template += kendo.expr(options.dataTextField, 'data');\n }\n template += '#';\n }\n if (typeof template !== 'function') {\n template = kendo.template(template);\n }\n that.optionLabelTemplate = template;\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('
          ').prependTo(that.list);\n }\n that.optionLabel.html(template(optionLabel)).off().on(CLICKEVENTS, proxy(that._click, that)).on(HOVEREVENTS, that._toggleHover);\n that.angular('compile', function () {\n return {\n elements: that.optionLabel,\n data: [{ dataItem: that._optionLabelDataItem() }]\n };\n });\n },\n _optionLabelText: function () {\n var optionLabel = this.options.optionLabel;\n return typeof optionLabel === 'string' ? optionLabel : this._text(optionLabel);\n },\n _optionLabelDataItem: function () {\n var that = this;\n var optionLabel = that.options.optionLabel;\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), '');\n }\n return undefined;\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = '';\n }\n optionLabel = '';\n }\n that._options(data, optionLabel, value);\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var dataItem;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup(true);\n that.popup.position();\n that._buildOptions(data);\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n that._open = false;\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value('');\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue || this._old && this._oldIndex === -1) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _filterPaste: function () {\n this._search();\n },\n _attachFocusHandlers: function () {\n var that = this;\n var wrapper = that.wrapper;\n wrapper.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n if (that.filterInput) {\n that.filterInput.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n }\n },\n _focusHandler: function () {\n this.wrapper.focus();\n },\n _focusinHandler: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n _focusoutHandler: function () {\n var that = this;\n var isIFrame = window.self !== window.top;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._prevent = false;\n this._toggle();\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.add(that.filterInput).off(ns);\n var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n wrapper.attr(TABINDEX, wrapper.data(TABINDEX)).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false).on('keydown' + ns, that, proxy(that._keydown, that)).on(kendo.support.mousedown + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n } else {\n wrapper.on('input' + ns, proxy(that._search, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n that._open = false;\n that._state = STATE_ACCEPT;\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n if (key === keys.SPACEBAR && !isInputActive) {\n that.toggle(!isPopupVisible);\n e.preventDefault();\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n that._focusElement(that.wrapper);\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n focusIndex = 1;\n } else {\n focusIndex = this.listView.focusNext();\n }\n return focusIndex;\n },\n _prevItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n focusIndex = this.listView.focusPrev();\n if (!this.listView.focus() && !this.options.virtual) {\n this._focus(this.optionLabel);\n }\n return focusIndex;\n },\n _focusItem: function () {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== 'dataItem')) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n this.listView.content.scrollTop(0);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '';\n this.filterInput = $('').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.options.filterTitle || this.element.attr('title'),\n role: 'searchbox',\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'list'\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', id = kendo.guid(), 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').addClass(DOMelement.className).removeClass('input-validation-error').css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': 'listbox',\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _openHandler: function (e) {\n this._adjustListWidth();\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this.wrapper.attr('aria-expanded', true);\n this.ul.attr('aria-hidden', false);\n }\n },\n _closeHandler: function (e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this.wrapper.attr('aria-expanded', false);\n this.ul.attr('aria-hidden', true);\n }\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('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', UNSELECT = 'unselect', 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,label.k-checkbox-label.k-no-text,.k-icon.k-i-collapse,.k-icon.k-i-expand,span.k-numeric-wrap,.k-focusable', msie = kendo.support.browser.msie, supportEventDelegation = false, extend = $.extend;\n (function ($) {\n (function () {\n $('
          ').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').trigger('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: [\n CHANGE,\n UNSELECT\n ],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop,\n ignoreOverlapped: false,\n addIdToRanges: false\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, rangeSelectedAttr = kendo.attr('range-selected'), uid = kendo.guid();\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 if (that.options.addIdToRanges) {\n for (var i = 0; i < that._currentlyActive.length; i++) {\n $(that._currentlyActive[i]).attr(rangeSelectedAttr, uid);\n }\n }\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 this._currentlyActive = [];\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) && !this._collidesWithActiveElement(related, position)) {\n related.addClass(ACTIVE);\n }\n this._currentlyActive.push(related[0]);\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 _collidesWithActiveElement: function (element, marqueeRect) {\n if (!this.options.ignoreOverlapped) {\n return false;\n }\n var activeElements = this._currentlyActive;\n var elemRect = element[0].getBoundingClientRect();\n var activeElementRect;\n var collision = false;\n var isRtl = kendo.support.isRtl(element);\n var leftRight = isRtl ? 'right' : 'left';\n var tempRect = {};\n marqueeRect.right = marqueeRect.left + marqueeRect.width;\n marqueeRect.bottom = marqueeRect.top + marqueeRect.height;\n for (var i = 0; i < activeElements.length; i++) {\n activeElementRect = activeElements[i].getBoundingClientRect();\n if (overlaps(elemRect, activeElementRect)) {\n tempRect[leftRight] = leftRight === 'left' ? activeElementRect.right : activeElementRect.left;\n elemRect = extend({}, elemRect, tempRect);\n if (elemRect.left > elemRect.right) {\n return true;\n }\n collision = !overlaps(elemRect, marqueeRect);\n }\n }\n return collision;\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 selectedRanges: function () {\n var that = this;\n var rangeSelectedAttr = kendo.attr('range-selected');\n var map = {};\n that.element.find('[' + rangeSelectedAttr + ']').each(function (_, elem) {\n var rangeId = $(elem).attr(rangeSelectedAttr);\n var mapLocation = map[rangeId];\n if (!mapLocation) {\n mapLocation = map[rangeId] = [];\n }\n mapLocation.push($(elem));\n });\n return map;\n },\n selectedSingleItems: function () {\n var that = this;\n var rangeSelectedAttr = kendo.attr('range-selected');\n return that.element.find(that.options.filter + '.' + SELECTED + ':not([' + rangeSelectedAttr + '])').toArray().map(function (elem) {\n return $(elem);\n });\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 if (this.trigger(UNSELECT, { element: element })) {\n return;\n }\n var rangeSelectedAttr = kendo.attr('range-selected');\n element.removeClass(SELECTED).removeAttr(rangeSelectedAttr);\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 selectableMode = selectable.mode || selectable;\n var asLowerString = typeof selectableMode === 'string' && selectableMode.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 function overlaps(firstRect, secondRect) {\n return !(firstRect.right <= secondRect.left || firstRect.left >= secondRect.right || firstRect.bottom <= secondRect.top || firstRect.top >= secondRect.bottom);\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 }), otherMonthCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), 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 + '\"', OUTOFRANGE = 'k-out-of-range', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + '):not(.' + OUTOFRANGE + ')', 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 }, HEADERSELECTOR = '.k-header, .k-calendar-header', CLASSIC_HEADER_TEMPLATE = '
          ' + '' + '' + '' + '
          ', MODERN_HEADER_TEMPLATE = '
          ' + '' + '' + '' + '' + '' + '#=messages.today#' + '' + '' + '' + '' + '
          ';\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n options = options || {};\n options.componentType = options.componentType || 'classic';\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = kendo.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that._today = that.element.find('a.k-today');\n that._toggle();\n }\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 + ' touchend', CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = 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 (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 = toDateObject(last.find('a'));\n that._setCurrent(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 if (that._cell) {\n that._cell.removeClass(FOCUSED);\n }\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: {\n weekColumnHeader: '',\n today: 'Today'\n },\n componentType: 'classic'\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n componentTypes: {\n 'classic': {\n header: { template: CLASSIC_HEADER_TEMPLATE },\n hasFooter: true,\n linksSelector: '.k-link',\n contentClasses: 'k-content'\n },\n 'modern': {\n header: { template: MODERN_HEADER_TEMPLATE },\n hasFooter: false,\n linksSelector: '.k-button',\n contentClasses: 'k-content k-calendar-content'\n }\n },\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n that._destroySelectable();\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that.element.find('.k-footer').hide();\n that._toggle();\n }\n that._index = views[that.options.start];\n that.navigate();\n if (options.weekNumber) {\n that.element.addClass('k-week-number');\n }\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.trigger('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, viewWrapper = that.element.children('.k-calendar-view');\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 otherMonth: true,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages,\n contentClasses: that.options.contentClasses\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\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 if (that.options.componentType === 'modern') {\n viewWrapper.removeClass('k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview');\n viewWrapper.addClass('k-calendar-' + currentView.name + 'view');\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._selectCell(that._value);\n }\n }\n that._setCurrent(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 = toDateObject(target.find('a'));\n that._setCurrent(that._current);\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 || eventArgs.event.metaKey) {\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 = 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(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 = 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 || toDateObject(that.selectable.value().first().find('a')), toDate = toDateObject(toDateCell.find('a')), daysDifference;\n if (that.selectable._lastActive || that._value) {\n fromDate = that.selectable._lastActive ? 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 = 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 = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _isNavigatable: function (currentValue, cellIndex) {\n var that = this;\n var isDisabled = that.options.disableDates;\n var cell;\n var index;\n if (that._view.name == 'month') {\n return !isDisabled(currentValue);\n } else {\n index = that.wrapper.find('.' + FOCUSED).index();\n cell = that.wrapper.find('.k-content td:eq(' + (index + cellIndex) + ')');\n return cell.is(CELLSELECTORVALID) || !isDisabled(currentValue);\n }\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 || e.metaKey) {\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 = toDateObject($(that._cell[0]).find('a'));\n that._setCurrent(focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(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 min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (!that._isNavigatable(currentValue, value)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._setCurrent(currentValue);\n }\n } else {\n that._focus(currentValue);\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 ? 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._setCurrent(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;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children('.k-calendar-view');\n if (!from) {\n viewWrapper.append(to);\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 viewWrapper.append(to);\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.insertBefore(from);\n from.css({\n position: 'absolute',\n width: to.width()\n });\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 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 _selectCell: function (date) {\n var that = this, cell = that._selectedCell, value = that._view.toDateString(date);\n if (cell && cell[0]) {\n cell[0].removeAttribute(ARIA_SELECTED);\n cell.removeClass(SELECTED);\n }\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')');\n that._selectedCell = cell;\n cell.addClass(SELECTED).attr(ARIA_SELECTED, true);\n },\n _setCurrent: function (date) {\n var that = this, id = kendo.guid(), cell = that._cell, value = that._view.toDateString(date);\n if (cell && cell[0]) {\n cell.removeClass(FOCUSED);\n cell[0].removeAttribute(ARIA_LABEL);\n cell[0].removeAttribute(ID);\n }\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')');\n that._cell = cell;\n cell.attr(ID, id).addClass(FOCUSED);\n if (that._table[0]) {\n that._table[0].removeAttribute('aria-activedescendant');\n that._table.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 = 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._setCurrent(value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _viewWrapper: function () {\n var that = this;\n var element = that.element;\n var viewWrapper = element.children('.k-calendar-view');\n if (!viewWrapper[0]) {\n viewWrapper = $('
          ').insertAfter(element.find(HEADERSELECTOR));\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, linksSelector = that.options.linksSelector;\n if (!element.find(HEADERSELECTOR)[0]) {\n element.html(kendo.template(that.options.header.template)($.extend(true, {}, that.options, { actionAttr: kendo.attr('action') })));\n }\n element.find(linksSelector).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).on(CLICK + ' touchend' + ns, function () {\n return false;\n });\n that._title = element.find('[' + kendo.attr('action') + '=\"nav-up\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = element.find('[' + kendo.attr('action') + '=\"prev\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = element.find('[' + kendo.attr('action') + '=\"next\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n element.find('[' + kendo.attr('action') + '=\"today\"]').on(CLICK + ' touchend' + ns, proxy(that._todayClick, that));\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):not(.k-out-of-range)').has('.k-link').first();\n currentValue = 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, todayClass = that._todayClass();\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(todayClass).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(todayClass).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClass: function () {\n return this.options.componentType === 'modern' ? 'k-today' : TODAY;\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 _templates: function () {\n var that = this, options = that.options, footer = options.footer, month = options.month, content = month.content, weekNumber = month.weekNumber, empty = month.empty, footerTemplate = '#= kendo.toString(data,\"D\",\"' + options.culture + '\") #';\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 if (footer && footer !== true) {\n footerTemplate = footer;\n }\n that.footer = footer !== false ? template(footerTemplate, { useWithBlock: false }) : null;\n },\n _updateAria: function (ariaTemplate, date) {\n var that = this;\n var cell = that._cell;\n var valueType = that.view().valueType();\n var current = date || that.current();\n var text;\n if (valueType === 'month') {\n text = kendo.toString(current, 'MMMM');\n } else if (valueType === 'date') {\n text = kendo.toString(current, 'D');\n } else {\n text = cell.text();\n }\n cell.attr('aria-label', ariaTemplate({\n current: current,\n valueType: valueType,\n text: text\n }));\n return cell.attr('id');\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, showHeader = options.showHeader, otherMonth = options.otherMonth, 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(), contentClasses = options.contentClasses, html = '';\n if (showHeader) {\n html += '';\n } else {\n html += '';\n }\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 otherMonth: otherMonth,\n content: options.content,\n lastDayOfMonth: lastDayOfMonth,\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 valueType: function () {\n return 'date';\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, html = '';\n if (options.showHeader) {\n html += '
          ' + this.title(date, min, max, culture) + '
          ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
          ';\n }\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 html: html,\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 valueType: function () {\n return 'month';\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, html = '';\n if (options.showHeader) {\n html += '
          ';\n html += this.title(options.date);\n html += '
          ';\n }\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 otherMonth: options.otherMonth,\n html: html,\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 valueType: function () {\n return 'year';\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, html = '';\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n if (options.showHeader) {\n html += '
          ';\n html += this.title(options.date, options.min, options.max);\n html += '
          ';\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 otherMonth: options.otherMonth,\n html: html,\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 valueType: function () {\n return 'decade';\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, otherMonth = options.otherMonth, lastDayOfMonth = options.lastDayOfMonth, weekNumber = options.weekNumber || weekNumberTemplate, content = options.content || cellTemplate, empty = options.empty || emptyCellTemplate, otherMonthTemplate = options.otherMonthCellTemplate || otherMonthCellTemplate, html = options.html || '
          ';\n html += this.title(options.date, options.min, options.max);\n html += '
          ';\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 += otherMonth || +start <= +lastDayOfMonth ? weekNumber(weekNumberBuild(start)) : weekNumber({ weekNumber: ' ' });\n }\n }\n start = createDate(start.getFullYear(), start.getMonth(), start.getDate());\n adjustDST(start, 0);\n data = build(start, idx, options.disableDates);\n html += data.cssClass.indexOf(OTHERMONTH) !== -1 && !otherMonth ? otherMonthTemplate(data) : 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 dateObject = new DATE(year, month, date);\n dateObject.setFullYear(year, month, date);\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 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 clonedDate = new Date(date); var found = date && window.kendo.jQuery.inArray(clonedDate.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 clonedDate = new Date(date); var found = date && window.kendo.jQuery.inArray(clonedDate.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 function toDateObject(link) {\n var value = $(link).attr(kendo.attr(VALUE)).split('/');\n value = createDate(value[0], value[1], value[2]);\n return value;\n }\n calendar.isEqualDatePart = isEqualDatePart;\n calendar.isEqualDate = isEqualDate;\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 calendar.toDateObject = toDateObject;\n calendar.getToday = getToday;\n calendar.createDate = createDate;\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).removeClass('input-validation-error');\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 that._inputWrapper = $(that.wrapper[0]);\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('focusout' + ns, function () {\n that._change();\n }).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('focusout' + 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 if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n if (element && element.length) {\n element[0].removeAttribute(READONLY);\n }\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 var initialValue = element[0].value;\n if (!initialValue && that.options.value) {\n initialValue = that.options.value;\n }\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(initialValue);\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 var interval = 1;\n if (symbol == 'm') {\n interval = this.options.interval || 1;\n }\n this._dateTime.modifyPart(symbol, key == 38 ? interval * 1 : interval * -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n this.element.trigger(CHANGE);\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 lastDateOfMonth = new Date(newValue.getFullYear(), newValue.getMonth() + 1, 0).getDate();\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 > lastDateOfMonth) {\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_READONLY = 'aria-readonly', 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');\n that.options = options = options || {};\n id = options.id;\n if (!options.omitPopup) {\n div.appendTo(body);\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n } else {\n div = options.dateDiv;\n }\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\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(options.omitPopup ? options.dateDiv : that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div, { componentType: options.componentType });\n that._setOptions(options);\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 if (this.popup) {\n this.popup.destroy();\n }\n },\n open: function () {\n var that = this;\n var popupHovered;\n that._calendar();\n popupHovered = that.popup._hovered;\n that.popup._hovered = true;\n that.popup.open();\n setTimeout(function () {\n that.popup._hovered = popupHovered;\n }, 1);\n },\n close: function () {\n if (this.popup) {\n this.popup.close();\n }\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 && 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 if (this.calendar) {\n this.calendar._focus(date);\n }\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.calendar.trigger('change');\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-haspopup': 'grid',\n 'aria-owns': that.dateView._dateViewID,\n 'autocomplete': 'off'\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 that._createDateInput(options);\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 #=data.valueType# is #=data.text#',\n dateInput: false,\n weekNumber: false,\n componentType: 'classic'\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 that._createDateInput(options);\n if (!that._dateInput) {\n that.element.val(kendo.toString(value, options.format, options.culture));\n }\n if (value) {\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 if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n element.attr(ARIA_DISABLED, false).attr(ARIA_READONLY, 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).attr(ARIA_READONLY, readonly);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (this._dateInput) {\n this._dateInput._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n }\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (this._dateInput) {\n this._dateInput._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\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 && !that._dateInput) {\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 if (!value) {\n that.dateView.current(kendo.calendar.getToday());\n }\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.trigger('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 && !(that._dateInput && !date)) {\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').addClass(element[0].className).removeClass('input-validation-error');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), options = that.options, disabledDate = options.disableDates, parseFormats = options.parseFormats.length ? options.parseFormats : null, optionsValue = that._initialOptions.value, form = formId ? $('#' + formId) : element.closest('form'), initialValue = element[0].defaultValue;\n if (optionsValue && (disabledDate && disabledDate(optionsValue))) {\n optionsValue = null;\n }\n if ((!initialValue || !kendo.parseDate(initialValue, parseFormats, options.culture)) && optionsValue) {\n element.attr('value', kendo.toString(optionsValue, options.format, options.culture));\n }\n if (form[0]) {\n that._resetHandler = function () {\n that.value(optionsValue || 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 = proxy(template(this.options.ARIATemplate), this);\n },\n _createDateInput: function (options) {\n if (this._dateInput) {\n this._dateInput.destroy();\n this._dateInput = null;\n }\n if (options.dateInput) {\n this._dateInput = new ui.DateInput(this.element, {\n culture: options.culture,\n format: options.format,\n min: options.min,\n max: options.max\n });\n }\n },\n _updateARIA: function (date) {\n var that = this;\n var calendar = that.dateView.calendar;\n if (that.element && that.element.length) {\n that.element[0].removeAttribute('aria-activedescendant');\n }\n if (calendar) {\n that.element.attr('aria-activedescendant', calendar._updateAria(that._ariaTemplate, date));\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.floatinglabel', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'floatinglabel',\n name: 'FloatingLabel',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, ui = kendo.ui, NS = '.kendoFloatingLabel', FLOATINGLABELCONTAINER = 'k-floating-label-container', EMPTY = 'k-state-empty', FOCUSED = 'k-state-focused', STATEDISABLED = 'k-state-disabled', NOCLICKCLASS = 'k-no-click', STATEREADONLY = 'k-state-readonly', proxy = $.proxy;\n var FloatingLabel = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = $.extend(true, {}, options);\n that.refresh();\n that._editable({\n readonly: that.options.widget.options.readonly !== undefined ? that.options.widget.options.readonly : false,\n disable: that.options.widget.options.enable !== undefined ? !that.options.widget.options.enable : false\n });\n that.element.addClass(FLOATINGLABELCONTAINER);\n kendo.notify(that);\n },\n options: {\n name: 'FloatingLabel',\n widget: null,\n useReadOnlyClass: false\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 refresh: function () {\n var that = this;\n var element = that.element;\n element.removeClass(EMPTY).removeClass(FOCUSED);\n if (!that.options.widget.element.val()) {\n element.addClass(EMPTY);\n }\n if (document.activeElement === that.options.widget.element[0]) {\n element.addClass(FOCUSED);\n }\n },\n destroy: function () {\n var that = this;\n that.element.off(NS);\n Widget.fn.destroy.call(that);\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 element.off(NS);\n if (!readonly && !disable) {\n element.removeClass(STATEDISABLED).removeClass(that.options.useReadOnlyClass ? STATEREADONLY : NOCLICKCLASS);\n element.on('focusin' + NS, proxy(that.refresh, that));\n element.on('focusout' + NS, proxy(that.refresh, that));\n } else {\n element.toggleClass(STATEDISABLED, disable).toggleClass(that.options.useReadOnlyClass ? STATEREADONLY : NOCLICKCLASS, readonly);\n }\n }\n });\n ui.plugin(FloatingLabel);\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 'kendo.floatinglabel'\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 'floatinglabel'\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 = '.', SYMBOL = 'symbol', CLASS_ICON = 'k-icon', LABELCLASSES = 'k-label k-input-label', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, isPlainObject = $.isPlainObject, 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 var inputType;\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 inputType = element.attr('type');\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._focusin();\n });\n } else {\n that._focusin();\n }\n that.selectValue();\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 if (value == NULL) {\n if (inputType == 'number') {\n value = parseFloat(element.val());\n } else {\n value = element.val();\n }\n }\n that.value(value);\n disabled = !options.enable || 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.angular('compile', function () {\n return { elements: that._text.get() };\n });\n that._label();\n that._ariaLabel();\n kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n enable: true,\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 selectOnFocus: false,\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value',\n label: null\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('keyup' + ns).off('input' + ns).off('paste' + ns);\n if (that._inputLabel) {\n that._inputLabel.off(ns);\n }\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('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that)).on('input' + ns, proxy(that._inputHandler, that));\n if (that._inputLabel) {\n that._inputLabel.on('click' + ns, proxy(that.focus, that));\n }\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 var that = this;\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (that.floatingLabel) {\n that.floatingLabel.readonly(readonly === undefined ? true : readonly);\n }\n },\n enable: function (enable) {\n var that = this;\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (that.floatingLabel) {\n that.floatingLabel.enable(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 if (that._inputLabel) {\n that._inputLabel.off(ns);\n if (that.floatingLabel) {\n that.floatingLabel.destroy();\n }\n }\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('(-)?(' + format[SYMBOL] + ')?([\\\\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 that.selectValue();\n });\n },\n selectValue: function () {\n if (this.options.selectOnFocus) {\n this.element[0].select();\n }\n },\n _getFactorValue: 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 return value;\n },\n _change: function (value) {\n var that = this;\n value = that._getFactorValue(value);\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 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 'autocomplete': 'off'\n });\n },\n _keydown: function (e) {\n var that = this, key = e.keyCode;\n if (key === keys.NUMPAD_DOT) {\n that._numPadDot = true;\n }\n if (key == keys.DOWN) {\n that._step(-1);\n return;\n } else if (key == keys.UP) {\n that._step(1);\n return;\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n return;\n }\n if (key != keys.TAB) {\n that._typing = true;\n }\n that._cachedCaret = caret(that.element);\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _inputHandler: function () {\n var element = this.element;\n var value = element.val();\n var min = this.options.min;\n var numberFormat = this._format(this.options.format);\n var decimalSeparator = numberFormat[POINT];\n var minInvalid = min !== null && min >= 0 && value.charAt(0) === '-';\n if (this._numPadDot && decimalSeparator !== POINT) {\n value = value.replace(POINT, decimalSeparator);\n this.element.val(value);\n this._numPadDot = false;\n }\n if (this._isPasted) {\n value = this._parse(value).toString().replace(POINT, numberFormat[POINT]);\n }\n if (this._numericRegex(numberFormat).test(value) && !minInvalid) {\n this._oldText = value;\n } else {\n this._blinkInvalidState();\n this.element.val(this._oldText);\n if (this._cachedCaret) {\n caret(element, this._cachedCaret[0]);\n this._cachedCaret = null;\n }\n }\n this._isPasted = false;\n },\n _blinkInvalidState: function () {\n var that = this;\n that._addInvalidState();\n clearTimeout(that._invalidStateTimeout);\n that._invalidStateTimeout = setTimeout(proxy(that._removeInvalidState, that), 100);\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 that._invalidStateTimeout = null;\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 that._isPasted = true;\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 value = that._getFactorValue(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 _ariaLabel: function () {\n var that = this;\n var text = that._text;\n var inputElm = that.element;\n var id = inputElm.attr('id');\n var labelElm = $('label[for=\\'' + id + '\\']');\n var ariaLabel = inputElm.attr('aria-label');\n var ariaLabelledBy = inputElm.attr('aria-labelledby');\n var labelId;\n if (ariaLabel) {\n text.attr('aria-label', ariaLabel);\n } else if (ariaLabelledBy) {\n text.attr('aria-labelledby', ariaLabelledBy);\n } else if (labelElm.length) {\n labelId = labelElm.attr('id');\n if (labelId) {\n text.attr('aria-labelledby', labelId);\n } else {\n labelId = kendo.guid();\n labelElm.attr('id', labelId);\n text.attr('aria-labelledby', labelId);\n }\n }\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, originalValue = that._value, value = that._parse(element.val()) || 0, precision = that.options.decimals || 2;\n if (activeElement() != element[0]) {\n that._focusin();\n }\n if (that.options.factor && value) {\n value = value / that.options.factor;\n }\n value = +(value + that.options.step * step).toFixed(precision);\n value = that._adjust(value);\n that._update(value);\n that._typing = false;\n if (originalValue !== value) {\n that.trigger(SPIN);\n }\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 if (toggle) {\n that._text.removeAttr('aria-hidden');\n } else {\n that._text.attr('aria-hidden', 'true');\n }\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._oldText = 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.element.attr('title') || input.val());\n },\n _label: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var id = element.attr('id');\n var floating;\n var labelText;\n if (options.label !== null) {\n floating = isPlainObject(options.label) ? options.label.floating : false;\n labelText = isPlainObject(options.label) ? options.label.content : options.label;\n if (floating) {\n that._floatingLabelContainer = that.wrapper.wrap('').parent();\n that.floatingLabel = new kendo.ui.FloatingLabel(that._floatingLabelContainer, { widget: that });\n }\n if (kendo.isFunction(labelText)) {\n labelText = labelText.call(that);\n }\n if (!labelText) {\n labelText = '';\n }\n if (!id) {\n id = options.name + '_' + kendo.guid();\n element.attr('id', id);\n }\n that._inputLabel = $('\\'').insertBefore(that.wrapper);\n if (that.element.attr('disabled') === undefined && that.element.attr('readonly') === undefined) {\n that._inputLabel.on('click' + ns, proxy(that.focus, that));\n }\n }\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).removeClass('input-validation-error').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', VALIDATIONSUMMARY = 'k-validation-summary', INVALIDLABEL = 'k-text-error', MESSAGEBOX = 'k-messagebox k-messagebox-error', ARIAINVALID = 'aria-invalid', ARIADESCRIBEDBY = 'aria-describedby', 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 allowSubmit: $.noop,\n validateOnInit: $.noop\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 function isLabelFor(label, element) {\n if (!label) {\n return false;\n }\n if (typeof label.nodeName !== 'string' || label.nodeName !== 'LABEL') {\n return false;\n }\n if (typeof label.getAttribute('for') !== 'string' || typeof element.getAttribute('id') !== 'string') {\n return false;\n }\n if (label.getAttribute('for') !== element.getAttribute('id')) {\n return false;\n }\n return true;\n }\n var SUMMARYTEMPLATE = '';\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 that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\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 if (that._validateOnInit()) {\n that.validate();\n }\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 noNameCheckbox = !input.attr('name') && !input.is(':checked'), namedCheckbox = input.attr('name') && !this.element.find('input[name=\\'' + input.attr('name') + '\\']:checked').length, checkbox = input.filter('[type=checkbox]').length && (noNameCheckbox || namedCheckbox), radio = input.filter('[type=radio]').length && !this.element.find('input[name=\\'' + input.attr('name') + '\\']:checked').length, value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox || radio));\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 validationSummary: false\n },\n _allowSubmit: function () {\n return kendo.ui.validator.allowSubmit(this.element, this.errors());\n },\n _validateOnInit: function () {\n return kendo.ui.validator.validateOnInit(this.element);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n this.validationSummary = null;\n }\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() && !this._allowSubmit()) {\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 if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n this.trigger(VALIDATE, {\n valid: result,\n errors: this.errors()\n });\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 })).addClass('k-hidden'), messageText = !valid ? that._extractMessage(input, result.key) : '', messageLabel = !valid ? parseHtml(template({\n message: decode(messageText),\n field: fieldName\n })) : '', wasValid = !input.attr(ARIAINVALID);\n input.removeAttr(ARIAINVALID);\n if (!valid) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n var widgetInstance = kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n var prevElement = input.prev().get(0);\n if (!widgetInstance && input.is('[type=radio]')) {\n widgetInstance = kendo.widgetInstance(input.closest('.k-radio-list'));\n }\n if (!widgetInstance && input.is('[type=checkbox]')) {\n widgetInstance = kendo.widgetInstance(input.closest('.k-checkbox-list'));\n }\n if (widgetInstance && widgetInstance.wrapper) {\n messageLabel.insertAfter(widgetInstance.wrapper);\n } else if (parentElement && parentElement.nodeName === 'LABEL') {\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && isLabelFor(nextElement, input[0])) {\n messageLabel.insertAfter(nextElement);\n } else if (prevElement && isLabelFor(prevElement, input[0])) {\n messageLabel.insertAfter(input);\n } else {\n messageLabel.insertAfter(input);\n }\n }\n messageLabel.removeClass('k-hidden');\n input.attr(ARIAINVALID, 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 error: messageText,\n field: fieldName\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n var inputLabel = kendo.widgetInstance(input)._inputLabel;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(VALIDINPUT, valid);\n }\n if (inputLabel) {\n inputLabel.toggleClass(INVALIDLABEL, !valid);\n }\n }\n if (wasValid !== valid) {\n var errorId = messageLabel ? messageLabel.attr('id') : lbl.attr('id');\n that._associateMessageContainer(input, errorId);\n if (this.options.validationSummary && this.options.validateOnBlur) {\n this.showValidationSummary();\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n that._disassociateMessageContainers();\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).addClass('k-hidden');\n } else {\n element.next(className).addClass('k-hidden');\n }\n },\n reset: function () {\n var that = this, inputs = that.element.find('.' + INVALIDINPUT), labels = that.element.find('.' + INVALIDLABEL);\n that._errors = [];\n that.hideMessages();\n that.hideValidationSummary();\n inputs.removeAttr(ARIAINVALID);\n inputs.removeClass(INVALIDINPUT);\n labels.removeClass(INVALIDLABEL);\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 if (!container.attr('id')) {\n container.attr('id', fieldName + '-error');\n }\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\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 || customMessage || input.attr('title') || '', 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 setOptions: function (options) {\n if (options.validationSummary) {\n this.hideValidationSummary();\n }\n kendo.deepExtend(this.options, options);\n this.destroy();\n this.init(this.element, this.options);\n this._setEvents(this.options);\n },\n _getInputNames: function () {\n var that = this, inputs = that.element.find(that._inputSelector), sorted = [];\n for (var idx = 0, length = inputs.length; idx < length; idx++) {\n var input = $(inputs[idx]);\n if (hasAttribute(input, NAME)) {\n if (sorted.indexOf(input.attr(NAME)) === -1 || input.closest('.k-checkbox-list').length === 0 && input.closest('.k-radio-list').length === 0) {\n sorted.push(input.attr(NAME));\n }\n }\n }\n return sorted;\n },\n _associateMessageContainer: function (input, errorId) {\n var nextFocusable = kendo.getWidgetFocusableElement(input);\n if (!nextFocusable || !errorId) {\n return;\n }\n kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n },\n _disassociateMessageContainers: function () {\n var that = this, inputs = that.element.find('.' + INVALIDINPUT).addBack(), input, errorId;\n for (var i = 0; i < inputs.length; i += 1) {\n input = $(inputs[i]);\n if (input.is('input')) {\n errorId = that._findMessageContainer(input.attr(NAME)).add(input.next('.' + INVALIDMSG)).attr('id');\n that._associateMessageContainer(input, errorId);\n }\n }\n },\n _errorsByName: function () {\n var that = this, inputNames = that._getInputNames(), sorted = [];\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n return sorted;\n },\n _renderSummary: function () {\n var that = this, options = this.options.validationSummary, element = this.element, prevElement = element.prev(), container;\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $('
          ').insertBefore(that.element);\n }\n container.addClass([\n VALIDATIONSUMMARY,\n MESSAGEBOX\n ].join(' '));\n container.attr('role', 'alert');\n container.on('click' + NS, proxy(that._summaryClick, that));\n return container;\n },\n _summaryClick: function (e) {\n e.preventDefault();\n var that = this, link = $(e.target), target = that.element.find('[name=\\'' + link.data('field') + '\\']'), nextFocusable;\n if (!target.length) {\n return;\n }\n nextFocusable = kendo.getWidgetFocusableElement(target);\n if (nextFocusable) {\n nextFocusable.focus();\n }\n },\n showValidationSummary: function () {\n var that = this, summary = that.validationSummary, errors = that._errorsByName(), errorsList;\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n errorsList = parseHtml(that._summaryTemplate({ errors: errors }));\n summary.html(errorsList);\n summary.toggleClass('k-hidden', !errors.length);\n },\n hideValidationSummary: function () {\n var that = this, summary = that.validationSummary;\n if (!summary) {\n return;\n }\n summary.addClass('k-hidden');\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.dropdownlist',\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 'dropdownlist',\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, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, POINT = '.', AUTOCOMPLETEVALUE = 'off', 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, .k-checkbox-list .k-checkbox, .k-radio-list .k-radio, [' + 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 : {}, attributes = field ? field.attributes : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n id: options.id || options.field,\n name: options.field,\n title: options.title ? options.title : options.field\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 var culture = kendo.getCulture();\n if (typeof rule === 'number' && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString().replace(POINT, numberFormat[POINT]);\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n attr.autocomplete = AUTOCOMPLETEVALUE;\n }\n for (var attributeName in attributes) {\n attr[attributeName] = attributes[attributeName];\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 addIdAttribute(container, attr) {\n var id = container.attr('id');\n if (id) {\n attr.id = id;\n container.removeAttr('id');\n }\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 function getEditorTag(type, options) {\n var tag;\n if (!type.length) {\n return;\n }\n if (type === 'DropDownTree' && options && options.checkboxes || type === 'MultiSelect') {\n tag = '