{"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","getSeriesColors","seriesColorsTemplate","series","colors","item","isElement","HTMLDocument","setDefaults","path","curr","class2type","_i","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","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","pushMove","_moveItems","moved","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","floatingLabel","_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","_useWithBlock","_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","controlsId","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","_ariaValue","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","elementId","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","Tooltip","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","TEMPLATE","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","TooltipBase","_isShownOnMouseEnter","_showOn","showOn","showAfter","hideAfter","callout","_saveTitle","_show","_isShownOnClick","_isShownOnFocus","_positionCallout","elementOffset","offsetAmount","_offset","arrow","arrowWidth","isTopLeft","isFlipped","marginRule","_addDescribedBy","ariaId","describedBy","_removeDescribedBy","arrayAttr","finalArray","finalDescribedbyAttr","tooltipId","currentDescribedBy","_openPopup","_documentKeyDownHandler","_documentKeyDown","_mouseenter","autoHide","_mouseleave","_blur","_appendContent","iframe","contentOptions","showIframe","_ajaxRequest","contentLoading","_initPopup","activate","_closeButtonClick","_closePopup","createPromise","promiseAll","extendStatic","__proto__","util","hex","hue2rgb","p","q","alphaFromHex","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","alpha","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","hi","low","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","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","whenImagesAreActuallyLoaded","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","dataURL","floats","floating","XMLSerializer","serializeToString","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","cornerRadius","setOrigin","setCornerRadius","getCornerRadius","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","autoTextColor","WHITE","BLACK","createHashSet","supportsSet","SetWrapper","LegacySet","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","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","CIRCLE","CROSS","DATE","DEFAULT_HEIGHT","DEFAULT_WIDTH","FORMAT_REGEX","HIGHLIGHT_ZINDEX","INSIDE","NOTE_CLICK","NOTE_HOVER","NOTE_LEAVE","OUTSIDE","ROUNDED_RECT","TRIANGLE","X","DEFAULT_SERIES_OPACITY","constants","defaultImplementation","IntlService","FORMAT_REPLACE_REGEX","FormatService","ChartService","current$1","DomEventsBuilder","current$2","services","HashMap","TRIGGER","InstanceObserver","FontLoader","DELETED","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","_index","_values","has","delete","Set","supported","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","runningTotal","createGradientOverlay","gradientOptions","overlay","createGradient","supportsPointInactiveOpacity","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","paddingBox","contentBox","hasBox","visualStyle","pointData","getElement","borderRadius","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","labelAngle","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","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","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","heatmapSeries","seriesDefaults","legend","baseTheme","markers","outliersField","meanField","_brightness","downColor","whiskers","mean","median","area","rangeArea","verticalRangeArea","bar","boxPlot","bubble","candlestick","column","heatmap","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","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","updateAxisOptions$2","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","HEATMAP","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","MOUSEWHEEL_ZOOM_RATE","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","colorScale","HeatmapPoint","HeatmapChart","HeatmapPlotArea","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","crosshairOptions","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","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","relative","minDelta","maxDelta","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","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","minLightnessOffset","hsl","labelColor","isRoundRect","halfBorderWidth","setRange","indexX","indexY","xRange","yRange","xIndex","yIndex","xIn","yIn","bindCategories","createAxisLabels","xCategories","yCategories","createHeatmapChart","firstCategory","errorLow","errorHigh","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","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","_mousewheelZoomRate","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","_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","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","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","tileTitle","_updateView","TileView","extentToPoint","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","_tileTitle","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","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","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","_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","ROLE","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","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","aria","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","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","_validationIcon","weekday","hour","minute","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","stringAndFromat","toPair","_oldText","_format","_paste","_input","_mouseUp","navigationOnly","valid","difSym","newEvent","blinkInvalid","parsePart","_selectSegment","_blinkInvalidState","_addInvalidState","_invalidStateTimeout","_removeInvalidState","_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","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","_arrowsWrap","_placeholder","aria-valuemin","aria-valuemax","adjusted","_adjust","arrows","_spinning","_focusing","groupRegExp","extractRegExp","caretPosition","_getFactorValue","_culture","CLASSNAME","accessKey","_numPadDot","_step","_cachedCaret","decimalSeparator","minInvalid","_isPasted","_numericRegex","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","captcha","noNameCheckbox","namedCheckbox","checkbox","radio","raise","isValidated","isValid","getCaptchaId","_validating","_checkElement","warn","validateOnBlur","_allowSubmit","validateInput","inputs","invalid","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","isAntiForgeryToken","Editable","antiForgeryTokenName","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","_isMobile","_validateProxy","_validate","clearContainer","skipFocus","isValuesEditor","isHidden","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","avoidFocus","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","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","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,EAAS7y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0MhC,GAEO2lB,IACA0pE,GACAirB,GACApM,GACAj1G,GACAsvH,GACAhf,GACAoX,GACAsyB,GACAjuB,GACAt/F,GACA3oB,GACAoB,GACA+0I,GACAC,GACAC,GACAnJ,GACAhlD,GACAF,GACAsuD,GACA3J,GACA4J,GACAC,GACAnuB,GACAouB,GACA/I,GACAgJ,GACAhtH,GACAitH,GACA1tG,GACA2tG,GACAC,GACAvtH,GACA6lG,GACA4d,GACA9lG,GACA6vG,GACAC,GACAC,GACAh2I,GACAi2I,GACAztH,GACA0tH,GACAziE,GACAtuE,GACA8hF,GACAkvD,GACA7uE,GACA2kE,GACA/jG,GACAkuG,GACAz+H,GACA0+H,GACAC,GAqDA7L,GAuCAU,GAwCAoL,GAcAxkI,GACAykI,GAaAC,GACAC,GAwCAC,GAkCAC,GACAC,GASAC,GAKAtL,GAOAuL,GAuCAC,GAoBAC,GACAC,GAyDAx6C,GACAxsD,GACA2xD,GACA/B,GACAG,GACAjR,GACAzL,GACA2d,GACAD,GACA5qE,GACA+qE,GACAnD,GACAwD,GACA3rF,GACAusF,GACAT,GACAu1C,GA0EAv0C,GACAD,GAuCAy0C,GACA9K,GA4CAD,GA6BAD,GAoCAlnC,GAuCA6nC,GA4LAsK,GA6GAC,GAeAC,GACAC,GA6BAC,GAyOAC,GAkGAC,GAwGAC,GACAC,GACAC,GA4JAC,GAoGAC,GAmJAC,GACA1wB,GAqCA2wB,GACAC,GAwIAC,GA8BAC,GA+EAC,GACAC,GACAC,GAkSAC,GA+tBAlJ,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,GACA4J,GACApJ,GACAtB,GACAW,GACAL,GACA4D,GACAD,GACAD,GACA/B,GAqNA0I,GAaAC,GA2dA9F,GACA+F,GAUApG,GACAtoG,GACAqnG,GAUAF,GAUAwH,GAsCAC,GA+LAC,GAmmBAC,GACAC,GAuSAC,GA+MAC,GACAC,GAsXAC,GA8DAC,GAqLAC,GAsKAC,GAoIAC,GAiBAC,GAoBAC,GACAC,GACAC,EAxmMJ9+I,QAAOuB,MAAMorB,QAAU3sB,OAAOuB,MAAMorB,YAChCC,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K,EAAQof,GACrB4lJ,EAAgBF,EAAgB1lJ,GAChC27E,GAAQiqE,KACJC,EAA2B,OAAfF,EACZE,IAAclqE,GAAQgqE,UACfD,GAAgB1lJ,GACnB6lJ,SACOjlK,GAAQof,IAEZ4lJ,GAAiB/+B,GAAS8+B,IAC7B9+B,GAAS++B,IACTH,GAAmBG,EAAeD,KAO1D,QAASI,IAAkBC,GACvB,IAAK,GAAInoK,GAAM,EAAGA,EAAMmoK,EAAMluK,OAAQ+F,IAClCmoK,EAAMnoK,GAAKooK,eAz6YtB,GAEOziJ,IACAzsB,GACA8nD,GACAqnH,GACAl8C,GACA4d,GACAzkE,GACA0f,GACAC,GACAC,GACA5+D,GACA2jH,GACAqJ,GACAc,GACAz+H,GACA6Q,GACA0jH,GACAsJ,GACA9I,GACA0I,GACAt1C,GACAr2E,GACA9d,GACA8rI,GACAvyC,GACA6nC,GACArC,GACAmB,GACAvjI,GACAlI,GACAwhG,GACAopC,GACAhsI,GACAq3B,GACA6qE,GACAqqC,GACA4M,GACAR,GACAtM,GACAyO,GACA5pG,GACA46F,GACA3tH,GACA8tH,GACA2N,GACAlB,GACA5hI,GACAsrF,GACAxtE,GACAquE,GACAwpC,GACA5pC,GACAk1C,GACA10C,GACA7lG,GACAorB,GACA20F,GACA5zE,GACAu/E,GACA/X,GACA7d,GACAk4B,GACAk5C,GACA39H,GACA68H,GA+BA0H,GAUAC,GAkBAC,GA8EAlG,GAiHAmG,GACAC,GACAC,GACAC,GACAC,GA2GAhoK,GACAioK,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAr1J,GACA+uJ,GACAuG,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,GACAC,GAaAC,GACAC,GACAC,GAC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OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAEJ8H,KAAM,MAEVtI,EAAUuI,SAAWtJ,EAAYxgN,QAC7BoH,KAAM,aACNu/M,QAAS,OAEbpF,EAAUwI,SAAWvJ,EAAYxgN,QAC7BoH,KAAM,aACNu/M,QAAS,OAEbpF,EAAUyI,SAAWxJ,EAAYxgN,QAC7BoH,KAAM,aACNu/M,QAAS,OAEbpF,EAAU0I,QAAUzJ,EAAYxgN,QAC5BoH,KAAM,WACNu/M,QACI,IACA,IACA,IACA,UAGRpF,EAAU,WAAaf,EAAYxgN,QAC/BoH,KAAM,eACNu/M,QACI,OACA,IACA,OAGJlG,EAAUM,EAAS/gN,QACnBkhN,UAAW,SAAUtkN,EAAO3E,GACxB,GAAI2P,GAAOtI,IACXsI,GAAKyG,WACLzG,EAAKhL,MAAQA,EACbgL,EAAKk+M,eAAiB,EACtBl+M,EAAK3P,MAAQA,GAEjB4tN,YAAa,WACT,GAAIj+M,GAAOtI,KAAM4qN,EAAkB,CACnCtiN,GAAK+iI,SAAW/iI,EAAK3P,OAAS,IAAM2P,EAAKhL,MAAMhG,OAASgR,EAAKk+M,gBAAkBl+M,EAAKo5M,gBAAkBkJ,IAE1G/I,QAAS,WAAA,GAGItnN,GAFL+N,EAAOtI,KAAM1C,EAAQgL,EAAKhL,KAE9B,KADAgL,EA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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 = Array.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' && typeof target !== 'function') {\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 = Array.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && Array.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.3.1207'.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.on(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.trigger('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 && Array.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]) && kendo.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 kendo.getSeriesColors = function () {\n var seriesColorsTemplate = '
' + '
' + '
' + '
' + '
' + '
', series = $(seriesColorsTemplate), colors = [];\n series.appendTo($('body'));\n series.each(function (i, item) {\n colors.push($(item).css('background-color'));\n });\n series.remove();\n return colors;\n };\n kendo.isElement = function (element) {\n return element instanceof Element || element instanceof HTMLDocument;\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 (function () {\n kendo.class2type = {};\n jQuery.each('Boolean Number String Function Array Date RegExp Object Error Symbol'.split(' '), function (_i, name) {\n kendo.class2type['[object ' + name + ']'] = name.toLowerCase();\n });\n kendo.type = function (obj) {\n if (obj == null) {\n return obj + '';\n }\n return typeof obj === 'object' || typeof obj === 'function' ? kendo.class2type[Object.prototype.toString.call(obj)] || 'object' : typeof obj;\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 = kendo.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 (Array.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 = Array.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 (!kendo.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 = kendo.type(x), ytype = kendo.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 && (!isEmptyObject(group) || group.length !== 0)) {\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 pushMove: function (index, items) {\n var pushed = this._moveItems(index, items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n _moveItems: function (index, items) {\n if (!isArray(items)) {\n items = [items];\n }\n var moved = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var model = this._createNewModel(item);\n this._eachItem(this._data, function (dataItems) {\n for (var idx = 0; idx < dataItems.length; idx++) {\n var dataItem = dataItems.at(idx);\n if (dataItem.id === model.id) {\n moved.push(dataItem);\n dataItems.splice(index >= idx ? --index : index, 0, dataItems.splice(idx, 1)[0]);\n index++;\n break;\n }\n }\n });\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return moved;\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 if (val !== undefined && (!val || !val.length)) {\n that._ranges = [];\n }\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 floatingLabel: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n if (!widget.floatingLabel) {\n return;\n }\n widget.floatingLabel.refresh();\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 if (widgetBinding && this.target && this.target.floatingLabel) {\n this.applyBinding('floatingLabel', 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 this._useWithBlock = options.useWithBlock;\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, { useWithBlock: that._useWithBlock })(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(), { useWithBlock: that._useWithBlock })(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 = Date.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 if (horizontal) {\n element.attr('aria-orientation', 'horizontal');\n }\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._ariaValue(position, dimension.size - that.elementSize);\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 _ariaValue: function (current, total) {\n var element = this.element;\n if (current > total) {\n current = total;\n }\n element.attr('aria-valuemax', total);\n element.attr('aria-valuenow', current);\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, elementId = that.element.attr('id'), movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar;\n if (!elementId) {\n elementId = kendo.guid();\n that.element.attr('id', elementId);\n }\n scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints,\n controlsId: elementId\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 = '_tb_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 TooltipBase = 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 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 },\n options: {\n name: 'TooltipBase',\n filter: '',\n offset: 0,\n showAfter: 100,\n hideAfter: 100,\n callout: true,\n position: 'bottom',\n showOn: 'mouseenter',\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\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 Widget.fn.destroy.call(this);\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n this._saveTitle(target);\n this._show(target);\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\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 that._saveTitle(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 _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 _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 _offset: function (position, offsetAmount, arrowWidth) {\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 = (arrowWidth || kendo._outerWidth(that.arrow)) / 2 + offsetAmount;\n that.popup.wrapper.css(marginRule, offset * direction + 'px');\n },\n _addDescribedBy: function () {\n var that = this, anchor = that.popup.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 that.popup.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\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 _openPopup: function () {\n if (!this.popup) {\n return;\n }\n this.popup._hovered = true;\n this.popup.open();\n }\n });\n kendo.ui.plugin(TooltipBase);\n var Tooltip = TooltipBase.extend({\n init: function (element, options) {\n var that = this, axis;\n TooltipBase.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 (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 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 _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _saveTitle: function (target) {\n saveTitleAttributes(target);\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 _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 _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 that._addDescribedBy();\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 destroy: function () {\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n TooltipBase.fn.destroy.call(this);\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n 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 support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function (options) {\n return this.toBytes().toHex(options);\n },\n toBytes: function () {\n return this;\n },\n toCss: function (options) {\n return '#' + this.toHex(options);\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n }\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 (options) {\n var value = hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n if (options && options.alpha) {\n value += hex(Math.round(this.a * 255), 2);\n }\n return value;\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 alphaFromHex(a) {\n return parseFloat(parseFloat(parseInt(a, 16) / 255).toFixed(3));\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 = /^#?([0-9a-f])([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), alphaFromHex(m[4] + m[4]));\n } else if (m = /^#?([0-9a-f]{2})([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), alphaFromHex(m[4]));\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 code = input.charCodeAt(i);\n if (55296 <= code && code <= 56319) {\n var hi = code;\n var low = input.charCodeAt(++i);\n if (!isNaN(low)) {\n code = (hi - 55296) * 1024 + (low - 56320) + 65536;\n }\n }\n if (code < 128) {\n output += fromCharCode(code);\n } else if (code < 2048) {\n output += fromCharCode(192 | code >>> 6);\n output += fromCharCode(128 | code & 63);\n } else if (code < 65536) {\n output += fromCharCode(224 | code >>> 12);\n output += fromCharCode(128 | code >>> 6 & 63);\n output += fromCharCode(128 | code & 63);\n } else if (code < 1114111) {\n output += fromCharCode(240 | code >>> 18);\n output += fromCharCode(128 | code >>> 12 & 63);\n output += fromCharCode(128 | code >>> 6 & 63);\n output += fromCharCode(128 | code & 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, cornerRadius) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n if (cornerRadius === void 0) {\n cornerRadius = 0;\n }\n HasObservers$$1.call(this);\n this.setOrigin(origin);\n this.setSize(size);\n this.setCornerRadius(cornerRadius);\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.setCornerRadius = function setCornerRadius(radius) {\n this.cornerRadius = Array.isArray(radius) ? radius : [\n radius,\n radius\n ];\n this.geometryChange();\n return this;\n };\n Rect.prototype.getCornerRadius = function getCornerRadius() {\n return this.cornerRadius;\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, Point.create(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 var path = new Path(options);\n var ref = rect.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n if (rx === 0 && ry === 0) {\n path.moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n } else {\n var origin = rect.origin;\n var x = origin.x;\n var y = origin.y;\n var width = rect.width();\n var height = rect.height();\n rx = limitValue(rx, 0, width / 2);\n ry = limitValue(ry, 0, height / 2);\n path.moveTo(x + rx, y).lineTo(x + width - rx, y).arcTo([\n x + width,\n y + ry\n ], rx, ry, false).lineTo(x + width, y + height - ry).arcTo([\n x + width - rx,\n y + height\n ], rx, ry, false).lineTo(x + rx, y + height).arcTo([\n x,\n y + height - ry\n ], rx, ry, false).lineTo(x, y + ry).arcTo([\n x + rx,\n y\n ], rx, ry, false);\n }\n return path;\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.attr('rx', geometry.cornerRadius[0]);\n this.attr('ry', geometry.cornerRadius[1]);\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.rx = function rx() {\n return this.srcElement.geometry().cornerRadius[0];\n };\n RectNode.prototype.ry = function ry() {\n return this.srcElement.geometry().cornerRadius[1];\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 geometry = this.srcElement.geometry();\n var ref = geometry.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n if (rx === 0 && ry === 0) {\n var origin = geometry.origin;\n var size = geometry.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n } else {\n PathNode.prototype.renderPoints.call(this, ctx, Path.fromRect(geometry));\n }\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 whenImagesAreActuallyLoaded([container], function () {\n options.beforePageBreak(container, doPageBreak);\n });\n } else {\n whenImagesAreActuallyLoaded([container], doPageBreak);\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, callback.bind(null, {\n pages: pages,\n container: container\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(elements, 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 elements.forEach(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 var count = urls.length;\n function next() {\n if (--count <= 0) {\n whenImagesAreActuallyLoaded(elements, 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 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 'svg':\n var xml = new window.XMLSerializer().serializeToString(element);\n var dataURL = 'data:image/svg+xml;base64,' + encodeBase64(xml);\n renderImage(element, dataURL, 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|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 ROUNDED_RECT = 'roundedRect';\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 ROUNDED_RECT: ROUNDED_RECT,\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 autoTextColor(color) {\n var isDark = new kendo.Color(color).isDark();\n if (isDark) {\n return WHITE;\n }\n return BLACK;\n }\n var DELETED = {};\n var LegacySet = Class.extend({\n init: function (values) {\n var this$1 = this;\n this._index = {};\n this._values = values ? values.slice(0) : [];\n for (var i = 0; i < this._values.length; i++) {\n this$1._index[this$1._values[i]] = i;\n }\n },\n values: function () {\n return this._values.filter(function (item) {\n return item !== DELETED;\n });\n },\n has: function (value) {\n return this._index[value] !== undefined;\n },\n add: function (value) {\n if (!this.has(value)) {\n this._index[value] = this._values.length;\n this._values.push(value);\n }\n },\n delete: function (value) {\n var index = this._index[value];\n if (index !== undefined) {\n this._values[index] = DELETED;\n delete this._index[value];\n }\n },\n clear: function () {\n this._index = {};\n this._values = [];\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(LegacySet.fn, {\n size: {\n get: function () {\n return this._values.length;\n }\n }\n });\n }\n var SetWrapper = Class.extend({\n init: function (values) {\n this._set = new Set(values);\n },\n values: function () {\n return Array.from(this._set);\n },\n has: function (value) {\n return this._set.has(value);\n },\n add: function (value) {\n this._set.add(value);\n },\n delete: function (value) {\n this._set.delete(value);\n },\n clear: function () {\n this._set.clear();\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(SetWrapper.fn, {\n size: {\n get: function () {\n return this._set.size;\n }\n }\n });\n }\n var supportsSet = function () {\n var supported = false;\n if (typeof Set === 'function') {\n var set = new Set([1]);\n supported = set.has(1);\n }\n return supported;\n };\n function createHashSet(values) {\n if (supportsSet()) {\n return new SetWrapper(values);\n }\n return new LegacySet(values);\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 var halfHeight = box.height() / 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 + halfHeight, COORD_PRECISION)\n ], Math.min(halfWidth, halfHeight)), 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 var rect = box.toRect();\n if (type === ROUNDED_RECT) {\n var borderRadius = valueOrDefault(options.borderRadius, rect.width() / 5);\n rect.setCornerRadius(borderRadius);\n }\n element = Path.fromRect(rect, 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 var labelAngle = this$1.autoRotateLabelAngle(labelBox, width);\n if (labelAngle !== 0) {\n angle = labelAngle;\n }\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 autoTextColor: autoTextColor,\n createHashSet: createHashSet,\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 heatmapSeries = function () {\n return {\n labels: {\n color: '',\n background: TRANSPARENT,\n visible: true\n },\n highlight: { border: { width: 0 } }\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 heatmap: heatmapSeries(),\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 HEATMAP = 'heatmap';\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 MOUSEWHEEL_ZOOM_RATE = 0.3;\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 MOUSEWHEEL_ZOOM_RATE: MOUSEWHEEL_ZOOM_RATE,\n SHOW_TOOLTIP: SHOW_TOOLTIP,\n HIDE_TOOLTIP: HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n ABOVE: ABOVE,\n BELOW: BELOW,\n HEATMAP: HEATMAP\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 supportsPointInactiveOpacity: function () {\n return false;\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 var background = new Color(style.backgroundColor);\n if (!defined(tooltipOptions.color) && !background.isDark()) {\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 crosshairOptions: function (axis) {\n return axis.options.crosshair;\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 var options = this$1.crosshairOptions(axis);\n if (options && options.visible) {\n var currentCrosshair = new Crosshair(this$1.chartService, axis, options);\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({ rate: 0.3 }, this.options, options);\n },\n updateRanges: function (delta, coords) {\n var this$1 = this;\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 * this$1.options.rate, coords);\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 zoom: function (delta, coords) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\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 var ref = this.categoryAxis.options;\n var reverse = ref.reverse;\n var origin = X + (reverse ? '2' : '1');\n var lineBox = this.categoryAxis.lineBox();\n var relative = Math.abs(lineBox[origin] - coords[X]);\n var size = lineBox.width();\n var position = round(relative / size, 2);\n var minDelta = round(position * delta);\n var maxDelta = round((1 - position) * delta);\n if (this._state) {\n range = this._state.range;\n }\n range.from = limitValue(limitValue(from - minDelta, 0, to - 1), min, max);\n range.to = limitValue(limitValue(to + maxDelta, range.from + 1, max), min, max);\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 labels.color = dataviz.autoTextColor(this.options.color);\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 labels.color = dataviz.autoTextColor(series.color);\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 colorScale = function (color, minLightnessOffset) {\n if (minLightnessOffset === void 0) {\n minLightnessOffset = 0.05;\n }\n var baseColor = kendo.parseColor(color);\n var offset = 1 - minLightnessOffset;\n return function (value) {\n var hsl = baseColor.toHSL();\n var range = 100 - hsl.l;\n var point = offset - value;\n hsl.l += Math.min(point * range, range);\n return hsl.toCss();\n };\n };\n var HeatmapPoint = 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.value = value;\n },\n render: function () {\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n this.createMarker();\n this.createLabel();\n this.createNote();\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 var labelColor = labels.color;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else {\n labelText = this.formatValue(labels.format);\n }\n if (!labelColor) {\n labelColor = dataviz.autoTextColor(this.color);\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, { color: labelColor }), 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 this.render();\n var label = this.label;\n this.box = targetBox;\n if (label) {\n label.reflow(this.markerBox());\n }\n if (this.note) {\n this.note.reflow(targetBox);\n }\n this.marker.reflow(this.markerBox());\n },\n markerBox: function () {\n var options = this.options;\n var markers = options.markers;\n var border = markers.border;\n var rect = this.box.toRect();\n var type = valueOrDefault(markers.type, 'rect');\n var isRoundRect = type === datavizConstants.ROUNDED_RECT;\n var borderWidth = valueOrDefault(border.width, isRoundRect ? 1 : 0);\n var halfBorderWidth = Math.round(borderWidth / 2);\n if (markers.size) {\n var center = rect.center();\n rect.size.width = rect.size.height = markers.size;\n rect.origin.x = Math.round(center.x - rect.size.width / 2);\n rect.origin.y = Math.round(center.y - rect.size.height / 2);\n }\n rect.size.width -= borderWidth;\n rect.size.height -= borderWidth;\n rect.origin.y += halfBorderWidth + 0.5;\n rect.origin.x += halfBorderWidth + 0.5;\n return dataviz.rectToBox(rect);\n },\n markerBorder: function () {\n var options = this.options;\n var markers = options.markers;\n var border = markers.border;\n var opacity = valueOrDefault(border.opacity, options.opacity);\n return {\n color: border.color || this.color,\n width: border.width,\n opacity: opacity,\n dashType: border.dashType\n };\n },\n createMarker: function () {\n var options = this.options;\n var markerOptions = options.markers;\n var marker = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\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 this.marker = marker;\n this.append(marker);\n },\n createHighlight: function (style) {\n var options = this.options;\n var markerOptions = this.options.highlight.markers || this.options.markers;\n var highlight = new ShapeElement({\n type: valueOrDefault(markerOptions.type, 'rect'),\n width: markerOptions.size,\n height: markerOptions.size,\n rotation: markerOptions.rotation,\n background: markerOptions.color || this.color,\n border: this.markerBorder(),\n borderRadius: markerOptions.borderRadius,\n opacity: this.series.opacity || options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex)\n });\n highlight.reflow(this.markerBox());\n var visual = highlight.getElement();\n visual.options.fill = style.fill;\n visual.options.stroke = style.stroke;\n return visual;\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 tooltipAnchor: function () {\n var left = this.box.center().x;\n var top = this.box.y1 - TOOLTIP_OFFSET;\n return {\n point: new Point(left, top),\n align: {\n horizontal: CENTER,\n vertical: BOTTOM\n }\n };\n },\n overlapsBox: function (box) {\n return this.box.overlaps(box);\n },\n unclipElements: function () {\n },\n pointData: function () {\n return {\n x: this.value.x,\n y: this.value.y,\n value: this.value.value,\n dataItem: this.dataItem,\n series: this.series\n };\n }\n });\n deepExtend(HeatmapPoint.prototype, PointEventsMixin);\n deepExtend(HeatmapPoint.prototype, NoteMixin);\n HeatmapPoint.prototype.defaults = {\n markers: {\n type: 'rect',\n borderRadius: 4,\n border: { color: 'transparent' }\n },\n padding: { top: 1 },\n labels: {\n visible: false,\n padding: 3\n },\n opacity: 1,\n notes: { label: {} }\n };\n var HeatmapChart = 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.points = [];\n this.seriesOptions = [];\n this.valueRange = {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n this._evalSeries = [];\n },\n render: function () {\n this.setRange();\n this.traverseDataPoints(this.addValue.bind(this));\n },\n setRange: function () {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var valueFields = ref$1.valueFields;\n this$1.valueRange.min = Math.min(this$1.valueRange.min, valueFields.value);\n this$1.valueRange.max = Math.max(this$1.valueRange.max, valueFields.value);\n }\n }\n },\n addValue: function (value, fields) {\n var point;\n if (value) {\n point = this.createPoint(value, fields);\n if (point) {\n $.extend(point, fields);\n }\n }\n this.points.push(point);\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 ]\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 min: this.valueRange.min,\n max: this.valueRange.max\n }, state);\n }\n return pointOptions;\n },\n pointType: function () {\n return HeatmapPoint;\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 } else {\n var scale = colorScale(color);\n color = scale(value.value / this.valueRange.max);\n }\n var point = new HeatmapPoint(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 xAxis: xAxis,\n yAxis: 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 ref = this$1.seriesAxes(fields.series);\n var xAxis = ref.xAxis;\n var yAxis = ref.yAxis;\n var indexX = xAxis.categoryIndex(value.x);\n var indexY = yAxis.categoryIndex(value.y);\n var slotX = xAxis.getSlot(indexX, indexX, limit);\n var slotY = yAxis.getSlot(indexY, indexY, 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 for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var ref$1 = this$1.seriesAxes(currentSeries);\n var xAxis = ref$1.xAxis;\n var yAxis = ref$1.yAxis;\n var xRange = xAxis.currentRangeIndices();\n var yRange = yAxis.currentRangeIndices();\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$2 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$2.valueFields;\n var fields = ref$2.fields;\n var xIndex = xAxis.totalIndex(value.x);\n var yIndex = yAxis.totalIndex(value.y);\n var xIn = xRange.min <= xIndex && xIndex <= xRange.max;\n var yIn = yRange.min <= yIndex && yIndex <= yRange.max;\n if (xIn && yIn) {\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 },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.value);\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(HeatmapChart, {\n series: [],\n tooltip: { format: '{0}, {1}: {2}' },\n labels: { format: '{2}' },\n clip: true\n });\n deepExtend(HeatmapChart.prototype, { _bindPoint: CategoricalChart.prototype._bindPoint });\n var HeatmapPlotArea = PlotAreaBase.extend({\n initFields: function () {\n this.namedXAxes = {};\n this.namedYAxes = {};\n },\n render: function (panes) {\n if (panes === void 0) {\n panes = this.panes;\n }\n this.bindCategories();\n this.createAxes(panes);\n this.createCharts(panes);\n this.createAxisLabels();\n },\n bindCategories: function () {\n var this$1 = this;\n var series = this.srcSeries || this.series;\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var data = currentSeries.data || [];\n var ref = this$1.seriesAxes(currentSeries);\n var xAxis = ref.xAxis;\n var yAxis = ref.yAxis;\n var xCategories = dataviz.createHashSet(xAxis.categories || []);\n var yCategories = dataviz.createHashSet(yAxis.categories || []);\n for (var pointIndex = 0; pointIndex < data.length; pointIndex++) {\n var ref$1 = SeriesBinder.current.bindPoint(currentSeries, pointIndex).valueFields;\n var x = ref$1.x;\n var y = ref$1.y;\n if (!xCategories.has(x)) {\n xCategories.add(x);\n }\n if (!yCategories.has(y)) {\n yCategories.add(y);\n }\n }\n xAxis.categories = xCategories.values();\n yAxis.categories = yCategories.values();\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 filteredSeries = this$1.filterVisibleSeries(paneSeries);\n if (!filteredSeries) {\n continue;\n }\n this$1.createHeatmapChart(filterSeriesByType(filteredSeries, [HEATMAP]), pane);\n }\n },\n createHeatmapChart: function (series, pane) {\n var chart = new HeatmapChart(this, { series: series });\n this.appendChart(chart, pane);\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 seriesAxes: function (series) {\n var xAxis;\n var yAxis;\n var options = this.options;\n var xAxisOptions = [].concat(options.xAxis);\n var xAxisName = series.xAxis;\n if (xAxisName) {\n xAxis = xAxisOptions.find(function (axis) {\n return axis.name === xAxisName;\n });\n } else {\n xAxis = xAxisOptions[0];\n }\n var yAxisOptions = [].concat(options.yAxis);\n var yAxisName = series.yAxis;\n if (yAxisName) {\n yAxis = yAxisOptions.find(function (axis) {\n return axis.name === yAxisName;\n });\n } else {\n yAxis = yAxisOptions[0];\n }\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 xAxis: xAxis,\n yAxis: yAxis\n };\n },\n createAxisLabels: function () {\n var axes = this.axes;\n for (var i = 0; i < axes.length; i++) {\n axes[i].createLabels();\n }\n },\n createXYAxis: function (options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var axisOptions = $.extend({ axisCrossingValue: 0 }, options, {\n vertical: vertical,\n reverse: vertical || this.chartService.rtl ? !options.reverse : options.reverse,\n justified: false\n });\n var firstCategory = axisOptions.categories ? axisOptions.categories[0] : null;\n var typeSamples = [\n axisOptions.min,\n axisOptions.max,\n firstCategory\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 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.DateCategoryAxis;\n } else {\n axisType = CategoryAxis;\n }\n var axis = new axisType(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 axis.mapCategories();\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 removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis.options.vertical) {\n delete this.namedYAxes[axisName];\n } else {\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 _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 appendIfNotNull(values, axis.getCategory(point));\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$2(this.options, index, vertical, options);\n updateAxisOptions$2(this.originalOptions, index, vertical, options);\n },\n crosshairOptions: function (axis) {\n return $.extend({}, axis.options.crosshair, { zIndex: 0 });\n }\n });\n function updateAxisOptions$2(targetOptions, axisIndex, vertical, options) {\n var axisOptions = [].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis)[axisIndex];\n deepExtend(axisOptions, options);\n }\n setDefaultOptions(HeatmapPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(HeatmapPlotArea.prototype, PlotAreaEventsMixin);\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 PlotAreaFactory.current.register(HeatmapPlotArea, [HEATMAP]);\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([HEATMAP], [\n X,\n Y,\n VALUE\n ], [\n COLOR,\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 var coords = this._eventCoordinates(e);\n if (!this._zooming) {\n this._zooming = true;\n }\n var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta, coords);\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 _mousewheelZoomRate: function () {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel || {};\n return valueOrDefault(mousewheel.rate, MOUSEWHEEL_ZOOM_RATE);\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, coords);\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 * this$1._mousewheelZoomRate(), coords);\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 (!chartInstance) {\n return;\n }\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 = Array.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._activeChartInstance) {\n chart._updateSeriesOpacity(null, true);\n chart._applySeriesOpacity(chart._activeChartInstance.children, null, true);\n chart._activeChartInstance = 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 (e) {\n var tileTitle;\n if (e) {\n tileTitle = e.tileTitle;\n } else {\n tileTitle = '';\n }\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset(tileTitle);\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 (tileTitle) {\n this._tileTitle = tileTitle;\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 tileTitle: this._tileTitle\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 (Array.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n 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.on(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 messages: { tileTitle: 'Map tile' }\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', { tileTitle: this.options.messages.tileTitle });\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 = Array.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 (Array.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', ROLE = 'role', 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').trigger('focus');\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').trigger('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().trigger('focus');\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().trigger('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().trigger('focus');\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.trigger('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.trigger('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.attr(ROLE, '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.attr(ROLE, '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 element.attr(ROLE, 'toolbar');\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().trigger('focus');\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.trigger('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.trigger('focus');\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').trigger('focus');\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').trigger('focus');\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.trigger('focus');\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().trigger('focus');\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().trigger('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().trigger('focus');\n } else {\n items.last().find(':kendoFocusable').last().trigger('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.trigger('focus');\n }\n if (firstHasFocus || isOnlyOverflowAnchor && e.shiftKey) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.trigger('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).trigger('focus');\n } else {\n items.first().trigger('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.trigger('focus');\n } else {\n items.last().trigger('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 = Array.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.trigger('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.trigger('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 = Array.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 = Array.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 = Array.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 = Array.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 = Array.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.trigger('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.trigger('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.trigger('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.prop(DISABLED, false).prop(READONLY, false);\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.trigger('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 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', 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-nav-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-button',\n contentClasses: 'k-calendar-table k-content'\n },\n 'modern': {\n header: { template: MODERN_HEADER_TEMPLATE },\n hasFooter: false,\n linksSelector: '.k-button',\n contentClasses: 'k-calendar-table 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 disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\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 viewWrapper.removeClass('k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview');\n viewWrapper.addClass('k-calendar-' + currentView.name + 'view');\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(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 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 }\n html += '';\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n 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 = ['k-calendar-td'], 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.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 html += '';\n html += '';\n html += '';\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 var cssClass = ['k-calendar-td'];\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: cssClass.join(' ')\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 html += '';\n html += '';\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 var cssClass = ['k-calendar-td'];\n if (idx === 0 || idx === 11) {\n cssClass.push(OTHERMONTH);\n }\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: cssClass.join(' ')\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 html += '';\n html += '';\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 cssClass = ['k-calendar-td'];\n var start = date.getFullYear(), end = start + 9;\n if (idx === 0 || idx === 11) {\n cssClass.push(OTHERMONTH);\n }\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: cssClass.join(' ')\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 (Array.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 that._validationIcon = $('').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 that._blinkInvalidState();\n }\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.wrapper.addClass(STATEINVALID);\n that._validationIcon.removeClass('k-hidden');\n },\n _removeInvalidState: function () {\n var that = this;\n that.wrapper.removeClass(STATEINVALID);\n that._validationIcon.addClass('k-hidden');\n that._invalidStateTimeout = null;\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 = Array.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) {\n if (that._dateInput) {\n that._dateInput.value(that._old);\n } else {\n that.element.val('');\n }\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', STATEINVALID = '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.prop(DISABLED, false).prop(READONLY, false).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 = $('').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(STATEINVALID);\n that._validationIcon.removeClass('k-hidden');\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATEINVALID);\n that._validationIcon.addClass('k-hidden');\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 captcha: 'The text you entered doesn\\'t match the image.'\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 captcha: function (input) {\n if (input.filter('[' + kendo.attr('role') + '=captcha]').length) {\n var that = this, captcha = kendo.widgetInstance(input), isValidated = function (isValid) {\n return typeof isValid !== 'undefined' && isValid !== null;\n };\n if (!input.data('captcha_validating') && !isValidated(captcha.isValid()) && !!captcha.getCaptchaId()) {\n input.data('captcha_validating', true);\n that._validating = true;\n captcha.validate().done(function () {\n that._validating = false;\n that._checkElement(input);\n }).fail(function (data) {\n that._validating = false;\n if (data.error && data.error === 'handler_not_defined') {\n window.console.warn('Captcha\\'s validationHandler is not defined! You should either define a proper validation endpoint or declare a callback function to ensure the required behavior.');\n }\n });\n }\n if (isValidated(captcha.isValid())) {\n input.removeData('captcha_validating');\n return captcha.isValid();\n }\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() || this._validating) {\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 && !input.data('captcha_validating')) {\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.trigger('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 || kendo.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:', isAntiForgeryToken = this.getAttribute('name') === Editable.antiForgeryTokenName, fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName && !isAntiForgeryToken) {\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 = '