{"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","browser","outerWidth","_outerWidth","outerHeight","_outerHeight","parent","windowOuterWidth","removeClass","hasClass","wrapResize","style","percentRegExp","test","is","addClass","boxSizing","mozBoxSizing","webkitBoxSizing","msie","floor","version","zoom","children","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","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","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","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","e","sender","call","splice","paramName","useWithBlock","render","compile","parts","settings","argumentName","functionBody","_slotCount","Error","format","quote","string","escapable","lastIndex","c","meta","charCodeAt","toString","holder","k","v","partial","mind","gap","toJSON","rep","isFinite","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","documentMode","chrome","mobileChrome","safari","_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","detectClipboardAccess","commands","queryCommandSupported","cut","paste","clipboard","zoomLevel","ie11WidthCorrection","docEl","scrollHeight","clientHeight","cssBorderSpacing","borderSpacing","cssClass","docElement","eventCapture","addEventListener","placeholder","propertyChangeEvent","types","setAttribute","cssFloat","stableSort","threshold","sorted","field","sort","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","nodeList","querySelectorAll","parentNode","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","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","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","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","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","setDefaults","path","curr","amd","a1","a2","a3","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","direction","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","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","childrenLength","effectName","deferred","Deferred","done","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","easeOutBack","inner","outer","fitScale","absoluteURL","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","toOdataFilter","useOdataFour","operator","logic","filters","odataFilters","odataFiltersVersionFour","stripMetadata","hex16","createBoundary","createDelimeter","boundary","close","NEWLINE","createCommand","transport","item","httpVerb","command","transportUrl","commandPrefix","getOperationHeader","changeset","changeId","header","getOperationContent","content","DOUBLELINE","getOperations","collection","skipContent","requestBody","processCollection","colection","getBoundary","createBatchRequest","colections","batchURL","batch","headers","Content-Type","updated","destroyed","created","parseBatchResponse","responseText","changeBody","status","code","marker","jsonModel","responseMarkers","markerIndex","collections","models","passed","parse","neq","gt","gte","lt","lte","doesnotcontain","endswith","startswith","isnull","isnotnull","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","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","sortFields","sorts","sortObject","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","compare","skipItemSorting","aggregates","normalizeGroupWithoutCompare","anyGroupDescriptorHasCompare","groupDescriptors","groupValueComparer","calculateAggregate","accumulator","state","aggr","functionName","aggregate","functions","isNumber","isDate","serializeRecords","getters","originalFieldNames","fieldNames","originalName","setters","convertRecords","convertGroup","hasSubgroups","wrapDataAccess","originalFunction","converter","wrapDataAccessBase","fillLastGroup","originalGroup","newGroup","currOriginal","currentNew","mergeGroups","dest","group","flatGroups","indexFunction","groupIndex","itemIndex","groupsLength","indexFn","flattenGroups","at","wrapGroupItems","eachGroupItems","func","replaceInRanges","ranges","replaceInRange","replaceWithObservable","serverGrouping","viewIndex","removeModel","uid","indexOfPristineModel","_defaultId","indexOfModel","comparer","fieldNameFromModel","convertFilterDescriptorsField","convertDescriptorsField","inferSelect","firstField","secondField","optgroup","label","specified","inferTable","fieldIndex","cells","cell","empty","tbody","tBodies","rows","fieldCount","dataMethod","_data","_attachBubbleHandlers","inferList","list","textChild","textField","urlField","spriteCssClassField","imageUrlField","_loaded","hasChildren","ObservableObject","parsers","defaultValues","Comparer","StableComparer","operators","LocalTransport","RemoteTransport","Cache","DataReader","Transport","Node","Buffer","BatchBuffer","ASCENDING","CREATE","READ","UPDATE","DESTROY","SYNC","GET","ERROR","REQUESTSTART","PROGRESS","REQUESTEND","crud","identity","o","wrapAll","serializeFunctions","json","object","omitChangeEvent","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","_initializers","dirtyFields","editable","accept","isNew","functionFields","nullable","defaultValue","localeCompare","combine","comparers","asc","valueA","valueB","__position","desc","textOp","impl","ignore","accentFoldingFiltering","toLocaleLowerCase","op","getMatchRegexp","esc","doesnotstartwith","n","doesnotendwith","doesnotmatch","filterExpr","and","or","fieldFunctions","operatorFunctions","==","equals","isequalto","equalto","!=","ne","notequals","isnotequalto","notequalto","notequal","<","islessthan","lessthan","less","<=","le","islessthanorequalto","lessthanequal",">","isgreaterthan","greaterthan","greater",">=","isgreaterthanorequalto","greaterthanequal","ge","notsubstringof","toArray","range","inPlace","orderBy","orderByDescending","compiled","predicate","allData","groupPaging","groupAllData","itemCount","subgroupCount","groupBy","groupValue","_sortForGrouping","_sortGroups","sum","average","process","customGroupSort","query","groupDescriptorsWithoutCompare","normalizedSort","groupDescriptorsWithoutSort","filterCallback","groupDescriptor","parameters","operation","_store","clear","store","inmemory","schema","dataFunction","groupsFunction","serializeFunction","serializeGetters","_dataAccessFunction","fromName","_wrapDataAccessBase","_map","_prefetch","_pristineData","_ranges","_view","_pristineTotal","_destroyed","_pageSize","_page","_sort","_sortFields","_filter","_group","_aggregate","_total","_groupPaging","_groupsState","_shouldDetachObservableParents","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isServerGrouped","_isServerGroupPaged","_isGroupPaged","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","rangeSpan","_getCurrentRangeSpan","pristineData","_updatePristineForModel","_removeItems","removePristine","shouldRemovePristine","found","_eachItem","_removePristineForModel","hasGroups","_removeModelFromRanges","promises","_sendSubmit","_send","when","then","_accept","_syncEnd","_change","cancelChanges","_cancelModel","_changesCanceled","_markOfflineUpdatesAsDirty","__state__","hasChanges","serverGroup","_handleCustomErrors","_executeOnPristineForModel","_eachPristineItem","_pristineForModel","_modelCanceled","_submit","reject","_promise","converted","_params","_queueRequest","isPrevented","_dequeueRequest","_readAggregates","replaceSubset","itemIds","j","_serverGroupsTotal","_aggregateResult","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","outerStart","outerEnd","_sortRanges","_groupsFlat","_appendToGroupsFlat","_updateOuterRangesLength","_getGroupByUid","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setView","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","remote","_hasExpandedSubGroups","_findGroupedRange","itemsLength","hasNotRequestedItems","groupCount","itemsToSkip","taken","getGroupSubGroupCount","_fetchingGroupItems","skipped","getGroupItems","includeParents","excludeHeader","currentItems","subgroups","_composeItemsFilter","findSubgroups","_timeout","_groupItemsSuccessHandler","includeSubGroupCount","_subGroupCountSuccessHandler","totalField","_updateRangePristineData","_currentRequestTimeStamp","_skipRequestsInProgress","indexOfCurrentGroup","currentGroup","dataLength","indexes","rangesLength","_containsSubGroup","_cloneGroup","subgroup","currentSubGroup","filterTotal","setDefaultValue","fetch","_query","next","totalPages","_pageableQueryOptions","getGroupsFlat","groupsTotal","includeExpanded","_calculateGroupsTotal","itemsField","ignoreState","_groupsTotal","countGroupRange","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","pageSkip","_originalPageSkip","_originalSize","_adjustPageSkip","_groupRangeExists","_rangeExists","prefetch","_processRangeData","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","prevRangeEnd","currentDataLength","groupMapOptions","isGroupPaged","startField","endField","_mergeGroups","_getRangesMismatch","mismatch","prevGroup","eventData","paging","sorting","filtering","_omitPrefetch","_prefetchSuccessHandler","_multiplePrefetch","prevRange","_getPrevRange","_getNextRange","availableItemsCount","_removeModelFromRange","_updateRangesLength","rangeLength","mismatchFound","mismatchLength","lengthDifference","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","loaded","level","_childrenLoaded","load","_matchFilter","_hierarchicalFilter","_markHierarchicalQuery","_updateHierarchicalFilter","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","batchSize","batchBuffer","endreached","prefetching","prefetched","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","dropdowntree","Select","MultiSelect","DropDownTree","treeview","retrievePrimitiveValues","dataValueField","bindingTargetForRole","WidgetBindingTarget","parseBindings","token","colonIndex","keyValueRegExp","createBindings","binding","childrenCopy","unbindElement","whiteSpaceRegExp","valueField","valueUpdate","valuePrimitive","autoBind","BindingTarget","Binding","TemplateBinding","EventBinding","dom","destroyWidget","bindingTarget","deleteExpando","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_range","_valueIsObservableObject","_valueIsObservableArray","_source","valueLength","sourceItem","dataTextField","isObservableObject","cascadeFrom","listView","bound","_preselect","old","removeIndex","newValue","oldValues","selectedNode","nonPrimitiveValues","_isMultipleSelection","_getAllChecked","newValues","selectedValue","gantt","_isBound","scheduler","grid","arr","addLength","shifted","shiftedLength","toDestroy","hasValue","hasSource","hasEvents","hasChecked","hasCss","widgetBinding","specificBinders","applyBinding","binder","observableHierarchy","recursiveRead","parseTransition","transitionRegExp","SCRIPT","TRANSITION_START","TRANSITION_END","SHOW","HIDE","ATTACH","DETACH","sizzleErrorRegExp","bodyRegExp","LOAD_START","LOAD_COMPLETE","SHOW_START","SAME_VIEW_REQUESTED","VIEW_SHOW","VIEW_TYPE_DETERMINED","AFTER","classNames","stretchedView","footer","View","renderOnInit","_createElement","wrapInSections","_renderSections","_wrap","_evalTemplate","evalTemplate","_fragments","detachOnHide","detachOnDestroy","notInitialized","_eachFragment","ViewClone","triggerBeforeShow","triggerBeforeHide","showStart","showEnd","hideEnd","detach","purge","fragments","methodName","getElementById","contents","replaceWith","_wrapper","_createContent","_createHeader","_createFooter","ccontentElements","contentSelector","contentElement","Layout","containers","_createContainer","showIn","ViewContainer","Fragment","attach","running","after","locationID","previousEntry","theTransition","transitionData","ViewEngine","sandbox","_hideViews","rootView","layouts","viewContainer","showView","remoteViewURLPrefix","_findViewElement","reload","_createView","urlPath","wrapInner","_locate","$angular","_findViewElementById","_createSpaView","_createMobileView","defaultTransition","loader","getLayout","getLayoutProxy","modelScope","viewOptions","isJQueryPromise","fail","isNativePromise","hub","signalr","callbacks","_crud","server","touchDelta","touch1","touch2","x1","y1","x2","y2","dx","dy","center","distance","sqrt","getTouches","currentTarget","api","identifier","pointerId","withEachUpEvent","downEvents","OS","invalidZeroEvents","DEFAULT_MIN_HOLD","CLICK_DELAY","DEFAULT_THRESHOLD","PRESS","HOLD","SELECT","START","MOVE","CANCEL","TAP","DOUBLETAP","RELEASE","GESTURESTART","GESTURECHANGE","GESTUREEND","GESTURETAP","THRESHOLD","mouse","pointer","ENABLE_GLOBAL_SURFACE","TouchAxis","_updateLocationData","startLocation","velocity","timeStamp","timeDelta","initialDelta","Touch","userEvents","touchInfo","useClickAsTap","initialTouch","pressEvent","_clicks","supportDoubleTap","_moved","_finished","press","_holdTimeout","minHold","_trigger","_tap","_clickTimeout","_hold","preventMove","_shouldNotMove","_withinIgnoreThreshold","UserEvents","dispose","_start","endTime","activeTouches","isMoved","startTime","xDelta","yDelta","defaultAction","surfaceElement","preventIfMovingProxy","_maxTouches","multiTouch","allowSelection","captureUpIfMoved","fastTap","eventNS","surface","global","ownerDocument","pressed","touchAction","preventDragEvent","preventIfMoving","_isMoved","removeEventListener","_disposeAll","capture","_isMultiTouch","_apiCall","_maxTouchesReached","_select","which","_move","_eachTouch","_end","_click","pageX","pageY","matchingTouch","dict","defaultThreshold","numericCssPropery","within","containerBoundaries","minX","minY","maxX","maxY","checkTarget","targets","areas","theTarget","theFilter","targetLen","areaLen","targetElement","destroyDroppable","groupName","droppables","scrollableViewPort","scrollableRoot","$window","findScrollableParent","autoScrollVelocity","mouseX","mouseY","rect","AUTO_SCROLL_AREA","lastDropTarget","Movable","DropTarget","DropTargetArea","Draggable","draggables","dropTargets","dropAreas","KEYUP","DRAGSTART","DRAG","DRAGEND","DRAGCANCEL","HINTDESTROYED","DRAGENTER","DRAGLEAVE","DROP","TapCapture","_press","_release","attachEvent","captureNext","cancelCapture","PaneDimension","forcedEnabled","measure","scrollSize","makeVirtual","virtual","_virtualMin","_virtualMax","virtualSize","outOfBounds","forceEnabled","getTotal","rescale","scaledTotal","minScale","centerOffset","PaneDimensions","forcedMinScale","maxScale","newScale","centerCoordinates","PaneAxis","dimension","dragMove","resistance","translateAxis","Pane","elastic","gesturestart","gesture","gesturechange","coordinates","offsetX","offsetY","previousGesture","previousCenter","scaleDelta","scaleWith","TRANSFORM_STYLE","webkitTransformOrigin","_saveCoordinates","by","scaleTo","newCoordinates","draggable","dropTarget","_over","_out","_drop","dropped","destroyGroup","_cache","_activated","hold","_drag","_cancel","_afterEndHandler","_afterEnd","_captureEscape","cursorOffset","holdToDrag","autoScroll","cancelHold","_updateHint","boundaries","hintOffset","hint","_shouldIgnoreTarget","ignoreSelector","currentTargetOffset","scopeTarget","scopeFrom","cursorElement","_elementUnderCursor","_cursorElement","_scrollableParent","_lastEvent","_processMovement","_scrollCompenstation","_scrollVelocity","_scrollInterval","_withDropTarget","_autoScroll","yIsScrollable","xIsScrollable","isRootNode","yInBounds","xInBounds","compensation","initialTarget","utils","SNAPBACK_DURATION","SCROLLBAR_OPACITY","FRICTION","VELOCITY_MULTIPLIER","MAX_VELOCITY","OUT_OF_BOUNDS_FRICTION","ANIMATED_SCROLLER_PRECISION","RELEASECLASS","REFRESHCLASS","PULL","RESIZE","SCROLL","MOUSE_WHEEL_ID","ZoomSnapBack","tapCapture","DragInertia","freeze","_moveTo","paneAxis","_snapBack","velocityMultiplier","friction","snapBack","AnimatedScroller","_updateCoordinates","setCoordinates","setCallback","ScrollBar","elementSize","scrollMovable","alwaysVisible","paneSize","sizeRatio","visibility","avoidScrolling","pane","zoomSnapBack","animatedScroller","_native","prepend","scrollElement","fixedContainer","velocityX","velocityY","horizontalSwipe","originatedFromFixedContainer","verticalSwipe","scrollTo","mousewheelScrolling","pulled","_initAxis","_wheelEnd","_wheel","_wheelY","pullToRefresh","_initPullToRefresh","_wheelScroll","ctrlKey","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","NS","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","trap","_keepInTrap","removeTrap","shouldTrap","sortedElements","_focusableElements","_sortFocusableElements","_nextFocusable","_focus","tabIndex","attrName","contentWindow","_haveSelectionRange","elementType","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","TEMPLATE","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","_isShownOnMouseEnter","_showOn","showOn","_isShownOnClick","_mouseenter","autoHide","_mouseleave","_isShownOnFocus","_blur","showAfter","hideAfter","callout","_show","_appendContent","iframe","contentOptions","showIframe","_ajaxRequest","_initPopup","activate","ariaId","_positionCallout","_offset","arrow","_closeButtonClick","_closePopup","elementOffset","offsetAmount","isTopLeft","isFlipped","marginRule","createPromise","promiseAll","util","hex","hue2rgb","p","q","parseColor","color","BaseColor","matchNamedColor","RGB","namedColors","Bytes","HSV","HSL","DARK_TRESHOLD","Color","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","regexp","colorNames","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","isDark","fromBytes","fromRGB","fromHSV","fromHSL","normalizeText","REPLACE_REGEX","SPACE","objectKey","hashKey","zeroSize","baseline","measureText","measureBox","TextMetrics","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","_length","put","entry","_head","_tail","newer","older","baselineMarkerSize","styleKey","cacheKey","cachedResult","baselineMarker","textStr","_baselineMarker","offsetTop","second","arabicToRoman","roman","defined","definitionId","defId","deg","radians","DEG_TO_RAD","encodeUTF8","encodeBase64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","utfInput","KEY_STR","eventCoordinates","eventElement","isTransparent","limitValue","mergeSort","cmp","ai","bi","rad","degrees","power","valueOrDefault","bindEvents","getBoundingClientRect","clientTop","clientLeft","elementStyles","stylesArray","getPixels","size$1","unbindEvents","elementPadding","paddingLeft","paddingTop","setAccessor","geometryChange","getAccessor","defineAccessors","capitalized","toMatrix","matrix","ellipseExtremeAngles","ry","extremeX","extremeY","tolerance","PRECISION","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","Point","Transformation","calculateAngle","cx","cy","cos","sin","normalizeArcParameters","cosine","sine","xT","yT","xt2","yt2","rx2","ry2","constT","cxT","cyT","uX","uY","vX","vY","startAngle","angleCosine","angle","endAngle","signEndAngle","largeArc","swipe","acos","radiusX","radiusY","xRotation","bboxStartAngle","pointAccessor","_observerField","definePointAccessors","isOutOfEndPoint","endPoint","controlPoint","point","rotatedPoint","transformCopy","calculateCurveAt","points","t1","toCubicPolynomial","numberSign","solveQuadraticEquation","squareRoot","solveCubicEquation","Q","b3a","y3","z1","z2","ComplexNumber","nthRoot","multiplyConstant","negate","multiply","isReal","real","hasRootsInRange","rootField","intersection","polynomial","roots","curveIntersectionsCount","bbox","rayIntersection","intersectsRay","bottomRight","lineIntersectionsCount","intersects","arrayLimits","MAX_NUM","MIN_NUM","parseMatrix","matrixString","matrixRegexp","Matrix","unit","transformMatrix","transform$$1","elementScale","parentMatrix","parentElement","multiplyCopy","geometryAccessor","defineGeometryAccessors","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","rawBBox","Rect","union","elementsClippedBoundingBox","clippedBBox","toLineParamaters","isVertical","insertPosition","reflectionPoint","scaleCopy","quadraticToCubicControlPoints","scaledPoint","controlOut","translateWith","third","controlIn","parseParameters","SPLIT_REGEX","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","alignToScreen","ctm","getScreenCTM","decodeEntities","ENTITY_REGEX","innerText","exportGroup","exportRoot","svg","RootNode","skipBaseHref","rootGroup","getOrigin","Group","SVG_NS","renderPath","ctx","segment","prevSeg","prevOut","segments","bezierCurveTo","lineTo","closed","closePath","zIndexComparer","_zIndex","addGradientStops","gradient","stops","addColorStop","exportImage","surfaceOptions","cors","Surface$3","suspendTracking","draw","exportSVG","slice$1","thing","cls","classList","setCSS","getXY","drawDOM","doOne","setTransform","nodeInfo","_clipbox","_matrix","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template$$1","firstElementChild","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","splitElement","makePage","pages","pageNum","cacheImages","whenImagesAreActuallyLoaded","keepTogether","adjust","tag","bottomPadding","bottomBorder","saveAdjust","isFirst","fall","tableLayout","getComputedStyle$1","breakAtElement","fallsOnMargin","splitText","firstInParent","colgroup","thead","gridHead","querySelector","repeatHeaders","doc","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","padding","pageClassName","available","nextnode","selectNodeContents","findEOP","setEnd","endOffset","li","_destructive","cloneNodes","tfoot","ol","paddingRight","beforePageBreak","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","multiPage","_ignoreMargin","canceled","doStylesheet","ss","cssRules","ex","addRules","findFonts","font","splitProperty","getFontURL","styleSheet","family","bold","italic","addRule","styleSheets","getCounter","getAllCounters","getPrototypeOf","incCounter","inc","_root","resetCounter","doCounters","updateCounters","counterIncrement","counterReset","parseColor$1","pending","img","images","onload","onerror","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","Image","crossOrigin","alphaNumeral","pushNodeInfo","decoration","createsStackingContext","popNodeInfo","updateClipbox","intersect","emptyClipbox","cb","pseudoElt","defa","microsoft","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","getTransform","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","addArcToPath","Arc","curvePoints","curveTo","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","tl","tr","br","bl","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","Path","fill","stroke","formatCounter","evalPseudoElementContent","displayCounter","separator","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","saveClass","_renderElement","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","anticlockwise","drawBackground","background","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","Image$1","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","textAlign","elementIndex","listStyleType","fontSize","lineHeight","fontFamily","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","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$1","Circle","renderFormField","whiteSpace","floats","floating","toDataURL","renderText","actuallyGetRangeBoundingRect","rectangles","Infinity","prevLineBottom","doChunk","cc","origStart","setStart","isJustified","columnCount","findEOL","eol","estimateLineLength","startOffset","drawText","getFontHeight","textTransform","TextRect","decorate","line","ypos","underline","lineThrough","overline","align$$1","hasDecoration","selectNode","groupInStackingContext","main","_dom_zIndex","invert","mmul","b1","d1","e1","b2","d2","e2","kendoDrawing","kendoDrawingUtil","kendoUtil","ObserversMixin","Size","PI_DIV_2","MAX_INTERVAL","pow$1","Segment","geometry","OptionsStore","Element$1","GRADIENT","Paintable","IDENTITY_MATRIX_HASH","Measurable","DEFAULT_STROKE","ElementsArray","GeometryElementsArray","MultiPath","ShapeMap","SEGMENT_REGEX","PathParser","DEFAULT_STROKE$1","Arc$2","DEFAULT_FONT","DEFAULT_FILL","Text","Traversable","forEachReverse","Rect$2","StopsArray","GradientStop","Gradient","RadialGradient","easingFunctions","AnimationFactory","SurfaceFactory","Surface","BaseNode","NODE_MAP","renderSVG","testFragment","testContainer","hasParser","renderSVG$1","DefinitionMap","GradientStopNode","GradientNode","LinearGradientNode","RadialGradientNode","ClipNode","DefinitionNode","RTL","Surface$1","GroupNode","DASH_ARRAYS","SOLID","BUTT","ATTRIBUTE_MAP","PathNode","ArcNode","CircleNode","RectNode","ImageNode","TextNode","MultiPathNode","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","SurfaceCursor","PathNode$2","ArcNode$2","CircleNode$2","RectNode$2","ImageNode$2","TextNode$2","MultiPathNode$2","canvas","inBrowser","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","originPoint","distanceTo","doRound","arg0","arg1","arguments$1","minPoint","maxPoint","defineProperties","setOrigin","topLeft","topRight","bottomLeft","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","rect1","rect2","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","_optionsChange","radian","nextAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","_intervalCurvePoints","cp1","cp2","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","inAngleRange","angleRad","pointRadius","startPoint","arcParameters","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","parentObj","_clear","wrapped","parentTransform","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","newFill","strokeWidth","matrixHash","_bboxCache","_matrixHash","_bbox","_geometry","_splice","_add","_remove","_clearObserver","_setObserver","arc","arcTo","isRelative","lastControlIn","previousCommand","cubicControlPoints","lastSegment","multiPath","lineJoin","_addArcSegments","pathWidth","segmentBox","fromArc","toPath","metrics","_rect","traverse","childrenChange","_reparent","insertAt","removeAt","newParent","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","_fieldMap","_initMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","justifyAlign","reflow","groupsSize","ref$1","groupOrigin","elementOrigin","groupStart","elementStart","groupBox","arrangeElements","groupIdx","scaledStart","scaledSize","newStart","_initGroups","lineSize","bboxes","_newGroup","addGroup","_addToGroup","arg","_createStops","_userSpace","addStop","removeStop","_radius","_fallbackFill","fallbackFill","_items","easing","finish","abort","loop","wallTime","easingPosition","_stopped","preferred","_handler","_mousemove","_visual","_enableTracking","domNode","_kendoNode","srcElement","_suspendedTracking","resumeTracking","_elementOffset","_surfacePoint","coord","inverseTransform","observe","removeSelf","invalidate","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","definitions","clearDefinitions","childNode","createDefinitions","attachTo","setElement","nodes","childElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","hasDefinitions","definitionChange","refUrl","renderDefinitions","mapDefinitions","baseHref","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","definitionMap","addDefinitions","removeDefinitions","createDefinition","addDefinition","mapItem","removeDefinition","defs","rtl","_template","_rootElement","mouseover","mouseout","viewBox","implementation","hasFeature","dot","dash","longdash","dashdot","longdashdot","longdashdotdot","fill.opacity","stroke.color","stroke.width","stroke.opacity","renderData","mapFill","mapStroke","printPath","currentType","segmentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","renderStroke","dashArray","lineCap","renderFill","mapPosition","mapSource","renderPosition","encode","renderSource","setY","renderContent","renderTextAnchor","initClip","clearClip","setClip","beginPath","loadElements","setOpacity","globalAlpha","opactity","renderTo","getContext","invalidateHandler","_invalidate","_rescale","_devicePixelRatio","fixedScale","clearRect","shapes","_quadNode","pointShapes","inBounds","nodeRect","nodeBottomRight","inserted","halfWidth","halfHeight","initRoots","rootMap","rootElements","pointShape","sectorRoot","assignZindex","levelWeight","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","resolveDataURL","rootElement","loadingStates","currentShape","_currentShape","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","createLinearGradient","createRadialGradient","strokeStyle","lineWidth","mozDash","webkitLineDash","onLoad","onError","drawImage","fillText","strokeText","_pdfRect","$el","$clone","canvases","canvas$$1","skip_ws","tok_whitespace","read_stop","tok_length","tok_percent","read_linear_gradient","propName","to1","to2","tok_popen","tok_angle","tok_comma","tok_keyword","tok_pclose","read_url","tok_content","tok","cache1","tok_linear_gradient","tok_url","cache2","looking_at","last$$1","in_paren","in_string","TOOLTIP_TEMPLATE","TOOLTIP_CLOSE_TEMPLATE","SurfaceTooltip","_tooltipOptions","popupOptions","_openPopupHandler","_openPopup","_bindEvents","hideDelay","_showHandler","_showEvent","_surfaceLeaveHandler","_surfaceLeave","_mouseleaveHandler","_mousemoveHandler","_hideClick","_tooltipLeave","getPopup","shared","_tooltipShape","tooltip","_updateContent","tooltipOffset","_instance","surfaceOffset","_showTimeout","_autoHide","_measure","_closeButton","_popupRelatedTarget","DrawingSurface","_triggerInstanceHandler","_triggerInstanceEvent","_bindHandler","hideTooltip","_tooltip","showTooltip","classArray","SPACE_REGEX","alignPathToPixel","clockwise","angle1","angle2","isString","convertableToNumber","isObject","styleValue","isSizeField","SIZE_STYLES_REGEX","field$1","getSpacing","defaultSpacing","getTemplate","TemplateService","hasClasses","interpolateValue","COORD_PRECISION","mousewheelDelta","setDefaultOptions","sparseArrayLimits","MIN_VALUE","autoMajorUnit","relativeValue","scaleMultiplier","DEFAULT_PRECISION","rotatePoint","theta","numericComparer","boxDiff","Box","innerRadialStops","currentStop","usedSpace","innerRadius","currentStops","rectToBox","createAxisTick","tickOptions","tickX","tickY","createAxisGridLine","gridLine","lineStart","lineEnd","absoluteDateDiff","offsetDiff","TIME_PER_MINUTE","addTicks","ticks","toDate","startOfWeek","daysToSubtract","TIME_PER_DAY","addHours","tzDiff","roundedDate","setMinutes","TIME_PER_HOUR","addDuration","dateValue","YEARS","MONTHS","WEEKS","DAYS","HOURS","MINUTES","setSeconds","SECONDS","TIME_PER_SECOND","MILLISECONDS","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","TIME_PER_UNIT","dateIndex","baseUnitStep","lteDateIndex","sortedDates","currentDate","low","high","intlService","parseDates","dates","categoryRange","categories","autoBaseUnit","startUnit","startStep","unitSteps","nextStep","categoryLimits","span","autoBaseUnitSteps","maxDateGroups","autoUnit","FIT","autoUnitIx","BASE_UNITS","units","totalUnits","defaultBaseUnit","lastCategory","categoryIx","category","minDiff","TIME_PER_YEAR","TIME_PER_MONTH","TIME_PER_WEEK","initUnit","useDefault","autoAxisMin","narrow","axisMin","minValue","ZERO_THRESHOLD","autoAxisMax","axisMax","maxValue","limitCoordinate","COORDINATE_LIMIT","autoAxisOptions","seriesMin","seriesMax","narrowRange","autoMin","autoMax","majorUnit","autoOptions","roundToMajorUnit","remainderClose","totalAxisOptions","clearNullValues","axisOptions","userOptions","userSetMin","userSetMax","userSetLimits","minorUnit","ratio","remainder","timeUnits","applyDefaults","baseUnitTime","userMajorUnit","actualUnits","unitsToAdd","head","tail","initRange","axisCrossingValue","throwNegativeValuesError","autoAxisMin$1","autoAxisMax$1","logMaxRemainder","angularDistance","geometryTransform","__common_getter_js","ARC","AXIS_LABEL_CLICK","BLACK","CIRCLE","CROSS","DATE","DEFAULT_HEIGHT","DEFAULT_WIDTH","FORMAT_REGEX","HIGHLIGHT_ZINDEX","INSIDE","NOTE_CLICK","NOTE_HOVER","NOTE_LEAVE","OUTSIDE","TRIANGLE","WHITE","X","constants","defaultImplementation","IntlService","FORMAT_REPLACE_REGEX","FormatService","ChartService","current$1","DomEventsBuilder","current$2","services","HashMap","TRIGGER","InstanceObserver","FontLoader","Ring","Sector","DIRECTION_ANGLE","ShapeBuilder","ChartElement","BoxElement","ShapeElement","LINEAR","RADIAL","GRADIENTS","RootElement","FloatElement","DrawingText","ROWS_SPLIT_REGEX","TextBox","Title","AxisLabel","DEFAULT_ICON_SIZE","DEFAULT_LABEL_COLOR","Note","Axis","TIME_PER_MILLISECOND","MIN_CATEGORY_POINTS_RANGE","CategoryAxis","DateLabelFormats","EmptyDateRange","DateRange","DateCategoryAxis","MIN_VALUE_RANGE","NumericAxis","DateValueAxis","DEFAULT_MAJOR_UNIT","LogarithmicAxis","GridLinesMixin","RadarCategoryAxis","PolarAxis","RadarNumericAxisMixin","RadarNumericAxis","RadarLogarithmicAxis","WEIGHT","EXTREMUM_ALLOWED_DEVIATION","CurveProcessor","userImplementation","_intlService","auto","formatString","intl","localeAuto","locale","chart","isPannable","pannable","lock","_key","handlerMap","callObserver","fnName","requiresHandlers","fetchFonts","fonts","depth","MAX_DEPTH","loadFonts","Promise","preloadFonts","cosT","sinT","onCircle","targetBox","wrapPoint","arrayPoint","snapTo","alignTo","targetCenter","shrink","dw","dh","unpad","getHash","overlaps","r1","r2","r3","r4","toRect","hasSize","sizeFunc","middle","newRadius","radianAngle","ax","ay","adjacentBox","sector","midAndle","midPoint","hw","hh","ca","vector","startVector","endVector","dist","getBBox","angles","allAngles","startAngleIndex","endAngleIndex","createRing","innerEnd","initUserOptions","currentChild","getRoot","getSender","service","getService","chartService","translateChildren","childrenCount","renderVisual","createVisual","addVisual","createAnimation","renderComplete","chartElement","appendVisual","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","sibling","here","visuals","matched","hasHighlight","highlight","createHighlight","toggleHighlight","highlightOptions","customVisual","_highlight","highlightVisualArgs","series","runningTotal","createGradientOverlay","gradientOptions","overlay","createGradient","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","paddingBox","contentBox","hasBox","visualStyle","pointData","getElement","visualOptions","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","rootOptions","gradients","currentBox","createBackground","drawingGradient","hashCode","cleanGradients","_initDirection","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupElements","groupElementsCount","elementSize$$1","groupElementStart","elementBox","groupOptions","maxGroupElementsSize","groupsCount","groupsStart","groupElementsSize","_initContainer","_autoReflow","rowIdx","floatElement","textOptions","visualBox","visualFn","_boxReflow","visualContext","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","buildTitle","defaultOptions","titleOptions","alignRotation","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","distanceLeft","distanceRight","alignEnd","alignCenter","icon","childAlias","noteTemplate","aliasFor","wrapperBox","linePoints","createLine","defaultVisual","eventArgs","over","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsRange","labelsCount","labelOptions","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","labelPos","labelBox","firstTickPosition","nextTickPosition","labelX","labelY","labelsBetweenTicks","labelOffset","idx$1","slot","shouldRenderNote","noteSlot","secondAxis","axisLabelText","tmpl","limit","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","totalCount","mapCategories","map$$1","displayIndices","displayRange","valuesCount","dateAt","roundToBaseUnit","lowerEnd","expandEnd","roundToTotalStep","justifyEnd","valueStart","displayStart","valueEnd","displayEnd","minIdx","maxIdx","_indices","_values","upper","roundedStep","dataRange","maxDivisions","divisionOptions","dataRangeOptions","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","divisionRange","rounds","totalLimits","panRange","isEmpty","datesRange","indicesRange","maxDiff","rangeDiff","baseUnitIndex","autoBaseUnitStep","stepIndex","unitFormat","dateFormats","dateRange","totalOptions","totalMajorUnit","getDivisions","stepValue","divisions","startEdge","skipStep","getValue","valueOffset","isValidRange","newRange","axisCrossingValues","timeRange","exact","limittedRange","logMin","logMax","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","_lineOptions","minorOptions","ref$2","_minorIntervalOptions","minorStep","acceptOptionsRange","acceptNewRange","nextValue","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","reflowLabels","skipOption","stepOption","divCount","divAngle","majorIntervals","minorIntervals","minorAngle","minorRadius","band","ring","plotBandSlot","slotStart","toValue","slots","totalDivs","slotAngle","fromValue","instanceOptions","bandStyle","polarAxis","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","beta","axisType","minorSkipStep","dataPoints","tangent","initialControlPoint","lastControlPoint","controlPoints","tangent$1","cp0","controlPoints$1","controlPoints$2","tangent$2","removeDuplicates","firstControlPoint","secondControlPoint","invertAxis","lineFunction","calculateFunction","isLine","monotonic","oldXField","xField","yField","restrict","switchOrientation","isMonotonicByField","restrictControlPoint","cp","xValue","yValue","Gradients","SASS_THEMES","ExportMixin","skipLegacy","exportPDF","imageDataURL","Point2D","Box2D","mwDelta","BAR_GAP","BAR_SPACING","SANS","SANS11","SANS12","SANS16","TRANSPARENT","axisDefaults","areaSeries","rangeAreaSeries","barSeries","boxPlotSeries","bubbleSeries","bulletSeries","candlestickSeries","columnSeries","donutSeries","lineSeries","ohlcSeries","radarAreaSeries","radarLineSeries","rangeBarSeries","rangeColumnSeries","scatterLineSeries","waterfallSeries","pieSeries","funnelSeries","seriesDefaults","legend","baseTheme","markers","outliersField","meanField","_brightness","downColor","whiskers","mean","median","area","rangeArea","verticalRangeArea","bar","boxPlot","bubble","candlestick","column","pie","donut","funnel","horizontalWaterfall","ohlc","radarArea","radarLine","polarArea","polarLine","rangeBar","rangeColumn","scatterLine","verticalArea","verticalBoxPlot","verticalBullet","verticalLine","waterfall","categoryAxis","chartBaseTheme","autoTheme","mapColor","varName","queryStyle","hook","theme","defaultFont","titleFont","labelFont","letterPos","letter","seriesPos","seriesColors","fuse","arr1","arr2","gaugeBaseTheme","diagramBaseTheme","shapeDefaults","hover","handles","selectable","connectionDefaults","tools","registerTheme","themeName","gauge","diagram","treeMap","inactiveItems","errorBars","scatter","chartArea","crosshair","rangePlaceholderColor","connectorDefaults","thumb","colors","connectors","noteStyle","AXIS","TEXT","INACTIVE","INACTIVE_SHAPE","AXIS_MINOR","SERIES","SERIES_LIGHT","PRIMARY","DIAGRAM_HOVER","sass","findAxisByName","ChartAxis","countNumbers","getField","row","evalOptions","dryRun","needsEval","excluded","MAX_EXPAND_DEPTH","seriesCount","toGeometryPoint","lintPoint","stepAxis","stepDir","GeometryPoint","anyHasZIndex","hasGradientOverlay","areNumbers","wrapData","seriesItem","paneID","ID","appendIfNotNull","segmentVisible","pointVisibility","bindSegments","SeriesBinder","bindPoint","valueFields","equalsIgnoreCase","filterSeriesByType","currentSeries","seriesTypes","getDateField","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","seriesMissingValues","missingValues","AREA_REGEX","INTERPOLATE","hasValue$1","findNext","pointHasValue","outPoint","getter$$1","hasItem","createOutOfRangePoints","hasMinPoint","hasMaxPoint","_outOfRangeMinPoint","_outOfRangeMaxPoint","isSingleAxis","axisGroupBox","axisBox","paneAnchor","setValue","updateAxisOptions","targetOptions","axesOptions","axisIndex","groupSeries","axisIx","acceptKey","mouseKey","altKey","toChartAxisRanges","axisRanges","axisRange","createDiv","closestHandle","updateAxisOptions$1","yAxis","xAxis","tooltipAlignment","RAD_60","RAD_30","uat","ub","xComparer","groupBySeriesIx","seriesSegments","seriesIx","resolveAxisAliases","alias","aliases","AXIS_NAMES","pointByCategoryName","applyAxisDefaults","themeOptions","mapAxisOptions","axisColor","themeAxisDefaults","axisName","applySeriesDefaults","seriesType","baseOptions","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","_defaults","sortDates","uniqueDates","srcDates","transpose","rowIx","colCount","colIx","rowCount","clearMissingValues","originalOptions","fieldValue","originalValue","nullValue","DATA_FIELDS","triggerPaneRender","panes","notifyRender","datavizConstants","ChartPane","ChartPlotArea","Aggregates","STD_ERR","STD_DEV","percentRegex","standardDeviationRegex","ErrorRangeCalculator","INITIAL_ANIMATION_DURATION","FADEIN","GLASS","BORDER_BRIGHTNESS","TOOLTIP_OFFSET","START_SCALE","ERROR_LOW_FIELD","ERROR_HIGH_FIELD","X_ERROR_LOW_FIELD","X_ERROR_HIGH_FIELD","Y_ERROR_LOW_FIELD","Y_ERROR_HIGH_FIELD","LINE_MARKER_SIZE","GAP","ABOVE","BELOW","SMOOTH","STEP","AREA","BAR","BOX_PLOT","BUBBLE","BULLET","CANDLESTICK","COLUMN","DONUT","FUNNEL","HORIZONTAL_WATERFALL","LINE","OHLC","PIE","POLAR_AREA","POLAR_LINE","POLAR_SCATTER","RADAR_AREA","RADAR_COLUMN","RADAR_LINE","RANGE_AREA","RANGE_BAR","RANGE_COLUMN","SCATTER","SCATTER_LINE","VERTICAL_AREA","VERTICAL_BOX_PLOT","VERTICAL_BULLET","VERTICAL_LINE","VERTICAL_RANGE_AREA","WATERFALL","EQUALLY_SPACED_SERIES","LEGEND_ITEM_CLICK","LEGEND_ITEM_HOVER","LEGEND_ITEM_LEAVE","SERIES_CLICK","SERIES_HOVER","SERIES_OVER","SERIES_LEAVE","PLOT_AREA_CLICK","PLOT_AREA_HOVER","PLOT_AREA_LEAVE","DRAG_END","DRAG_START","ZOOM_START","ZOOM","ZOOM_END","SELECT_START","SELECT_END","RENDER","SHOW_TOOLTIP","HIDE_TOOLTIP","PANE_RENDER","LOGARITHMIC","CATEGORY","INSIDE_END","INSIDE_BASE","OUTSIDE_END","MOUSEWHEEL","MOUSEWHEEL_DELAY","DEFAULT_ERROR_BAR_WIDTH","ErrorBarBase","CategoricalErrorBar","CategoricalChart","PointEventsMixin","NoteMixin","LinePoint","LineSegment","StepLineMixin","StepLineSegment","SplineSegment","LineChartMixin","ClipAnimation","ClipAnimationMixin","LineChart","AreaSegment","StepAreaSegment","SplineAreaSegment","AreaChart","AxisGroupRangeTracker","BarLabel","BAR_ALIGN_MIN_WIDTH","Bar","ClusterLayout","StackWrap","BarChart","Candlestick","CandlestickChart","BoxPlot","VerticalBoxPlot","BoxPlotChart","ScatterErrorBar","ScatterChart","Bubble","BubbleChart","Target","Bullet","BulletChart","BaseTooltip","CrosshairTooltip","Crosshair","ChartContainer","PlotAreaBase","allPaneAxes","PlotAreaEventsMixin","SeriesAggregator","DefaultAggregates","RangeBar","RangeBarChart","RangeLinePoint","DEFAULT_FROM_FORMAT","DEFAULT_TO_FORMAT","RangeAreaPoint","RangeAreaSegment","SplineRangeAreaSegment","StepRangeAreaSegment","RangeAreaChart","OHLCPoint","OHLCChart","WaterfallSegment","WaterfallChart","AREA_SERIES","OUT_OF_RANGE_SERIES","CategoricalPlotArea","Highlight","Pannable","ZoomSelection","MousewheelZoom","LegendLayout","LegendItem","HORIZONTAL","POINTER","CUSTOM","Legend","PlotAreaFactory","ZOOM_ACCELERATION","SELECTOR_HEIGHT_ADJUST","Selection","SharedTooltip","BarChartAnimation","BubbleAnimation","FadeInAnimation","PieAnimation","ScatterLineChart","XYPlotArea","PieSegment","PieChartMixin","PIE_SECTOR_ANIM_DELAY","PieChart","PiePlotArea","DonutSegment","DONUT_SECTOR_ANIM_DELAY","DonutChart","DonutPlotArea","DEFAULT_PADDING","PolarPlotAreaBase","PolarScatterChart","PolarLineChart","SplinePolarAreaSegment","PolarAreaSegment","PolarAreaChart","PolarPlotArea","RadarLineChart","SplineRadarAreaSegment","RadarAreaSegment","RadarAreaChart","RadarSegment","RadarClusterLayout","RadarStackLayout","RadarBarChart","RadarPlotArea","FunnelSegment","FunnelChart","FunnelPlotArea","COLOR","FIRST","FROM","MAX","MIN","NOTE_TEXT","SUMMARY_FIELD","TO","MOUSEMOVE","CONTEXTMENU","MOUSELEAVE","MOUSEMOVE_DELAY","Chart","_axis","chartsVisual","chartContainer","_pane","_plotArea","backgroundVisual","_bgVisual","sumOrNull","avg","_valueFields","_otherFields","_nullValue","_undefinedValue","otherFields","_makeValue","canonicalFields","pointIx","fieldData","srcValueFields","srcPointFields","_bindFromArray","sourceFields","_bindFromObject","initialValue","srcFields","srcFieldName","sourceFieldName","errorValue","initGlobalRanges","deviation","errorRange","standardError","deviationMatch","valueGetter","createValueGetter","getAverage","getStandardDeviation","globalRange","getStandardError","getErrorRange","pointValue","percentValue","isSample","squareDifferenceSum","endCaps","getAxis","valueBox","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","seriesValueAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","pointOptions","pointType","invertAxes","plotValue","otherValues","categorySum","otherStack","isStacked100","plotRange","positive","prevValue","isStackedBar","otherValue","isStacked","categoryAxisCrossingValue","stackLimits","stackName","pIx","updateStackRange","limits","errorTotals","chartSeries","limitsCache","addErrorBar","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","errorBar","updateRange","createPoint","owner","noteText","evalPointOptions","doEval","namedValueAxes","categorySlots","chartPoints","valueSlot","pointSlot","categorySlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","crossingValues","seriesIx$1","currentCategory","seriesIx$2","_outOfRangeCallback","_bindPoint","outOfRangePoint","bindCache","_bindCache","formatPointValue","createNote","tooltipTracking","labelText","_rendered","createMarker","formatValue","markerBorder","markerBox","_childBox","childBox","noteTargetBox","reflowLabel","defaultColor","highlightVisual","halfSize","tooltipAnchor","horizontalAlign","verticalAlign","clipBox","overlapsBox","unclipElements","toGeometryPoints","segmentVisual","coords","getNearestPoint","calculateStepPoints","stepPoint","previousPoint","curveProcessor","curve","renderSegments","sortedPoints","pointCount","_segments","sortPoints","createSegment","_addSegment","assumeZero","nearestPoint","pointBox","allPoints","nearestPointDistance","_setEnd","setX","_setChildrenAnimation","animationPoints","prevSegment","stackPoints","createFill","createStroke","strokeSegments","_strokeSegments","createStrokeSegments","segmentsFromPoints","stackSegments","createStackSegments","hasStackSegment","fillSegments","hasStackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","previousSegment","_gapStackPoints","stackPoint","_stackPoints","endIdx","pointOffset","currentSeriesIx","gapStackPoint","startIdx","_previousSegmentPoint","_createGapStackPoint","segmentIx","seriesIdx","chartAxisRanges","chartRange","textBox","alignToClipBox","parentBox","createLabel","rectVisual","createRect","strokeOpacity","getBorderColor","baseColor","borderColor","slotSize","positionAxis","clusterType","stackType","cluster","stackWrap","negativeColor","getStackWrap","stackGroup","wraps","_stackGroup","zeroSlot","_setAnimationOptions","pointVisual","mid","ocSlot","lhSlot","realBody","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","valueParts","splitValue","whiskerSlot","boxSlot","medianSlot","meanSlot","q1","q3","reflowBoxSlot","reflowWhiskerSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","renderOutliers","outlierValue","markersBorder","outliers","outerFence","reflowOutliers","filterOutliers","seriesAxes","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxisName","yAxisName","xAxisRange","yAxisRange","namedXAxes","namedYAxes","currentSeriesPoints","highlightGroup","_maxSize","negativeValues","updateBubblesSize","pointsCount","animationOptions","minSize","minR","maxR","minArea","maxArea","areaRange","areaRatio","baseZIndex","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","bulletOptions","getStyle","pointColor","paddingBottom","tooltipOptions","formatService","initAxisName","showAt","stickyMode","formattedValue","getAnchor","ref_options","moveLine","getBox","dim","axisLineBox","currentAxis","shouldClip","_clipBox","chartsBox","clipRect","unclipLabels","charts","appendAxis","appendAxisAt","appendChart","i$1","removeAxis","removeChart","allAxes","vGridLines","hGridLines","axisValueField","length$1","axis$1","lineBox$1","paneIndex","initSeries","crosshairs","createPanes","createCrosshairs","setTitle","currentPane","paneOptions","panesLength","currentCrosshair","removeCrosshairs","hideCrosshairs","findPane","matchingPane","findPointPane","axisToRemove","filteredAxes","chartToRemove","filteredCharts","addToLegend","seriesVisible","itemLabelOptions","markerColor","inactiveItemsLabels","visibleInLegend","active","groupAxes","paneIx","paneAxes","xAxes","yAxes","any","groupSeriesByPane","seriesByPane","seriesPaneName","filterVisibleSeries","reflowPanes","detachLabels","reflowAxes","reflowCharts","redraw","panesArray","crossingAxes","valuesToAdd","alignAxisTo","targetAxis","targetCrossingValue","slotEdge","targetEdge","alignAxes","paneId","anchorCrossings","pane$1","paneId$1","visible$1","anchor$1","anchorCrossings$1","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","_overlap","_mirrored","shrinkAxisWidth","overflowX","shrinkAxisHeight","shrinked","overflowY","fitAxes","paneBox","currentAxis$1","reflowPaneAxes","autoRotateAxisLabels","groupedAxes","rotated","chartPane","percents","currentPane$1","i$2","currentPane$2","remainingHeight","remainingPanes","autoHeightPanes","backgroundBox","axisA","axisB","axesCount","chartsBoxes","addBackgroundPaths","multipath","backgroundContainsPoint","pointsByCategoryIndex","pointsBySeriesIndex","seriesIndex","filterPoints","pointsBySeriesName","findPoint","paneByPoint","detachAxisGroupLabels","labelAxis","labelAxisCount","createLabelAxis","onAxis","_dispatchEvent","defaultAggregates","fieldAggregate","seriesFields","_seriesFields","rootAggregate","_series","_binder","canonicalName","aggregatePoints","srcPoints","srcValues","_bindPoints","firstDataItem","_bindField","fromOptions","toOptions","labelFrom","_createLabel","labelTo","plotLimits","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","toPoints","fromSegments","fromPath","createCurveSegments","fromSlot","toSlot","oPoints","cPoints","lhPoints","oSlot","cSlot","createSegments","summary","totalCategories","prevPoint","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","paneSeries","visibleSeries","groupIx","groupSeriesByCategoryAxis","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","axisPane","dateAxis","srcSeries","processedSeries","_currentPointsCache","_seriesPointsCache","categoryField","aggregateSeries","filterSeries","outOfRangePoints","clearSeriesPointsCache","seriesSourcePoints","srcData","getFn","aggregator","categoryItem","categoryIdx","categoriesToAdd","defaultPaneName","paneName","stackableChartOptions","firstSeries","axisSeries","categoryAxes","barChart","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","axisRequiresRounding","categoryAxisName","categoryAxisIndex","seriesAxis","centeredSeries","aggregatedAxis","primaryAxis","defaultAxisRange","tracker","defaultRange","eventType","_eventCoordinates","pointPane","_points","arrayPoints","togglePointHighlight","toggleHandler","isHighlighted","_active","_panAxes","updatedAxes","marqueeColor","marquee","_marquee","removeElement","setStyles","zoomPane","_zoomPane","_zoomPaneClipBox","_selectionPosition","elementOffset$$1","selectionPosition","_updateAxisRanges","updateRanges","legendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","_unsetActivePoint","createContainers","createLegendTitle","createItems","userAlign","itemsContainer","hasTitle","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","_registry","registry","_dateAxis","initOptions","createElements","_index","onPane","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","leftMask","rightMask","borderLeftWidth","borderRightWidth","mousewheel","_mousewheelHandler","_mousewheel","_domEvents","tap","_gesturestart","_gesturechange","gestureend","_gestureend","_mwTimeout","_state","_rangeEventArgs","_value","moveTarget","oldRange","rightClick","_toModelCoordinates","_slot","rightMaskWidth","leftMaskWidth","zDir","tooltipPoints","_slotAnchor","_defaultAnchor","categoryText","categoryFormat","centerPoint","slotCenter","fromScale","fadeTo","missingValue","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","xAxisOptions","yAxisOptions","createXYAxis","seriesAxisName","firstPointValue","inferredDate","namedAxes","isLog","typeSamples","axisPane$1","xAxesOptions","yAxesOptions","xValues","yValues","brightnessValue","themeLabels","animationDelay","labelHeight","labelWidth","lp","labelsOptions","labelsDistance","createSegmentVisual","borderOptions","singleSegment","createLegendItem","pointVisible","legendOptions","legendItems","colorsCount","anglePerValue","constantAngle","explode","evalSegmentOptions","segmentOptions","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","seriesConfigs","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","secondBox","lr","firstBox","remaining","_takeDistance","amount","boxX","labelDistance","boxY","hAlignLabel","connectorsColor","connectorLine","sr","crossing","_connectorLines","pointInCircle","pieCenter","bboxBottom","autoFit","reverseValue","originalX","sector_center","createPieChart","pieChart","totalSize","seriesWithoutSize","holeSize","currentSeries$1","createDonutChart","donutChart","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","valueRadius","_polarAxisCenter","centerSegment","_hasMissingValuesGap","scatterChart","isFirstDataPoint","isLastDataPoint","slotSector","childSector","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","labelPadding","dynamicSlopeReflow","totalHeight","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","firstSegment","maxSegment","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","topMostWidth","finalNarrow","dynamicSlope","createFunnelChart","funnelChart","errorLow","errorHigh","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","bindCategories","fontLoaded","_redraw","_attachEvents","_setElementClass","seriesCopies","applySeriesColors","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","_model","findPaneByName","findPaneByIndex","seriesName","categoryName","togglePointsHighlight","_sharedTooltip","_surfaceWrap","renderAs","_destroySurface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","_getModel","_destroyView","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","_navState","_cancelDomEvents","exportOptions","currentOptions","_pannable","zoomable","_zoomSelection","_mousewheelZoom","_toggleDragZoomEvents","allowDrag","allowZoom","_dragZoomEnabled","_touchAction","_toggleDomEvents","drag","domEvents","toggleDrag","toggleZoom","_createSharedTooltip","seriesColor","_createPlotArea","_modelOptions","skipSeries","selections","_selectStart","_selectEnd","_clickHandler","_mouseover","_mouseout","_toDocumentCoordinates","obj$1","_shouldAttachMouseMove","_hoveredPoint","hovered","_stopChartHandlers","_gestureDistance","_zooming","previousGestureDistance","mousewheelZoom","_drawingChartElement","leave","_startNavigation","_suppressHover","ranges$1","_endNavigation","prevented","totalDelta","chartEvent","_getChartElement","_elementPadding","_padding","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","activePoint","hoveredPoint","_activePoint","_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","_hideElement","nameColumn","colorMarker","colspan","fadeOut","always","tooltipTemplate","xLow","xHigh","yLow","yHigh","_chart","_options","_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","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","labelAngle","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","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","QRDataMode","getVersionIndex","getBitsCharacterCount","bitsInCharacterCount","getModeCountString","modeIndicator","getStringBitsLength","modes","inputLength","mod3","characters","*","startColumn","getNextCell","getNextRemainderCell","blocks","block","codewordIdx","blockIdx","cellVisitor","dataString","dataBitsCount","terminatorIndex","paddingCodewordIndex","errorCodewordsCount","generator","generatorPolynomial","steps","errorCodewords","dataStream","versionCodewordsInformation","dataBlock","blockCodewordsCount","groupBlocksCount","messagePolynomial","codeword","codewordStart","dataBlocks","errorBlocks","versionGroups","previousMode","modeString","numeric","numericMatch","alphaMatch","alphaNumeric","alphaNumericMatch","nextMode","dataCodewordsCount","errorCorrectionLevel","encodedString","codeLength","generatorNumber","polynomialLength","valueNumber","valueString","numberX","numberY","yLength","xLength","modules","quotient","nextX","nextY","startDistance","adjacentSameBits","getEncodingResult","inputString","encodingMode","utfBOM","initialModeCountStringLength","encodeCharacter","significantOnes","bytesCount","getBytesCount","bc","optimalMatrix","encoder","encodingResult","versionInformation","DEFAULT_SIZE","QUIET_ZONE_LENGTH","DEFAULT_ERROR_CORRECTION_LEVEL","DEFAULT_BACKGROUND","DEFAULT_DARK_MODULE_COLOR","MIN_BASE_UNIT_SIZE","quietZoneSize","dataSize","contentSize","errorCorrection","_calculateBaseUnit","_renderBackground","_renderMatrix","matrixSize","QRCodeFunctions","QRCodeFields","ClonedObject","FadeOutAnimation","NavigatorHint","NAVIGATOR_PANE","NAVIGATOR_AXIS","Navigator","AUTO_CATEGORY_WIDTH","StockChart","_initialOpacity","chartPadding","scroll","tooltipStyle","minPos","maxPos","posRange","clearHideTimeout","_visible","borderTopWidth","_hideTimeout","_hideAnimation","chartObserver","clean","_redrawSelf","initSelection","mainAxis","axisClone","selectStart","selectEnd","setRange","filterAxes","redrawSlaves","slavePanes","navigatorAxis","naviRange","inNavigator","liveDrag","showHint","readSelection","ref_selection_options","_zoom","fromIx","toIx","_zoomEnd","naviOptions","__navi","attachAxes","attachSeries","valueAxes","equallySpacedSeries","justifyAxis","_collapse","autoBindElements","user","navigatorSeries","dateField","stockDefaults","destroyNavigator","_fullRedraw","_dirty","partialRedraw","_seriesCount","copyNavigatorCategories","buildFilter","KendoStockChart","StockInstanceObserver","navigatorFilter","navigatorCreated","_initNavigatorOptions","navigatorOptions","isTouch","isFirefox","dummyAxis","hasServerFiltering","hasSelect","_onNavigatorCreated","_navigator","_initNavigatorDataSource","dsOptions","_navigatorDataChangedHandler","_onNavigatorDataChanged","_navigatorDataSource","_bindNavigatorSeries","naviCategories","axesLength","_removeNavigatorDataSource","_onNavigatorFilter","navigatorDataSource","wrapNumber","TOP_OFFSET","SharedTooltip$1","DEAULT_BAR_WIDTH","DEAULT_BULLET_WIDTH","NO_CROSSHAIR","Sparkline","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointWidth","normalizeOptions","SparklineTooltip","KendoSparkline","sqr","renderSize","renderPos","romanToArabic","memoize","isUnicodeLetter","RX_UNICODE_LETTER","withExit","Return","Extent","Location","lat","lng","DISTANCE_ITERATIONS","DISTANCE_CONVERGENCE","DISTANCE_PRECISION","FORMAT","loc","datum","greatCircleTo","bearing","fromLat","fromLng","dToR","datums","WGS84","U1","sinU1","cosU1","U2","sinU2","cosU2","lambda","prevLambda","converged","sinLambda","cosLambda","sino","cosA2","coso","cos2om","sigma","sinA","u2","deltao","azimuthFrom","azimuthTo","fromLngLat","ll","fromLatLng","nw","se","containsAny","locs","include","includeAll","edges","sw","extent","World","Attribution","itemTemplate","_extent","_itemText","inZoomLevel","_inZoomLevel","minZoom","maxZoom","inArea","_inArea","button","BUTTONS","_keyroot","_keydown","panStep","_pan","iconClass","PLUS","MINUS","FF_PLUS","FF_MINUS","ZoomControl","zoomStep","PI_DIV_4","Mercator","MAX_LNG","MAX_LAT","INVERSE_ITERATIONS","INVERSE_CONVERGENCE","centralMeridian","clamp","proj","lng0","_projectLat","ecc","ts","con","inverse","_inverseY","dphi","ecch","phi","SphericalMercator","Equirectangular","EPSG3857","crs","_proj","_tm","_itm","toLocation","EPSG3395","EPSG4326","projections","Layer","_beforeReset","_panEnd","_activate","_updateAttribution","_deactivate","_applyExtent","_setVisibility","matchMinZoom","matchMaxZoom","inside","attribution","layers","ShapeLayer","_initRoot","_markers","_dataChange","_translateSurface","_load","_clearMarkers","_loader","GeoJSONLoader","shapeCreated","cancelled","_createMarker","layer","featureCreated","_panning","locationToView","locator","defaultStyle","unwrap","_loadGeometryTo","_featureCreated","_shapeCreated","_loadPolygon","_setLineFill","_loadPoint","_loadShape","rings","_buildPolygon","geojson","features","geometries","BubbleLayer","locationField","opt","scaleType","_scaleType","_createSymbol","_drawSymbol","scales","symbols","SqrtScale","domain","domainRange","outputRange","_domain","_ratio","rel","Symbols","geo","roundPoint","drawingUtil","TileLayer","subdomains","viewType","_viewType","locationToLayer","viewOrigin","_updateView","TileView","extentToPoint","pool","TilePool","tileSize","urlTemplate","_center","_viewOrigin","pointToTileIndex","tileCount","firstTileIndex","indexToPoint","subdomainText","subdomainIndex","tile","createTile","currentIndex","tileOptions","wrapIndex","subdomain","errorUrlTemplate","wrapValue","ImageTile","errorUrl","urlResult","urlOptions","z","quadkey","_create","maxDist","BingLayer","_scheme","_onMetadata","_fetchMetadata","imagerySet","uriScheme","resource","resourceSets","resources","imageUrl","imageUrlSubdomains","zoomMin","zoomMax","_addAttribution","BingView","imageryProviders","coverageAreas","tileQuadKey","digit","quadKey","bing","MarkerLayer","_markerClick","titleField","_addOne","Marker","addTo","getLocation","getTitle","renderTooltip","contentTemplate","contentUrl","CSS_PREFIX","FRICTION_MOBILE","DEFAULT_ZOOM_RATE","Map","_getOrigin","_initScroller","_initMarkers","_initControls","_initLayers","controls","layerDefaults","markerDefaults","wraparound","scroller","zoomControl","_setExtent","_getExtent","_layerSize","layerToLocation","viewToLocation","eventOffset","eventToView","eventToLayer","eventToLocation","_setOrigin","_origin","layerWidth","layerHeight","_zoomAround","pivot","_createAttribution","_createNavigator","_createZoomControl","_createControlElement","defaultPos","posSelector","_navigatorPan","_navigatorCenter","bounds","_virtualSize","_scrollEnd","_zoomControlChange","_scroll","_scaleStart","_doubleTap","_scrollOffset","_panComplete","_panEndTS","_scaleToZoom","gestureCenter","centerLocation","tiles","_resetScroller","xBounds","yBounds","_renderLayers","scrollWrap","toZoom","postZoom","fromZoom","Range","rangeIntegerScale","Utils","findRadian","sngXComp","sngYComp","Easing","Ticker","EPSILON","isNearZero","isDefined","isUndefined","has","isBoolean","isType","simpleExtend","initArray","serializePoints","res","deserializePoints","randomInteger","DFT","getMatrixAngle","getMatrixScaling","sX","sY","findAngle","thisRef","what","fold","constraint","bisort","sortfunc","easeInOut","adapters","lastTime","_this","timerDelegate","onTimerEvent","addAdapter","onComplete","removeHandler","caller","onStep","seekTo","seekFromTo","intervalId","initState","propagate","movement","intersectLine","start1","end1","start2","end2","isSegment","num1","num2","tangensdiff","normalVariable","randomId","chars","PathDefiner","Intersect","RectAlign","Polar","MatrixVector","Geometry","HashTable","Dictionary","Queue","Set","Link","Graph","HITTESTAREA","plus","minus","times","lengthSquared","middleOf","toPolar","useDegrees","halfpi","factor","isOnLine","o1","u1","inflate","tempStr","xy","rotatedBounds","delimiter","staicPoint","adornerCenter","scaled","thisCenter","rectBottomRight","Empty","rectWithLine","rects","reverseAngle","alignValues","_singleAlign","_left","_right","stretch","_stretch","_top","_middle","_bottom","alignCalc","applyRect","fromSVGMatrix","vm","fromMatrixVector","fromList","translation","scaling","nums","fromMatrix","_distanceToLineSquared","pt1","pt2","vx","vy","distanceToLine","distanceToPolyline","minimum","_buckets","_createGetBucket","_bucketExists","containsKey","hashId","bucket","hashes","_hashes","ht","_hashString","_objectHashId","_hashId","dictionary","_hashTable","forEachValue","forEachKey","enqueue","kv","links","outgoing","incoming","associatedShape","shortForm","isVirtual","isIsolated","isLinkedTo","link","getComplement","getChildren","getParents","balance","adjacentTo","removeLink","hasLinkTo","degree","incidentWith","getLinksWith","getNeighbors","neighbors","connection","sourceFound","targetFound","associatedConnection","getCommonNode","isBridging","v1","v2","getNodes","changeSource","changeTarget","changesNodes","oldSource","oldTarget","directTo","createReverseEdge","reversed","idOrDiagram","_nodeMap","_hasCachedRelationships","cacheRelationships","forceRebuild","assignLevels","startNode","visited","getConnectedComponents","componentId","components","graph","componentIndex","setItemIndices","_collectConnectedNodes","addNodeAndOutgoings","setIds","nodeIndex","nextId","calcBounds","getSpanningTree","levelCount","ni","cn","newLink","treeLevels","_addNode","addLink","takeRandomNode","excludedNodes","incidenceLessThan","isHealthy","hasNode","sourceOrLink","foundSource","foundTarget","addExistingLink","getNode","addNode","removeAllLinks","hasLink","linkOrId","nodeOrId","_removeNode","removeNode","areConnected","n1","n2","layoutRect","newNode","newLinks","saveMapping","nodeMap","linkMap","nOriginal","nCopy","linkOriginal","linkCopy","linearize","addIds","depthFirstTraversal","foundNode","_dftIterator","breadthFirstTraversal","_stronglyConnectedComponents","excludeSingleItems","lowLinks","connected","component","findCycles","isAcyclic","isSubGraph","otherArray","thisArray","makeAcyclic","oneLink","oneNode","rev","intensityCatalog","flowIntensity","catalogEqualIntensity","sourceStack","targetStack","intensity","targetLink","sources","si","sourceLink","maxdiff","ril","vertexOrder","kk","reversedEdges","Predefined","EightGraph","Mindmap","ThreeGraph","BinaryTree","levels","createBalancedTree","Linear","Tree","siblingsCount","Forest","trees","createBalancedForest","Workflow","Grid","graphString","previousLink","lin","_addShape","kendoDiagram","undoable","addShape","_addConnection","connect","createDiagramFromGraph","doLayout","randomSize","gli","sourceShape","targetShape","shi","SpringLayout","layoutGraph","limitToView","counter","lastAdded","news","treeCount","createRandomConnectedGraph","nodeCount","maxIncidence","isTree","poolNode","randomAdditions","randomDiagram","shapeCount","diffNumericOptions","sizeOptionsOrDefault","normalizeDrawingOptions","drawingOptions","getColor","lineAngle","toDrawingRect","Scale","Translation","Rotation","CompositeTransform","AutoSizeableMixin","VisualBase","TextBlock","Rectangle","MarkerBase","CircleMarker","ArrowMarker","MarkerPathMixin","Line","Polyline","Canvas","Markers","none","arrowStart","filledCircle","arrowEnd","FULL_CIRCLE_ANGLE","toMatrixVector","Length","_transform","_renderTransform","rotateMatrix","scaleMatrix","translatePoint","_setScale","originWidth","_originWidth","originHeight","_originHeight","_setTranslate","_initSize","autoSize","_updateSize","_diffNumericOptions","_originSize","drawingContainer","_hover","_measured","_boundingBox","_fill","_stroke","strokeOptions","fillOptions","GradientClass","_textColor","_font","_initText","fontOptions","fontStyle","fontWeight","sizeChanged","_initPath","_setPosition","_drawPath","sizeOptions","_transformToPath","positionMarker","targetSegment","_linePoints","_getPath","_normalizeMarkerOptions","startCap","endCap","_removeMarker","_createMarkers","markerType","_positionMarker","_capMap","_redrawMarker","pathChange","pathOptions","pathCapType","optionsCap","_redrawMarkers","_createElements","_setData","_updatePath","_pointsDiffer","currentPoints","differ","_initImage","_childrenChange","toFront","toBack","_reorderChildren","toIndex","drawingChildren","fixedPosition","childBoundingBox","_includeInBBox","drawingRect","_initCircle","circleOptions","_circle","_translate","_viewBox","clearHtml","testKey","hitToOppositeSide","hit","canDrag","hitTestShapeConnectors","connector","HIT_TEST_DISTANCE","noMeta","PositionAdapter","LayoutUndoUnit","CompositeUnit","ConnectionEditUnit","ConnectionEditUndoUnit","DeleteConnectionUnit","DeleteShapeUnit","TransformUnit","AddConnectionUnit","AddShapeUnit","PanUndoUnit","RotateUnit","ToFrontUnit","ToBackUnit","UndoRedoService","EmptyTool","ScrollerTool","PointerTool","SelectionTool","ConnectionTool","ConnectionEditTool","ToolService","ConnectionRouterBase","LinearConnectionRouter","PolylineRouter","CascadingRouter","AdornerBase","ConnectionEditAdorner","ConnectorsAdorner","ResizingAdorner","Selector","ConnectorVisual","Cursors","grip","cross","south","east","west","north","rowresize","colresize","DEFAULT_SNAP_SIZE","DEFAULT_SNAP_ANGLE","ITEMROTATE","ITEMBOUNDSCHANGE","MIN_SNAP_SIZE","MIN_SNAP_ANGLE","MOUSE_ENTER","MOUSE_LEAVE","SCROLL_MIN","SCROLL_MAX","PAN","ROTATED","TARGET","HANDLE_NAMES","-1","layoutState","pusher","getShapeById","subjects","froms","tos","initialState","finalState","_initialState","_finalState","undo","setState","redo","ticker","conn","undoUnit","redoSource","redoTarget","_redoSource","_redoTarget","_undoSource","_undoTarget","_updateConnector","updateModel","undoSource","undoTarget","targetConnector","undoStates","adorner","redoStates","refreshBounds","deselect","initialPosition","finalPosition","finalPos","undoRotates","redoRotates","redoAngle","_angle","_innerBounds","_initialize","initialIndices","_toIndex","capacity","begin","commit","execute","_restart","addCompositeItem","toolService","tryActivate","getCursor","virtualScroll","tool","scrollable","movableCanvas","hoveredItem","hoveredAdorner","_hoveredConnector","scrollPos","_storePan","selectSingle","_hitTest","_resizingAdorner","isDragHandle","connections","undoRedoService","isSelected","selectArea","_createConnection","_c","connectionHandle","_connectionManipulation","_removeHover","activeConnection","_cachedTouchTarget","cachedTouchTarget","sourceConnector","Shape","getConnector","_syncConnectionChanges","_connectorsAdorner","isActive","handleName","activeTool","_updateHoveredItem","_activateTool","_updateCursor","updateHovered","keyDown","toRemove","metaKey","_triggerRemove","_syncChanges","_destroyToolBar","_discardNewConnection","selectAll","wheel","zoomRate","zoomOptions","setTool","addToSelection","newConnection","disabledShape","selectedConnections","_selectedItems","Connection","_hitTestItems","_hitTestElements","mainLayer","shapeIdx","connectionIdx","shapeHit","connectionHit","hitTest","rec","getBounds","SAME_SIDE_DISTANCE_RATIO","routePoints","_connectorPoints","_floatingPoints","_resolvedSourceConnector","_resolvedTargetConnector","sourcePoint","targetPoint","_connectorSides","boundsPoint","secondarySign","_connectorSide","sideDistance","minSide","shapeBounds","sides","_sameSideDistance","pointX","pointY","sourceConnectorSide","targetConnectorSide","deltaX","sameSideDistance","shiftX","shiftY","cascadeStartHorizontal","_startHorizontal","sourceSide","_adorners","sp","tp","_ts","spVisual","epVisual","_initialSource","_initialTarget","sourcePointDistance","targetPointDistance","sourceHandle","targetHandle","modelToLayer","_refreshHandler","ctr","_clearVisual","_keepCachedTouchTarget","visualChildren","_manipulating","_initSelection","_createHandles","_internalChange","_rotatedHandler","_resizable","_handleOptions","_bounds","handleBounds","handlesCount","_getHandleBounds","_rotationOffset","_startAngle","_rotates","_positions","initialRotates","initialStates","handleOptions","_sp","_cp","_lp","shapeStates","visibleHandles","dragging","newBounds","staticPoint","thr","newCenter","oldBounds","dtl","dbr","changed","_truncateAngle","_rotating","shouldSnap","_truncateDistance","_displaceBounds","_truncatePositionToGuides","ruler","truncatePositionToGuides","_truncateSizeToGuides","truncateSizeToGuides","snap","snapOptions","snapAngle","snapSize","_diffStates","_syncShapeChanges","rotationThumb","_rotationThumbBounds","_ep","_adorn","visualBounds","modelToView","relative","_visualBounds","HyperTree","LayoutBase","subtype","nodeDistance","iterations","horizontalSeparation","verticalSeparation","underneathVerticalTopOffset","underneathHorizontalOffset","underneathVerticalSeparation","componentSpacingX","componentSpacingY","layerSeparation","layeredIterations","startRadialAngle","endRadialAngle","radialSeparation","radialFirstLevelSeparation","keepComponentsInOneRadialLayout","ignoreContainers","layoutContainerChildren","ignoreInvisible","animateTransitions","gridLayoutComponents","maxWidth","startX","startY","resultLinkSet","resultNodeSet","boundingRect","currentHeight","currentWidth","moveToOffset","nodeBounds","newpoints","deltax","deltay","currentHorizontalOffset","transferOptions","DiagramToHyperTreeAdapter","shapeMap","edgeMap","finalNodes","finalLinks","ignoredConnections","ignoredShapes","hyperMap","hyperTree","finalGraph","_renormalizeShapes","_renormalizeConnections","mapConnection","mapShape","getEdge","listToRoot","containerGraph","parentContainer","firstNonIgnorableContainer","isContainer","_isIgnorableItem","isContainerConnection","isDescendantOf","isIgnorableItem","isCollapsed","_isVisible","_isTop","isShapeMapped","leastCommonAncestor","al","xa","xb","_isCollapsed","sink","sourceNode","sinkNode","newEdge","areConnectedAlready","finalNodeSet","LayoutState","initialTemperature","guessBounds","temperature","_expectedBounds","refineStage","_repulsion","_attraction","_shake","rho","_InverseSquareForce","wn","hn","wm","hm","_SquareForce","av","squareSize","multiplier","TreeLayoutProcessor","treeGraph","layoutSwitch","layoutLeft","setChildrenDirection","setChildrenLayout","TreeDirection","Width","arrange","layoutRight","layoutUp","layoutDown","treeDirection","layoutRadialTree","previousRoot","maxDepth","calculateAngularWidth","radialLayout","Angle","tipOverTree","startFromLevel","aw","diameter","sectorAngle","sortChildren","nl","col","basevalue","normalizeAngle","childAngleFraction","deltaTheta","deltaThetaHalf","parentSector","setPolarLocation","BoundingRectangle","includeStart","rootDirection","rootLayout","childrenLayout","givenSize","shapeWidth","shapeHeight","AngleToParent","SectorAngle","pp","childrenwidth","selfLocation","male","female","leftcount","tipOverTreeStartLevel","TreeLayout","layoutComponents","getTree","givenRootShape","getTreeForRoot","LayeredLayout","_initRuntimeProperties","downstreamLinkCount","upstreamLinkCount","uBaryCenter","dBaryCenter","upstreamPriority","downstreamPriority","gridPosition","_prepare","targetLayer","sortedNodes","minLayer","layerMap","layerCount","o2","o1layer","o2layer","linksTo","_dummify","_optimizeCrossings","_swapPairs","arrangeNodes","_moveThingsAround","_dedummify","setMinDist","minDist","layerIndex","minDistances","getMinDist","i1","i2","placeLeftToRight","leftClasses","classNodes","rightSibling","neighbor","leftPos","placeLeft","POSITIVE_INFINITY","nodeLeftClass","upNodes","downNodes","intDiv","placeRightToLeft","rightClasses","leftSibling","rightPos","placeRight","NEGATIVE_INFINITY","nodeRightClass","_getLeftWing","leftWing","computeClasses","_getRightWing","rightWing","wingPair","ndsinl","vnode","wings","currentWing","wing","_nodesInLink","classIndex","_isVerticalLayout","_isHorizontalLayout","_isIncreasingLayout","maximumHeight","currentNode","currDown","downNode","placed","sequenceStart","sequenceEnd","fromLayerIndex","reachedFinalLayerIndex","layerIncrement","_gridPositionComparer","virtualStartIndex","virtualStart","sequence","virtualEnd","virtualEndIndex","_firstVirtualNode","_sequencer","nextVirtualNode","adjustDirections","prevBridge","prevBridgeTarget","nextBridge","nextBridgeTarget","clayer","j1","j2","getNeighborOnLayer","_sequenceSingle","combineSequences","pair","rightHeap","leftRes","rightRes","leftHeap","_positionDescendingComparer","_positionAscendingComparer","leftClass","_getComposite","rightClass","maxLayoutIterations","it","gridPos","layoutLayer","iconsidered","considered","n1Priority","n2Priority","nodeGridPos","nodeBaryCenter","calcBaryCenter","nodePriority","moveRight","moveLeft","calcDownData","calcUpData","priority","rightNode","rightNodePriority","leftNode","leftNodePriority","mapVirtualNode","nodeToLinkMap","linkToNodeMap","addLinkBetweenLayers","oLayer","dLayer","oPos","dPos","upLayer","downLayer","depthOfDumminess","prevLink","dedum","moves","maxIterations","iter","optimizeLayerCrossings","presorted","inode","compareValue","n1BaryCenter","n2BaryCenter","compareByIndex","downwards","secondPass","hasSwapped","calcCrossings","memCrossings","crossBefore","node1","node2","node1GridPos","node2GridPos","crossAfter","revert","countLinksCrossingBetweenTwoLayers","ulayer","dlayer","link1","link2","n11","n12","n21","n22","l1","l2","n11gp","n12gp","n21gp","n22gp","crossings","numerator","denominator","graphOrNodes","diagramOrGraphOrNodes","GraphAdapter","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","getSibling","candidate","OVERFLOW_ANCHOR","Item","Button","ToolBarButton","OverflowButton","ButtonGroup","ToolBarButtonGroup","OverflowButtonGroup","ToolBarSplitButton","OverflowSplitButton","ToolBarSeparator","OverflowSeparator","ToolBarSpacer","TemplateItem","OverflowTemplateItem","ToolBar","TOOLBAR","BUTTON","OVERFLOW_BUTTON","TOGGLE_BUTTON","BUTTON_GROUP","SPLIT_BUTTON","SEPARATOR","SPACER_CLASS","SPACER","POPUP","RESIZABLE_TOOLBAR","STATE_DISABLED","STATE_HIDDEN","GROUP_START","GROUP_END","ARIA_DISABLED","ARIA_PRESSED","ICON","ICON_PREFIX","BUTTON_ICON","BUTTON_ICON_TEXT","LIST_CONTAINER","SPLIT_BUTTON_ARROW","OVERFLOW_CONTAINER","FIRST_TOOLBAR_VISIBLE","LAST_TOOLBAR_VISIBLE","CLICK","TOGGLE","OVERFLOW_OPEN","OVERFLOW_CLOSE","OVERFLOW_NEVER","OVERFLOW_AUTO","OVERFLOW_ALWAYS","OVERFLOW_HIDDEN","OPTION_LIST_SUFFIX","KENDO_UID_ATTR","toolbar","overflowAnchor","overflowContainer","registerComponent","addOverflowAttr","addUidAttr","addIdAttr","addOverflowIdAttr","hidden","overflowHidden","isEnabled","twin","splitContainerId","resizable","useButtonTag","primary","togglable","addToGroup","clickHandler","getParentGroup","isChild","_addGraphics","spriteCssClass","showText","hasIcon","showIcon","createButtons","buttonConstructor","buttons","buttonGroup","mainButton","arrowButton","popupElement","createMenuButtons","createPopup","_navigatable","splitButton","kendoPopup","menuButtons","rootUid","adjustPopupWidth","computedWidth","min-width","_groups","isMobile","_renderOverflow","overflowUserEvents","_toggleOverflow","_resizeHandler","_shrink","_buttonClick","release","_toggleOverflowAnchor","overflowTool","itemClasses","overflowTemplate","_getItem","toolbarItem","overflowItem","isResizable","buttonGroupInstance","getSelectedFromGroup","horizontalDirection","isComplexTool","hasVisibleChildren","paddingEnd","splitContainer","urlTarget","isSplitButtonArrow","_toggle","lastHasFocus","firstHasFocus","isOnlyOverflowAnchor","lastItemNotOverflowAnchor","isFirstTool","prevFocusable","isOverflowAnchor","not","_getPrevFocusable","_preventNextFocus","_getNextElement","directionNumber","searchIndex","focusableItem","elementToFocus","prevElement","prevElements","prevAll","containerWidth","_markVisibles","_childrenWidth","childrenWidth","commandElement","visibleCommands","_hideItem","hiddenCommands","_showItem","itemOuterWidth","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","unifyType","mapChangedItems","itemsToMatch","selectedLength","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","percentageUnitsRegex","FOCUSED","HOVER","LOADING","GROUPHEADER","ITEMSELECTOR","LABELIDPART","CASCADE","SELECTED","BLUR","FOCUS","FOCUSOUT","HIDDENCLASS","isIE","isIE8","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","_activateItem","deactivate","_deactivateItem","groupTemplate","fixedGroupTemplate","_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","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_userTriggered","_oldText","_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","_makeUnselectable","_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","_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","firstItem","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","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","_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-expanded","SELECTOR","DOMelement","accesskey","unselectable","getElements","optionLabelText","elementPosition","Selectable","ARIASELECTED","SELECTABLE","UNSELECT","UNSELECTING","INPUTSELECTOR","supportEventDelegation","_lastActive","aria","inputSelectors","_isElement","whichCode","buttonCode","_allowSelection","selectRange","_firstSelectee","_unselect","_notify","_downTarget","currentElement","useAllItems","_selectElement","_invalidateSelectables","toSelect","selectElement","preventNotify","resetTouchEvents","continuousItems","asLowerString","modular","minYear","maxYear","build","weekNumberBuild","isWeekColumnVisible","cellsPerRow","perRow","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","makeUnselectable","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","toDateObject","transitionOrigin","KEYDOWN_NS","SLIDE","CENTURY","NAVIGATE","OTHERMONTHCLASS","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","PREVARROW","NEXTARROW","ARIA_SELECTED","ARIA_LABEL","decade","century","HEADERSELECTOR","CLASSIC_HEADER_TEMPLATE","MODERN_HEADER_TEMPLATE","Calendar","_viewWrapper","hasFooter","_focusView","focusOnNav","_cellID","_class","_selectDates","_addClassProxy","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","classic","linksSelector","contentClasses","modern","_destroySelectable","_today","_title","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","viewWrapper","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","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","disabledDate","actionAttr","_todayClick","firstDayCurrentMonth","isBigger","isTodayDisabled","firstVisibleDay","calendarInfo","tzOffsetBefore","resultDATE","tzOffsetDiff","navigateUrl","showHeader","hasUrl","currentCalendar","firstDayIdx","shortNames","linkClass","dateString","month1","month2","year2","setMonth","viewsEnum","approximateStringMatching","oldText","oldFormat","newText","deletedSymbol","oldTextSeparator","knownSymbols","customDateTime","INPUT_EVENT_NAME","STATEDEFAULT","STATEINVALID","DateInput","insidePicker","weekday","hour","minute","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_dateTime","getDateObject","stringAndFromat","toPair","_format","_paste","_input","_mouseUp","navigationOnly","valid","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","keycode","modifyPart","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","matcher","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","newMonth","currentChar","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","ARIA_EXPANDED","ARIA_HIDDEN","DateView","omitPopup","dateDiv","_dateViewID","_calendar","popupHovered","selectIsClicked","_initialOptions","dateView","_updateARIA","_icon","aria-owns","autocomplete","_createDateInput","_update","ARIATemplate","dateInput","_dateInput","_dateIcon","dateChanged","valueUpdated","textFormatted","stopImmediatePropagation","aria-controls","isSameType","optionsValue","_ariaTemplate","FLOATINGLABELCONTAINER","NOCLICKCLASS","FloatingLabel","buttonHtml","CLASS_ICON","truncate","placeholderSupported","INPUT","SPIN","TOUCHEND","LABELCLASSES","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_toggleText","selectValue","_label","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_inputLabel","_spin","_upArrow","_downArrow","_keyup","_inputHandler","floatingLabel","_arrowsWrap","_placeholder","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","selectOnFocus","_culture","_removeInvalidState","CLASSNAME","accessKey","_numPadDot","_step","_cachedCaret","decimalSeparator","minInvalid","_numericRegex","_blinkInvalidState","_addInvalidState","_invalidStateTimeout","fractionRule","_separator","_floatRegExp","rounder","isNotNull","_floatingLabelContainer","DOMElement","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","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","checkbox","raise","validateOnBlur","_allowSubmit","_checkElement","validateInput","inputs","invalid","isValid","showValidationSummary","lbl","messageText","messageLabel","wasValid","lblId","inputWrap","inputLabel","errorId","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","_associateMessageContainer","hideMessages","_disassociateMessageContainers","hideValidationSummary","locators","messageLocators","locate","ruleKey","nonDefaultMessage","customMessage","_getInputNames","_errorsByName","inputNames","_renderSummary","_summaryClick","errorsList","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","attributeName","validation","DATATYPE","BINDING","specialRules","AUTOCOMPLETEVALUE","addIdAttribute","convertItems","getEditorTag","checkboxes","addValidationRules","modelField","renderHiddenForÐœvcCheckbox","addHidden","shouldRenderHidden","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","kendoEditors","editors","kendoNumericTextBox","kendoDatePicker","kendoEditor","editor","editorOptions","tagElement","mobileEditors","Editable","_isMobile","_validateProxy","_validate","clearContainer","skipFocus","isValuesEditor","isCustomEditor","isKendoEditor","preventChangeTrigger","_validationEventInProgress","bindAttribute","bindingRegex","validatable","modelFields","toInt","constrain","normalizedValue","executableScript","getPosition","parentOverflowX","parentOverflowY","offsetLeft","WindowResizing","wnd","_preventDragging","_draggable","KWINDOWRESIZEHANDLES","dragstart","dragend","addOverlay","removeOverlay","WindowDragging","dragHandle","dragcancel","MODAL_NS","KWINDOW","KWINDOWTITLE","KWINDOWTITLEBAR","KWINDOWCONTENT","KDIALOGCONTENT","KOVERLAY","KHOVERSTATE","KFOCUSEDSTATE","MAXIMIZEDSTATE","CURSOR","REFRESH","MINIMIZE","MAXIMIZE","RESIZESTART","RESIZEEND","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","windowInstance","pinned","pin","aria-labelledby","_onDocumentResize","_marker","_tabKeyTrap","maxHeight","sizeClass","contentBoxSizing","lrBorderWidth","tbBorderWidth","_isPinned","_updateBoundaries","_animationOptions","basicAnimation","resizing","toggleMaximization","resizeHandle","_actions","titlebar","windowSpecificCommands","cachedOptions","_enableDocumentScrolling","fade","autoFocus","isMaximized","isMinimized","_closable","newWidth","newHeight","_close","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","zStack","_object","newTop","newLeft","documentWindow","_scrollIsAppended","titleBarHeight","encoded","titleBar","titleElement","scrollContainer","otherModalsVisible","overlayFx","showOptions","containmentContext","Fade","fadeIn","_containerScrollTop","_containerScrollLeft","_removeOverlay","suppressAnimation","modals","hideOverlay","hideOptions","systemTriggered","defaultPrevented","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","shouldRestrictTop","restoreOptions","_sizingAction","actionId","$body","$html","_storeOverflowRule","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","win","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","leftRtlOffset","scrollOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","_finishDrag","origEvent","isAutoConnector","closestConnector","resCtr","minimumDistance","MAXINT","indicesOfItems","filterShapeDataItem","filterConnectionDataItem","fromConnector","fromX","fromY","toConnector","toX","toY","connectionSelector","kendoDropDownList","InactiveItem","InactiveItemsCollection","cloneDataItem","splitDiagramElements","createModel","clearField","copyDefaultOptions","mainOptions","translateToOrigin","defaultButtons","DiagramElement","Connector","Diagram","DiagramToolBar","Editor","PopupEditor","CASCADING","DEFAULT_CANVAS_WIDTH","DEFAULT_CANVAS_HEIGHT","DEFAULT_SHAPE_TYPE","DEFAULT_SHAPE_WIDTH","DEFAULT_SHAPE_HEIGHT","DEFAULT_SHAPE_MINWIDTH","DEFAULT_SHAPE_MINHEIGHT","DEFAULT_SHAPE_POSITION","DEFAULT_CONNECTION_BACKGROUND","TRANSFORMED","MOUSEWHEEL_NS","MOBILE_ZOOM_RATE","MOBILE_PAN_DISTANCE","BUTTON_TEMPLATE","CONNECTION_CONTENT_OFFSET","DefaultConnectors","imageClass","extra","serializable","_content","contentVisual","_contentVisual","_updateContentVisual","_createContentVisual","elementTemplate","_canSelect","shapeId","updateOptionsFromModel","createShapeVisual","updateBounds","_createConnectors","_setOptionsFromModel","modelOptions","redrawVisual","_isEditable","_redrawVisual","syncChanges","_suspendModelRefresh","_resumeModelRefresh","_rotate","_alignContent","containerRect","aligner","contentBounds","contentRect","alignedBounds","_transformedBounds","_rotatedBounds","_setBounds","_triggerBoundsChange","_layouting","refreshConnections","deselected","_internalSelection","_selectionChanged","sc","deltaAngle","newPosition","cons","nameOrPoint","_transformPoint","shapeOptions","boundsChange","shapeVisual","_visualOptions","_updateConnectors","_showConnectors","visualTemplate","_initRouter","_sourcePoint","_targetPoint","_setSource","_setTarget","definers","dataMap","_dataMap","connectionsDataSource","shapeSource","defaultConnector","_removeFromSourceConnector","_clearSourceConnector","_setFromOptions","sourceDefiner","_sourceDefiner","shapeTarget","_removeFromTargetConnector","_clearTargetConnector","_setToOptions","targetDefiner","_targetDefiner","connectorName","setNewTarget","inactiveItem","_inactiveShapeItems","_deferredConnectionUpdates","onActivate","alignToPath","midIdx","_router","pts","_resolveConnectors","_refreshPath","sourceConnectors","targetConnectors","_resolveAutoConnectors","minNonConflictSource","minNonConflictTarget","minSource","minTarget","sourceIdx","targetIdx","minNonConflict","_testRoutePoints","exclude","router","passRoute","_getRouteExclude","_shapesQuadTree","hitTestRect","_isPointInsideShape","boundsX","boundsY","_initElements","_extendLayoutOptions","_initDefaults","_interactionDefaults","_initCanvas","adornerLayer","_createHandlers","_clipboard","pauseMouseHandlers","_fetchFreshData","_createGlobalToolBar","_createOptionElements","toolBar","_toolBarClick","createShape","_createShape","edit","createConnection","_connectionsDataMap","addConnection","editModel","editorType","connectionSelectorHandler","cancelEdit","shapeEditors","shapeTemplate","connectionEditors","connectionTemplate","_editArgs","_getEditDataSource","_destroyEditor","saveEdit","userShapeDefaults","canvasContainer","viewPort","_userEvents","_dragStart","_gestureStart","_gestureChange","_gestureEnd","doubleTap","_mouseMove","_mouseDown","_syncHandler","_pauseMouseHandlers","_eventPositions","_meta","_createToolBar","ctrlPressed","focused","documentToModel","initialCenter","_gesture","_initialCenter","zoomedPoint","documentToView","updateZoom","_getValidZoom","_panTransform","_updateAdorners","pointPosition","shapesLength","_createShapes","_createConnections","_findConnectionTarget","destroyScroller","_destroyGlobalToolBar","_removeItem","_removeShapeDataItem","_removeConnectionDataItem","_getDiagramItems","_fixOrdering","bringIntoView","newPan","_zoomMainLayer","alignShapes","viewportVector","_getPan","_copyOffset","copied","mapping","_updateCopiedConnection","sourceConnection","di","_containerOffset","viewToDocument","viewToModel","_transformWithMatrix","_matrixInvert","_layerMatrix","layerToModel","_layerMatrixInvert","viewPoint","modelToDocument","setConnectionsDataSource","_connectionDataSource","_redrawConnections","getShapeByModelId","getShapeByModelUid","getConnectionByModelId","getConnectionByModelUid","_transformMainLayer","_finishPan","_storeViewMatrix","_storeLayerMatrix","canvasTransform","shapePos","conPos","removedConnections","_removeShape","_removeConnection","_removeDataItems","recursive","_removeShapeConnections","_addDataItem","_addDataItemByUid","_addDataItems","parentShape","_refreshSource","_bindingRoots","_addItem","preventClosing","popupWidth","popupHeight","connectionBounds","singleToolBar","popupZIndex","_normalizePointZoom","undone","redone","_loadingShapes","_loadingConnections","ds","_shapesRefreshHandler","_shapesRequestStartHandler","_shapesErrorHandler","_refreshShapes","_shapesRequestStart","_error","_treeDataSource","_connectionsRefreshHandler","_connectionsRequestStartHandler","_connectionsErrorHandler","_refreshConnections","_connectionsRequestStart","_connectionsError","_shouldRefresh","_removeShapes","_updateShapes","_syncShapes","_rebindShapesAndConnections","_addShapes","_addConnections","_removeConnections","_updateConnections","_addConnectionDataItem","_validateConnector","adorners","_refresh","viewRect","clipWrap","deferredConnectionUpdates","_tools","createToolBar","createTools","appendTools","getKendoPopup","_toolBar","kendoToolBar","getKendoToolBar","createTool","toolName","_setAttributes","editTool","deleteTool","rotateAnticlockwiseTool","_appendGroup","_rotateGroup","rotateClockwiseTool","createShapeTool","_createGroup","createConnectionTool","undoTool","_historyGroup","redoTool","_getAttributes","selectedElements","delete","selectedElemens","rotateClockwise","rotateAnticlockwise","_getFields","createEditable","formContent","_renderTemplate","_renderFields","_renderButtons","_cancelClick","_attachButtonEvents","_createButton","_cancelClickHandler","_updateClickHandler","_updateClick","_editUpdateClickHandler","deffered","_testRect","overlapsBounds","childIdx","boundsChangeHandler","_boundsChange","rootSize","xIdx","yIdx","colorsByLength","rgbColor","minRGBtoDecimal","rgbToDecimal","maxRGBtoDecimal","isDarker","colorBrightness","colorByIndex","buildColorFromRGB","minColor","maxColor","currentStep","decimalToRgb","colorToRGB","rgbToHex","colorLength","DATA_BOUND","ITEM_CREATED","MOUSEOVER_NS","TreeMap","_setLayout","colorField","_layout","SliceAndDice","SliceAndDiceView","Squarified","SquarifiedView","_onDataChange","htmlSize","_wrapItem","compute","_setColors","_cleanItems","createRoot","_colorIdx","colorRange","leafNodes","colorIdx","_contentSize","renderHeight","findByUid","_removeActiveState","_resizeItems","setItemSize","leaf","layoutChildren","minimumSideValue","parentArea","totalArea","itemsArea","layoutHorizontal","squarify","initElement","computeDim","newCoords","layoutLast","layoutRow","worstAspectRatio","layoutV","layoutH","layoutVertical","layoutChange","areaSum","rootCoord","newRootCoord","ans","_totalArea","_createTitle","_compile","_createWrap","rootWrap","_createLeaf","_createTile","_tileColorBrightness","_itemCoordinates","titleTemplate","sliceAndDice","withoutTimeout","$timeout","createWidget","origAttr","controllers","createIt","originalElement","destroyRegister","kNgDisabled","kNgReadonly","isReadonly","kRebind","ctor","OPTIONS_NOW","exposeWidget","$emit","destroyWidgetOnScopeDestroy","setupRebind","$eval","bindToKNgDisabled","bindToKNgReadonly","kNgModel","bindToKNgModel","ngModel","bindToNgModel","ngForm","propagateClassToWidgetWrapper","kNgDelay","delayValue","parsed","unresolved","unwatch","$watch","$root","unregister","$attr","$apply","addOption","scopeValue","widgetEvents","optionsPath","kOptions","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","PanelBar","Menu","$log","warn","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","rangePickerModels","rangePickerStartModel","rangePickerEndModel","updating","valueIsCollection","currentValueLength","watchHandler","changeHandler","DateRangePicker","_startDateInput","_endDateInput","RangeSlider","$angular_setLogicValue","$watchCollection","$setDirty","$angular_getLogicValue","deregister","$on","mo","disconnect","prevClassList","MutationObserver","changes","chg","currClassList","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","$destroy","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","encOpen","encClose","TreeList","TreeView","Scheduler","PivotGrid","PivotConfigurator","ContextMenu","toDataSource","mew","factory","kendoRenderedTimeout","RENDERED","require","controller","$scope","$attrs","roleattr","DateTimePicker","TimePicker","ColorPicker","MaskedTextBox","Upload","MobileButton","MobileBackButton","MobileDetailButton","ListView","MobileListView","ScrollView","ActionSheet","Switch","$angular_scope","$angular_init","itemScope","$$kendoScope","vars","$new","$angular_makeEventHandler","kendoEvent","elems","colIdx","locals","_checkBoxSelection","angularDataItem","templateSettings","terminal","pre","post","_scroller","kAttr","MobileScrollView","Pager","templateDirectives","templateName","outerHTML"],"mappings":"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,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,SAEJ1+B,MACI,OACA,OACA,SAEJ2+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,SAGR1iC,GAAM2iC,aAAe,SAAUC,EAAWC,GAArB,GAOR5/B,GACD6/B,EAPJC,EAAc/iC,GAAMgiC,aACpBgB,EAASzyB,OAAO6a,KAAK2X,GACrBz7B,EAAO,MACX,IAAIs7B,IAAclkC,IAAckkC,EAAUljC,OACtC,MAAO4H,EAEX,KAASrE,EAAI,EAAGA,EAAI+/B,EAAOtjC,OAAQuD,GAAK,EAEpC,GADI6/B,EAAaC,EAAYC,EAAO//B,IAChC6/B,EAAWx8B,QAAQs8B,EAAU19B,kBAC7B,MAAO29B,GAAa,QAAUG,EAAO//B,GAAK+/B,EAAO//B,EAGzD,OAAOqE,IAEXtH,GAAMijC,mBAAqB,SAAU98B,GAAV,GAWnBlD,GAVAigC,GACA,QACA,KACA,KACA,KACA,KAEJ,OAAa,KAAT/8B,EACO,UAEPlD,EAAIyH,SAAS1D,KAAKzE,MAAMyE,KAAKknB,IAAI/nB,GAAQa,KAAKknB,IAAI,OAAQ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/B,OAAOt7J,GAMX,QAASw7J,GAAmBC,EAAiBr6J,GAA7C,GACagf,GAEGs7I,EACAC,EAEIC,CALhB,KAASx7I,IAAShf,IACTuD,GAAQyb,EAAOy7I,KAAgBz6J,EAAQ1D,eAAe0iB,KACnDs7I,EAAat6J,EAAQgf,GACrBu7I,EAAgBF,EAAgBr7I,GAChC42E,GAAQ2kE,KACJC,EAA2B,OAAfF,EACZE,IAAc5kE,GAAQ0kE,UACfD,GAAgBr7I,GACnBw7I,SACOx6J,GAAQgf,IAEZu7I,GAAiBr8B,GAASo8B,IAC7Bp8B,GAASq8B,IACTH,EAAmBG,EAAeD,KAO1D,QAASI,IAAkBC,GACvB,IAAK,GAAIp9J,GAAM,EAAGA,EAAMo9J,EAAMzjK,OAAQqG,IAClCo9J,EAAMp9J,GAAKq9J,eA/mXtB,GAEOp4I,IACArsB,GACA+kD,GACA2/G,GACAr4C,GACAyc,GACAtgE,GACAsf,GACAC,GACAC,GACAh7D,GACA8lH,GACAb,GACAc,GACA72H,GACAgR,GACA8kH,GACAG,GACAjJ,GACA4I,GACAryC,GACAtxE,GACAje,GACAgkI,GACAvwC,GACA4lC,GACA9B,GACAmB,GACAx7H,GACA5H,GACA67F,GACA0mC,GACA3jI,GACA02B,GACA6lE,GACA2nC,GACAsM,GACAR,GACAhM,GACAmO,GACAjkG,GACAu1F,GACAnmH,GACAsmH,GACAqN,GACAlB,GACA95H,GACAwmF,GACAxoE,GACAqpE,GACA8mC,GACAlnC,GACAmyC,GACA3xC,GACAxgG,GACAgrB,GACAivF,GACAzwE,GACAi8E,GACA1Y,GACAlc,GACAizB,GACA24C,GACA71H,GACA+0H,GA+BA0H,GAUAC,GAkBAC,GA8EAlG,GAiHAmG,GACAC,GACAC,GACAC,GACAC,GA2GAziK,GACA0iK,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAnrJ,GACA8kJ,GACAsG,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,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8wM,WAEzBprF,QAAS,WACLztH,KAAKw2M,WAAWx2M,KAAKw8M,OAEzBhE,YAAa,WACT,GAAIzwM,GAAO/H,IACX+H,GAAKg7H,SAAWh7H,EAAKpP,OAASoP,EAAK48H,WAAa58H,EAAK4rM,kBAEzD6C,WAAY,SAAU/iK,GAAV,GACuD71C,GACtD/C,EADLkN,EAAO/H,KAAMwO,EAAUzG,GAAAA,EAAK2sM,aAAajhK,EAC7C,KAAS54C,EAAI,EAAGA,EAAI2T,EAAQlX,OAAQuD,IAChC+C,EAAQ0E,SAASkM,EAAQzX,OAAO8D,GAAI,IACpCkN,EAAKyG,QAAQvF,KAAKrL,GAClBmK,EAAK48H,YAAc/mI,CAEvBmK,GAAKu0M,UAAY7oK,EAAO1rC,EAAKrN,YAEjC6hN,aAAc,SAAU9C,EAAeH,GACnC,IAAK,GAAIz+M,GAAI,EAAGA,EAAIy+M,EAAOhiN,OAAQuD,IAC/B,GAAImF,KAAKs5M,EAAOz+M,IAAIhB,GAAG4/M,EAAc77M,MAAO67M,EAAcnmM,OACtD,MAAOgmM,GAAOz+M,EAGtBmF,MAAKg0M,sBAAsByF,EAAc77M,MAAM7G,OAAO0iN,EAAcnmM,SAExEohM,cACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAEJ8H,KAAM,M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","file":"kendo.dataviz.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.core', ['jquery'], f);\n}(function () {\n var __meta__ = {\n id: 'core',\n name: 'Core',\n category: 'framework',\n description: 'The core of the Kendo framework.'\n };\n (function ($, window, undefined) {\n var kendo = window.kendo = window.kendo || { cultures: {} }, extend = $.extend, each = $.each, isArray = $.isArray, proxy = $.proxy, noop = $.noop, math = Math, Template, JSON = window.JSON || {}, support = {}, percentRegExp = /%/, formatRegExp = /\\{(\\d+)(:[^\\}]+)?\\}/g, boxShadowRegExp = /(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+(?:\\.?)\\d*)px\\s*(\\d+)?/i, numberRegExp = /^(\\+|-?)\\d+(\\.?)\\d*$/, FUNCTION = 'function', STRING = 'string', NUMBER = 'number', OBJECT = 'object', NULL = 'null', BOOLEAN = 'boolean', UNDEFINED = 'undefined', getterCache = {}, setterCache = {}, slice = [].slice, noDepricateExtend = function () {\n var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;\n if (typeof target === 'boolean') {\n deep = target;\n target = arguments[i] || {};\n i++;\n }\n if (typeof target !== 'object' && !jQuery.isFunction(target)) {\n target = {};\n }\n if (i === length) {\n target = this;\n i--;\n }\n for (; i < length; i++) {\n if ((options = arguments[i]) != null) {\n for (name in options) {\n if (name == 'filters' || name == 'concat' || name == ':') {\n continue;\n }\n src = target[name];\n copy = options[name];\n if (target === copy) {\n continue;\n }\n if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && jQuery.isArray(src) ? src : [];\n } else {\n clone = src && jQuery.isPlainObject(src) ? src : {};\n }\n target[name] = noDepricateExtend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n };\n kendo.version = '2020.3.915'.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 browser = support.browser, 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 if (browser.msie && math.floor(browser.version) <= 7) {\n element.css({ zoom: 1 });\n element.children('.k-menu').width(element.width());\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 == 'auto' || overflow == 'scroll';\n }\n function scrollLeft(element, value) {\n var webkit = support.browser.webkit;\n var mozila = support.browser.mozilla;\n var el = element instanceof $ ? element[0] : element;\n var isRtl;\n if (!element) {\n return;\n }\n isRtl = support.isRtl(element);\n if (value !== undefined) {\n if (isRtl && webkit) {\n el.scrollLeft = el.scrollWidth - el.clientWidth - value;\n } else if (isRtl && mozila) {\n el.scrollLeft = -value;\n } else {\n el.scrollLeft = value;\n }\n } else {\n if (isRtl && webkit) {\n return el.scrollWidth - el.clientWidth - el.scrollLeft;\n } else {\n return Math.abs(el.scrollLeft);\n }\n }\n }\n (function () {\n support._scrollbar = undefined;\n support.scrollbar = function (refresh) {\n if (!isNaN(support._scrollbar) && !refresh) {\n return support._scrollbar;\n } else {\n var div = document.createElement('div'), result;\n div.style.cssText = 'overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block';\n div.innerHTML = ' ';\n document.body.appendChild(div);\n support._scrollbar = result = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n return result;\n }\n };\n support.isRtl = function (element) {\n return $(element).closest('.k-rtl').length > 0;\n };\n var table = document.createElement('table');\n try {\n table.innerHTML = '';\n support.tbodyInnerHtml = true;\n } catch (e) {\n support.tbodyInnerHtml = false;\n }\n support.touch = 'ontouchstart' in window;\n var docStyle = document.documentElement.style;\n var transitions = support.transitions = false, transforms = support.transforms = false, elementProto = 'HTMLElement' in window ? HTMLElement.prototype : [];\n support.hasHW3D = 'WebKitCSSMatrix' in window && 'm11' in new window.WebKitCSSMatrix() || 'MozPerspective' in docStyle || 'msPerspective' in docStyle;\n support.cssFlexbox = 'flexWrap' in docStyle || 'WebkitFlexWrap' in docStyle || 'msFlexWrap' in docStyle;\n each([\n 'Moz',\n 'webkit',\n 'O',\n 'ms'\n ], function () {\n var prefix = this.toString(), hasTransitions = typeof table.style[prefix + 'Transition'] === STRING;\n if (hasTransitions || typeof table.style[prefix + 'Transform'] === STRING) {\n var lowPrefix = prefix.toLowerCase();\n transforms = {\n css: lowPrefix != 'ms' ? '-' + lowPrefix + '-' : '',\n prefix: prefix,\n event: lowPrefix === 'o' || lowPrefix === 'webkit' ? lowPrefix : ''\n };\n if (hasTransitions) {\n transitions = transforms;\n transitions.event = transitions.event ? transitions.event + 'TransitionEnd' : 'transitionend';\n }\n return false;\n }\n });\n table = null;\n support.transforms = transforms;\n support.transitions = transitions;\n support.devicePixelRatio = window.devicePixelRatio === undefined ? 1 : window.devicePixelRatio;\n try {\n support.screenWidth = window.outerWidth || window.screen ? window.screen.availWidth : window.innerWidth;\n support.screenHeight = window.outerHeight || window.screen ? window.screen.availHeight : window.innerHeight;\n } catch (e) {\n support.screenWidth = window.screen.availWidth;\n support.screenHeight = window.screen.availHeight;\n }\n support.detectOS = function (ua) {\n var os = false, minorVersion, match = [], notAndroidPhone = !/mobile safari/i.test(ua), agentRxs = {\n wp: /(Windows Phone(?: OS)?)\\s(\\d+)\\.(\\d+(\\.\\d+)?)/,\n fire: /(Silk)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n android: /(Android|Android.*(?:Opera|Firefox).*?\\/)\\s*(\\d+)\\.?(\\d+(\\.\\d+)?)?/,\n iphone: /(iPhone|iPod).*OS\\s+(\\d+)[\\._]([\\d\\._]+)/,\n ipad: /(iPad).*OS\\s+(\\d+)[\\._]([\\d_]+)/,\n meego: /(MeeGo).+NokiaBrowser\\/(\\d+)\\.([\\d\\._]+)/,\n webos: /(webOS)\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n blackberry: /(BlackBerry|BB10).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/,\n playbook: /(PlayBook).*?Tablet\\s*OS\\s*(\\d+)\\.(\\d+(\\.\\d+)?)/,\n windows: /(MSIE)\\s+(\\d+)\\.(\\d+(\\.\\d+)?)/,\n tizen: /(tizen).*?Version\\/(\\d+)\\.(\\d+(\\.\\d+)?)/i,\n sailfish: /(sailfish).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*firefox/i,\n ffos: /(Mobile).*rv:(\\d+)\\.(\\d+(\\.\\d+)?).*Firefox/\n }, osRxs = {\n ios: /^i(phone|pad|pod)$/i,\n android: /^android|fire$/i,\n blackberry: /^blackberry|playbook/i,\n windows: /windows/,\n wp: /wp/,\n flat: /sailfish|ffos|tizen/i,\n meego: /meego/\n }, formFactorRxs = { tablet: /playbook|ipad|fire/i }, browserRxs = {\n omini: /Opera\\sMini/i,\n omobile: /Opera\\sMobi/i,\n firefox: /Firefox|Fennec/i,\n mobilesafari: /version\\/.*safari/i,\n ie: /MSIE|Windows\\sPhone/i,\n chrome: /chrome|crios/i,\n webkit: /webkit/i\n };\n for (var agent in agentRxs) {\n if (agentRxs.hasOwnProperty(agent)) {\n match = ua.match(agentRxs[agent]);\n if (match) {\n if (agent == 'windows' && 'plugins' in navigator) {\n return false;\n }\n os = {};\n os.device = agent;\n os.tablet = testRx(agent, formFactorRxs, false);\n os.browser = testRx(ua, browserRxs, 'default');\n os.name = testRx(agent, osRxs);\n os[os.name] = true;\n os.majorVersion = match[2];\n os.minorVersion = (match[3] || '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 support.cssBorderSpacing = typeof docStyle.borderSpacing != 'undefined' && !(support.browser.msie && support.browser.version < 8);\n (function (browser) {\n var cssClass = '', docElement = $(document.documentElement), majorVersion = parseInt(browser.version, 10);\n if (browser.msie) {\n cssClass = 'ie';\n } else if (browser.mozilla) {\n cssClass = 'ff';\n } else if (browser.safari) {\n cssClass = 'safari';\n } else if (browser.webkit) {\n cssClass = 'webkit';\n } else if (browser.opera) {\n cssClass = 'opera';\n } else if (browser.edge) {\n cssClass = 'edge';\n }\n if (cssClass) {\n cssClass = 'k-' + cssClass + ' k-' + cssClass + majorVersion;\n }\n if (support.mobileOS) {\n cssClass += ' k-mobile';\n }\n if (!support.cssFlexbox) {\n cssClass += ' k-no-flexbox';\n }\n docElement.addClass(cssClass);\n }(support.browser));\n support.eventCapture = document.documentElement.addEventListener;\n var input = document.createElement('input');\n support.placeholder = 'placeholder' in input;\n support.propertyChangeEvent = 'onpropertychange' in input;\n support.input = function () {\n var types = [\n 'number',\n 'date',\n 'time',\n 'month',\n 'week',\n 'datetime',\n 'datetime-local'\n ];\n var length = types.length;\n var value = 'test';\n var result = {};\n var idx = 0;\n var type;\n for (; idx < length; idx++) {\n type = types[idx];\n input.setAttribute('type', type);\n input.value = value;\n result[type.replace('-', '')] = input.type !== 'text' && input.value !== value;\n }\n return result;\n }();\n input.style.cssText = 'float:left;';\n support.cssFloat = !!input.style.cssFloat;\n input = null;\n support.stableSort = function () {\n var threshold = 513;\n var sorted = [{\n index: 0,\n field: 'b'\n }];\n for (var i = 1; i < threshold; i++) {\n sorted.push({\n index: i,\n field: 'a'\n });\n }\n sorted.sort(function (a, b) {\n return a.field > b.field ? 1 : a.field < b.field ? -1 : 0;\n });\n return sorted[0].index === 1;\n }();\n support.matchesSelector = elementProto.webkitMatchesSelector || elementProto.mozMatchesSelector || elementProto.msMatchesSelector || elementProto.oMatchesSelector || elementProto.matchesSelector || elementProto.matches || function (selector) {\n var nodeList = document.querySelectorAll ? (this.parentNode || document).querySelectorAll(selector) || [] : $(selector), i = nodeList.length;\n while (i--) {\n if (nodeList[i] == this) {\n return true;\n }\n }\n return false;\n };\n support.matchMedia = 'matchMedia' in window;\n support.pushState = window.history && window.history.pushState;\n var documentMode = document.documentMode;\n support.hashChange = 'onhashchange' in window && !(support.browser.msie && (!documentMode || documentMode <= 8));\n support.customElements = 'registerElement' in window.document;\n var chrome = support.browser.chrome, mobileChrome = support.browser.crios, mozilla = support.browser.mozilla, safari = support.browser.safari;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mobileChrome && !mozilla && !safari && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n function unescape(value) {\n var template;\n try {\n template = window.decodeURIComponent(value);\n } catch (error) {\n template = value.replace(/%u([\\dA-F]{4})|%([\\dA-F]{2})/gi, function (_, m1, m2) {\n return String.fromCharCode(parseInt('0x' + (m1 || m2), 16));\n });\n }\n return template;\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n unescape: unescape,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n 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 = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $(kendo.format('
{1}
', cssClass, kendo.ui.progress.messages.loading)).width(options.width).height(options.height).css('top', options.top).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length, 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 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 return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n 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 (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n (function () {\n kendo.defaults = kendo.defaults || {};\n kendo.setDefaults = function (key, value) {\n var path = key.split('.');\n var curr = kendo.defaults;\n key = path.pop();\n path.forEach(function (part) {\n if (curr[part] === undefined) {\n curr[part] = {};\n }\n curr = curr[part];\n });\n if (value.constructor === Object) {\n curr[key] = deepExtend({}, curr[key], value);\n } else {\n curr[key] = value;\n }\n };\n }());\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n if ($.hasOwnProperty('uniqueSort')) {\n element.data('keys', $.uniqueSort(oldKeys)).height();\n } else {\n element.data('keys', $.unique(oldKeys)).height();\n }\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.done($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.done($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME,\n BACK\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = { 'Content-Type': 'multipart/mixed; boundary=' + boundary };\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', 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\\((.*?)\\)\\/$/;\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 this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, 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 var ObservableObject = Observable.extend({\n init: function (value) {\n var that = this, member, field, parent = function () {\n return that;\n };\n Observable.fn.init.call(this);\n this._handlers = {};\n for (field in value) {\n member = value[field];\n if (typeof member === 'object' && member && !member.getTime && field.charAt(0) != '_') {\n member = that.wrap(member, field, parent);\n }\n that[field] = member;\n }\n that.uid = kendo.guid();\n },\n shouldSerialize: function (field, serializeFunctions) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && (serializeFunctions && serializeFunctions[field] || typeof this[field] !== FUNCTION) && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function (serializeFunctions) {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field, serializeFunctions)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON(serializeFunctions);\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore, accentFoldingFiltering) {\n b += '';\n if (ignore) {\n a = '(' + a + ' + \\'\\').toString()' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n b = accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase();\n }\n return impl(a, quote(b), ignore);\n };\n }\n function operator(op, a, b, ignore, accentFoldingFiltering) {\n if (b != null) {\n if (typeof b === STRING) {\n var date = dateRegExp.exec(b);\n if (date) {\n b = new Date(+date[1]);\n } else if (ignore) {\n b = quote(accentFoldingFiltering ? b.toLocaleLowerCase(accentFoldingFiltering) : b.toLowerCase());\n a = '((' + a + ' || \\'\\')+\\'\\')' + (accentFoldingFiltering ? '.toLocaleLowerCase(\\'' + accentFoldingFiltering + '\\')' : '.toLowerCase()');\n } else {\n b = quote(b);\n }\n }\n if (b.getTime) {\n a = '(' + a + '&&' + a + '.getTime?' + a + '.getTime():' + a + ')';\n b = b.getTime();\n }\n }\n return a + ' ' + op + ' ' + b;\n }\n function getMatchRegexp(pattern) {\n for (var rx = '/^', esc = false, i = 0; i < pattern.length; ++i) {\n var ch = pattern.charAt(i);\n if (esc) {\n rx += '\\\\' + ch;\n } else if (ch == '~') {\n esc = true;\n continue;\n } else if (ch == '*') {\n rx += '.*';\n } else if (ch == '?') {\n rx += '.';\n } else if ('.+^$()[]{}|\\\\/\\n\\r\\u2028\\u2029\\xA0'.indexOf(ch) >= 0) {\n rx += '\\\\' + ch;\n } else {\n rx += ch;\n }\n esc = false;\n }\n return rx + '$/';\n }\n return {\n quote: function (value) {\n if (value && value.getTime) {\n return 'new Date(' + value.getTime() + ')';\n }\n return quote(value);\n },\n eq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('==', a, b, ignore, accentFoldingFiltering);\n },\n neq: function (a, b, ignore, accentFoldingFiltering) {\n return operator('!=', a, b, ignore, accentFoldingFiltering);\n },\n gt: function (a, b, ignore) {\n return operator('>', a, b, ignore);\n },\n gte: function (a, b, ignore) {\n return operator('>=', a, b, ignore);\n },\n lt: function (a, b, ignore) {\n return operator('<', a, b, ignore);\n },\n lte: function (a, b, ignore) {\n return operator('<=', a, b, ignore);\n },\n startswith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == 0';\n }),\n doesnotstartwith: textOp(function (a, b) {\n return a + '.lastIndexOf(' + b + ', 0) == -1';\n }),\n endswith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') >= 0';\n }),\n doesnotendwith: textOp(function (a, b) {\n var n = b ? b.length - 2 : 0;\n return a + '.indexOf(' + b + ', ' + a + '.length - ' + n + ') < 0';\n }),\n contains: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') >= 0';\n }),\n doesnotcontain: textOp(function (a, b) {\n return a + '.indexOf(' + b + ') == -1';\n }),\n matches: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return getMatchRegexp(b) + '.test(' + a + ')';\n }),\n doesnotmatch: textOp(function (a, b) {\n b = b.substring(1, b.length - 1);\n return '!' + getMatchRegexp(b) + '.test(' + a + ')';\n }),\n isempty: function (a) {\n return a + ' === \\'\\'';\n },\n isnotempty: function (a) {\n return a + ' !== \\'\\'';\n },\n isnull: function (a) {\n return '(' + a + ' == null)';\n },\n isnotnull: function (a) {\n return '(' + a + ' != null)';\n },\n isnullorempty: function (a) {\n return '(' + a + ' === null) || (' + a + ' === \\'\\')';\n },\n isnotnullorempty: function (a) {\n return '(' + a + ' !== null) && (' + a + ' !== \\'\\')';\n }\n };\n }();\n function Query(data) {\n this.data = data || [];\n }\n Query.filterExpr = function (expression) {\n var expressions = [], logic = {\n and: ' && ',\n or: ' || '\n }, idx, length, filter, expr, fieldFunctions = [], operatorFunctions = [], field, operator, filters = expression.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n operator = filter.operator;\n if (filter.filters) {\n expr = Query.filterExpr(filter);\n filter = expr.expression.replace(/__o\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__o[' + (operatorFunctions.length + index) + ']';\n }).replace(/__f\\[(\\d+)\\]/g, function (match, index) {\n index = +index;\n return '__f[' + (fieldFunctions.length + index) + ']';\n });\n operatorFunctions.push.apply(operatorFunctions, expr.operators);\n fieldFunctions.push.apply(fieldFunctions, expr.fields);\n } else {\n if (typeof field === FUNCTION) {\n expr = '__f[' + fieldFunctions.length + '](d)';\n fieldFunctions.push(field);\n } else {\n expr = kendo.expr(field);\n }\n if (typeof operator === FUNCTION) {\n filter = '__o[' + operatorFunctions.length + '](' + expr + ', ' + operators.quote(filter.value) + ')';\n operatorFunctions.push(operator);\n } else {\n filter = operators[(operator || 'eq').toLowerCase()](expr, filter.value, filter.ignoreCase !== undefined ? filter.ignoreCase : true, expression.accentFoldingFiltering);\n }\n }\n expressions.push(filter);\n }\n return {\n expression: '(' + expressions.join(logic[expression.logic]) + ')',\n fields: fieldFunctions,\n operators: operatorFunctions\n };\n };\n function normalizeSort(field, dir) {\n if (field) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return grep(descriptors, function (d) {\n return !!d.dir;\n });\n }\n }\n function sortFields(sorts, dir) {\n var sortObject = {};\n if (sorts) {\n var descriptor = typeof sorts === STRING ? {\n field: sorts,\n dir: dir\n } : sorts, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n for (var i = 0; i < descriptors.length; i++) {\n sortObject[descriptors[i].field] = {\n dir: descriptors[i].dir,\n index: i + 1\n };\n }\n }\n return sortObject;\n }\n var operatorMap = {\n '==': 'eq',\n equals: 'eq',\n isequalto: 'eq',\n equalto: 'eq',\n equal: 'eq',\n '!=': 'neq',\n ne: 'neq',\n notequals: 'neq',\n isnotequalto: 'neq',\n notequalto: 'neq',\n notequal: 'neq',\n '<': 'lt',\n islessthan: 'lt',\n lessthan: 'lt',\n less: 'lt',\n '<=': 'lte',\n le: 'lte',\n islessthanorequalto: 'lte',\n lessthanequal: 'lte',\n '>': 'gt',\n isgreaterthan: 'gt',\n greaterthan: 'gt',\n greater: 'gt',\n '>=': 'gte',\n isgreaterthanorequalto: 'gte',\n greaterthanequal: 'gte',\n ge: 'gte',\n notsubstringof: 'doesnotcontain',\n isnull: 'isnull',\n isempty: 'isempty',\n isnotempty: 'isnotempty'\n };\n function normalizeOperator(expression) {\n var idx, length, filter, operator, filters = expression.filters;\n if (filters) {\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n operator = filter.operator;\n if (operator && typeof operator === STRING) {\n filter.operator = operatorMap[operator.toLowerCase()] || operator;\n }\n normalizeOperator(filter);\n }\n }\n }\n function normalizeFilter(expression) {\n if (expression && !isEmptyObject(expression)) {\n if (isArray(expression) || !expression.filters) {\n expression = {\n logic: 'and',\n filters: isArray(expression) ? expression : [expression]\n };\n }\n normalizeOperator(expression);\n return expression;\n }\n }\n Query.normalizeFilter = normalizeFilter;\n function compareDescriptor(f1, f2) {\n if (f1.logic || f2.logic) {\n return false;\n }\n return f1.field === f2.field && f1.value === f2.value && f1.operator === f2.operator;\n }\n function normalizeDescriptor(filter) {\n filter = filter || {};\n if (isEmptyObject(filter)) {\n return {\n logic: 'and',\n filters: []\n };\n }\n return normalizeFilter(filter);\n }\n function fieldComparer(a, b) {\n if (b.logic || a.field > b.field) {\n return 1;\n } else if (a.field < b.field) {\n return -1;\n } else {\n return 0;\n }\n }\n function compareFilters(expr1, expr2) {\n expr1 = normalizeDescriptor(expr1);\n expr2 = normalizeDescriptor(expr2);\n if (expr1.logic !== expr2.logic) {\n return false;\n }\n var f1, f2;\n var filters1 = (expr1.filters || []).slice();\n var filters2 = (expr2.filters || []).slice();\n if (filters1.length !== filters2.length) {\n return false;\n }\n filters1 = filters1.sort(fieldComparer);\n filters2 = filters2.sort(fieldComparer);\n for (var idx = 0; idx < filters1.length; idx++) {\n f1 = filters1[idx];\n f2 = filters2[idx];\n if (f1.logic && f2.logic) {\n if (!compareFilters(f1, f2)) {\n return false;\n }\n } else if (!compareDescriptor(f1, f2)) {\n return false;\n }\n }\n return true;\n }\n Query.compareFilters = compareFilters;\n function normalizeAggregate(expressions) {\n return isArray(expressions) ? expressions : [expressions];\n }\n function normalizeGroup(field, dir, compare, skipItemSorting) {\n var descriptor = typeof field === STRING ? {\n field: field,\n dir: dir,\n compare: compare,\n skipItemSorting: skipItemSorting\n } : field, descriptors = isArray(descriptor) ? descriptor : descriptor !== undefined ? [descriptor] : [];\n return map(descriptors, function (d) {\n return {\n field: d.field,\n dir: d.dir || 'asc',\n aggregates: d.aggregates,\n compare: d.compare,\n skipItemSorting: d.skipItemSorting\n };\n });\n }\n function normalizeGroupWithoutCompare(field, dir, compare) {\n var descriptors = normalizeGroup(field, dir, compare);\n for (var i = 0; i < descriptors.length; i++) {\n delete descriptors[i].compare;\n }\n return descriptors;\n }\n function anyGroupDescriptorHasCompare(groupDescriptors) {\n var descriptors = isArray(groupDescriptors) ? groupDescriptors : [groupDescriptors];\n for (var i = 0; i < descriptors.length; i++) {\n if (descriptors[i] && isFunction(descriptors[i].compare)) {\n return true;\n }\n }\n return false;\n }\n Query.prototype = {\n toArray: function () {\n return this.data;\n },\n range: function (index, count) {\n return new Query(this.data.slice(index, index + count));\n },\n skip: function (count) {\n return new Query(this.data.slice(count));\n },\n take: function (count) {\n return new Query(this.data.slice(0, count));\n },\n select: function (selector) {\n return new Query(map(this.data, selector));\n },\n order: function (selector, dir, inPlace) {\n var sort = { dir: dir };\n if (selector) {\n if (selector.compare) {\n sort.compare = selector.compare;\n } else {\n sort.field = selector;\n }\n }\n if (inPlace) {\n return new Query(this.data.sort(Comparer.create(sort)));\n }\n return new Query(this.data.slice(0).sort(Comparer.create(sort)));\n },\n orderBy: function (selector, inPlace) {\n return this.order(selector, 'asc', inPlace);\n },\n orderByDescending: function (selector, inPlace) {\n return this.order(selector, 'desc', inPlace);\n },\n sort: function (field, dir, comparer, inPlace) {\n var idx, length, descriptors = normalizeSort(field, dir), comparers = [];\n comparer = comparer || Comparer;\n if (descriptors.length) {\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n comparers.push(comparer.create(descriptors[idx]));\n }\n return this.orderBy({ compare: comparer.combine(comparers) }, inPlace);\n }\n return this;\n },\n filter: function (expressions) {\n var idx, current, length, compiled, predicate, data = this.data, fields, operators, result = [], filter;\n expressions = normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n return this;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n current = data[idx];\n if (filter(current)) {\n result.push(current);\n }\n }\n return new Query(result);\n },\n group: function (descriptors, allData, options) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n if (options && options.groupPaging) {\n result = new Query(allData).groupAllData(descriptor, allData).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n var items = descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray(), options).toArray() : group.items;\n return {\n field: group.field,\n value: group.value,\n hasSubgroups: descriptors.length > 1,\n items: items,\n aggregates: data.aggregate(descriptor.aggregates),\n uid: kendo.guid(),\n itemCount: items.length,\n subgroupCount: items.length\n };\n });\n } else {\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n }\n return result;\n },\n groupBy: function (descriptor) {\n var that = this;\n if (isEmptyObject(descriptor) || !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? this.data : this._sortForGrouping(field, descriptor.dir || 'asc'), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = that._sortGroups(result, descriptor);\n return new Query(result);\n },\n groupAllData: function (descriptor, allData) {\n if (isEmptyObject(descriptor) || this.data && !this.data.length) {\n return new Query([]);\n }\n var field = descriptor.field, sorted = descriptor.skipItemSorting ? allData : new Query(allData).sort(field, descriptor.dir || 'asc', StableComparer).toArray(), accessor = kendo.accessor(field), item, groupValue = accessor.get(sorted[0], field), group = {\n field: field,\n value: groupValue,\n items: []\n }, currentValue, idx, len, result = [group];\n for (idx = 0, len = sorted.length; idx < len; idx++) {\n item = sorted[idx];\n currentValue = accessor.get(item, field);\n if (!groupValueComparer(groupValue, currentValue)) {\n groupValue = currentValue;\n group = {\n field: field,\n value: groupValue,\n items: []\n };\n result.push(group);\n }\n group.items.push(item);\n }\n result = this._sortGroups(result, descriptor);\n return new Query(result);\n },\n _sortForGrouping: function (field, dir) {\n var idx, length, data = this.data;\n if (!stableSort) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n data[idx].__position = idx;\n }\n data = new Query(data).sort(field, dir, StableComparer).toArray();\n for (idx = 0, length = data.length; idx < length; idx++) {\n delete data[idx].__position;\n }\n return data;\n }\n return this.sort(field, dir).toArray();\n },\n _sortGroups: function (groups, descriptor) {\n var result = groups;\n if (descriptor && isFunction(descriptor.compare)) {\n result = new Query(result).order({ compare: descriptor.compare }, descriptor.dir || ASCENDING).toArray();\n }\n return result;\n },\n aggregate: function (aggregates) {\n var idx, len, result = {}, state = {};\n if (aggregates && aggregates.length) {\n for (idx = 0, len = this.data.length; idx < len; idx++) {\n calculateAggregate(result, aggregates, this.data[idx], idx, len, state);\n }\n }\n return result;\n }\n };\n function groupValueComparer(a, b) {\n if (a && a.getTime && b && b.getTime) {\n return a.getTime() === b.getTime();\n }\n return a === b;\n }\n function calculateAggregate(accumulator, aggregates, item, index, length, state) {\n aggregates = aggregates || [];\n var idx, aggr, functionName, len = aggregates.length;\n for (idx = 0; idx < len; idx++) {\n aggr = aggregates[idx];\n functionName = aggr.aggregate;\n var field = aggr.field;\n accumulator[field] = accumulator[field] || {};\n state[field] = state[field] || {};\n state[field][functionName] = state[field][functionName] || {};\n accumulator[field][functionName] = functions[functionName.toLowerCase()](accumulator[field][functionName], item, kendo.accessor(field), index, length, state[field][functionName]);\n }\n }\n var functions = {\n sum: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n return accumulator;\n },\n count: function (accumulator) {\n return (accumulator || 0) + 1;\n },\n average: function (accumulator, item, accessor, index, length, state) {\n var value = accessor.get(item);\n if (state.count === undefined) {\n state.count = 0;\n }\n if (!isNumber(accumulator)) {\n accumulator = value;\n } else if (isNumber(value)) {\n accumulator += value;\n }\n if (isNumber(value)) {\n state.count++;\n }\n if (index == length - 1 && isNumber(accumulator)) {\n accumulator = accumulator / state.count;\n }\n return accumulator;\n },\n max: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator < value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n },\n min: function (accumulator, item, accessor) {\n var value = accessor.get(item);\n if (!isNumber(accumulator) && !isDate(accumulator)) {\n accumulator = value;\n }\n if (accumulator > value && (isNumber(value) || isDate(value))) {\n accumulator = value;\n }\n return accumulator;\n }\n };\n function isNumber(val) {\n return typeof val === 'number' && !isNaN(val);\n }\n function isDate(val) {\n return val && val.getTime;\n }\n function toJSON(array) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = array[idx].toJSON();\n }\n return result;\n }\n Query.normalizeGroup = normalizeGroup;\n Query.normalizeSort = normalizeSort;\n Query.process = function (data, options, inPlace) {\n options = options || {};\n var group = options.group;\n var customGroupSort = anyGroupDescriptorHasCompare(normalizeGroup(group || []));\n var query = new Query(data), groupDescriptorsWithoutCompare = normalizeGroupWithoutCompare(group || []), normalizedSort = normalizeSort(options.sort || []), sort = customGroupSort ? normalizedSort : groupDescriptorsWithoutCompare.concat(normalizedSort), groupDescriptorsWithoutSort, total, filterCallback = options.filterCallback, filter = options.filter, skip = options.skip, take = options.take;\n if (sort && inPlace) {\n query = query.sort(sort, undefined, undefined, inPlace);\n }\n if (filter) {\n query = query.filter(filter);\n if (filterCallback) {\n query = filterCallback(query);\n }\n total = query.toArray().length;\n }\n if (sort) {\n if (!inPlace) {\n query = query.sort(sort);\n }\n if (group) {\n data = query.toArray();\n }\n }\n if (customGroupSort) {\n query = query.group(group, data);\n if (skip !== undefined && take !== undefined) {\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);\n }\n } else {\n if (skip !== undefined && take !== undefined) {\n query = query.range(skip, take);\n }\n if (group) {\n query = query.group(group, data, options);\n }\n }\n return {\n total: total,\n data: query.toArray()\n };\n };\n var LocalTransport = Class.extend({\n init: function (options) {\n this.data = options.data;\n },\n read: function (options) {\n options.success(this.data);\n },\n update: function (options) {\n options.success(options.data);\n },\n create: function (options) {\n options.success(options.data);\n },\n destroy: function (options) {\n options.success(options.data);\n }\n });\n var RemoteTransport = Class.extend({\n init: function (options) {\n var that = this, parameterMap;\n options = that.options = extend({}, that.options, options);\n each(crud, function (index, type) {\n if (typeof options[type] === STRING) {\n options[type] = { url: options[type] };\n }\n });\n that.cache = options.cache ? Cache.create(options.cache) : {\n find: noop,\n add: noop\n };\n parameterMap = options.parameterMap;\n if (options.submit) {\n that.submit = options.submit;\n }\n if (isFunction(options.push)) {\n that.push = options.push;\n }\n if (!that.push) {\n that.push = identity;\n }\n that.parameterMap = isFunction(parameterMap) ? parameterMap : function (options) {\n var result = {};\n each(options, function (option, value) {\n if (option in parameterMap) {\n option = parameterMap[option];\n if (isPlainObject(option)) {\n value = option.value(value);\n option = option.key;\n }\n }\n result[option] = value;\n });\n return result;\n };\n },\n options: { parameterMap: identity },\n create: function (options) {\n return ajax(this.setup(options, CREATE));\n },\n read: function (options) {\n var that = this, success, error, result, cache = that.cache;\n options = that.setup(options, READ);\n success = options.success || noop;\n error = options.error || noop;\n result = cache.find(options.data);\n if (result !== undefined) {\n success(result);\n } else {\n options.success = function (result) {\n cache.add(options.data, result);\n success(result);\n };\n $.ajax(options);\n }\n },\n update: function (options) {\n return ajax(this.setup(options, UPDATE));\n },\n destroy: function (options) {\n return ajax(this.setup(options, DESTROY));\n },\n setup: function (options, type) {\n options = options || {};\n var that = this, parameters, operation = that.options[type], data = isFunction(operation.data) ? operation.data(options.data) : operation.data;\n options = extend(true, {}, operation, options);\n parameters = extend(true, {}, data, options.data);\n options.data = that.parameterMap(parameters, type);\n if (isFunction(options.url)) {\n options.url = options.url(parameters);\n }\n return options;\n }\n });\n var Cache = Class.extend({\n init: function () {\n this._store = {};\n },\n add: function (key, data) {\n if (key !== undefined) {\n this._store[stringify(key)] = data;\n }\n },\n find: function (key) {\n return this._store[stringify(key)];\n },\n clear: function () {\n this._store = {};\n },\n remove: function (key) {\n delete this._store[stringify(key)];\n }\n });\n Cache.create = function (options) {\n var store = {\n 'inmemory': function () {\n return new Cache();\n }\n };\n if (isPlainObject(options) && isFunction(options.find)) {\n return options;\n }\n if (options === true) {\n return new Cache();\n }\n return store[options]();\n };\n function serializeRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, setters = {}, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n if (!setters[originalName]) {\n setters[originalName] = kendo.setter(originalName);\n }\n setters[originalName](record, getters[getter](record));\n delete record[getter];\n }\n }\n }\n }\n function convertRecords(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, getter, originalName, idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n for (getter in getters) {\n record[getter] = modelInstance._parse(getter, getters[getter](record));\n originalName = fieldNames[getter];\n if (originalName && originalName !== getter) {\n delete record[originalName];\n }\n }\n }\n }\n function convertGroup(data, getters, modelInstance, originalFieldNames, fieldNames) {\n var record, idx, fieldName, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n record = data[idx];\n fieldName = originalFieldNames[record.field];\n if (fieldName && fieldName != record.field) {\n record.field = fieldName;\n }\n record.value = modelInstance._parse(record.field, record.value);\n if (record.items) {\n if (record.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n return wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames)(data);\n };\n }\n function wrapDataAccessBase(model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n if (data && !isEmptyObject(getters)) {\n if (toString.call(data) !== '[object Array]' && !(data instanceof ObservableArray)) {\n data = [data];\n }\n converter(data, getters, new model(), originalFieldNames, fieldNames);\n }\n return data || [];\n };\n }\n var DataReader = Class.extend({\n init: function (schema) {\n var that = this, member, get, model, base;\n schema = schema || {};\n for (member in schema) {\n get = schema[member];\n that[member] = typeof get === STRING ? getter(get) : get;\n }\n base = schema.modelBase || Model;\n if (isPlainObject(that.model)) {\n that.model = model = base.define(that.model);\n }\n var dataFunction = proxy(that.data, that);\n that._dataAccessFunction = dataFunction;\n if (that.model) {\n var groupsFunction = proxy(that.groups, that), serializeFunction = proxy(that.serialize, that), originalFieldNames = {}, getters = {}, serializeGetters = {}, fieldNames = {}, shouldSerialize = false, fieldName, name;\n model = that.model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n var fromName;\n fieldName = field;\n if (isPlainObject(value) && value.field) {\n fieldName = value.field;\n } else if (typeof value === STRING) {\n fieldName = value;\n }\n if (isPlainObject(value) && value.from) {\n fromName = value.from;\n }\n shouldSerialize = shouldSerialize || fromName && fromName !== field || fieldName !== field;\n name = fromName || fieldName;\n getters[field] = name.indexOf('.') !== -1 ? getter(name, true) : getter(name);\n serializeGetters[field] = getter(field);\n originalFieldNames[fromName || fieldName] = field;\n fieldNames[field] = fromName || fieldName;\n });\n if (!schema.serialize && shouldSerialize) {\n that.serialize = wrapDataAccess(serializeFunction, model, serializeRecords, serializeGetters, originalFieldNames, fieldNames);\n }\n }\n that._dataAccessFunction = dataFunction;\n that._wrapDataAccessBase = wrapDataAccessBase(model, convertRecords, getters, originalFieldNames, fieldNames);\n that.data = wrapDataAccess(dataFunction, model, convertRecords, getters, originalFieldNames, fieldNames);\n that.groups = wrapDataAccess(groupsFunction, model, convertGroup, getters, originalFieldNames, fieldNames);\n }\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n parse: identity,\n data: identity,\n total: function (data) {\n return data.length;\n },\n groups: identity,\n aggregates: function () {\n return {};\n },\n serialize: function (data) {\n return data;\n }\n });\n function fillLastGroup(originalGroup, newGroup) {\n var currOriginal;\n var currentNew;\n if (newGroup.items && newGroup.items.length) {\n for (var i = 0; i < newGroup.items.length; i++) {\n currOriginal = originalGroup.items[i];\n currentNew = newGroup.items[i];\n if (currOriginal && currentNew) {\n if (currOriginal.hasSubgroups) {\n fillLastGroup(currOriginal, currentNew);\n } else if (currOriginal.field && currOriginal.value == currentNew.value) {\n currOriginal.items.push.apply(currOriginal.items, currentNew.items);\n } else {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n } else if (currentNew) {\n originalGroup.items.push.apply(originalGroup.items, [currentNew]);\n }\n }\n }\n }\n function mergeGroups(target, dest, skip, take) {\n var group, idx = 0, items;\n while (dest.length && take) {\n group = dest[idx];\n items = group.items;\n var length = items.length;\n if (target && target.field === group.field && target.value === group.value) {\n if (target.hasSubgroups && target.items.length) {\n mergeGroups(target.items[target.items.length - 1], group.items, skip, take);\n } else {\n items = items.slice(skip, skip + take);\n target.items = target.items.concat(items);\n }\n dest.splice(idx--, 1);\n } else if (group.hasSubgroups && items.length) {\n mergeGroups(group, items, skip, take);\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n } else {\n items = items.slice(skip, skip + take);\n group.items = items;\n if (!group.items.length) {\n dest.splice(idx--, 1);\n }\n }\n if (items.length === 0) {\n skip -= length;\n } else {\n skip = 0;\n take -= items.length;\n }\n if (++idx >= dest.length) {\n break;\n }\n }\n if (idx < dest.length) {\n dest.splice(idx, dest.length - idx);\n }\n }\n function flatGroups(groups, indexFunction) {\n var result = [];\n var groupsLength = (groups || []).length;\n var group;\n var items;\n var indexFn = isFunction(indexFunction) ? indexFunction : function (array, index) {\n return array[index];\n };\n for (var groupIndex = 0; groupIndex < groupsLength; groupIndex++) {\n group = indexFn(groups, groupIndex);\n if (group.hasSubgroups) {\n result = result.concat(flatGroups(group.items));\n } else {\n items = group.items;\n for (var itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(indexFn(items, itemIndex));\n }\n }\n }\n return result;\n }\n function flattenGroups(data) {\n var idx, result = [], length, items, itemIndex;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.items) {\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\n }\n }\n }\n }\n }\n function eachGroupItems(data, func) {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx].hasSubgroups) {\n if (eachGroupItems(data[idx].items, func)) {\n return true;\n }\n } else if (func(data[idx].items, data[idx])) {\n return true;\n }\n }\n }\n function replaceInRanges(ranges, data, item, observable) {\n for (var idx = 0; idx < ranges.length; idx++) {\n if (ranges[idx].data === data) {\n break;\n }\n if (replaceInRange(ranges[idx].data, item, observable)) {\n break;\n }\n }\n }\n function replaceInRange(items, item, observable) {\n for (var idx = 0, length = items.length; idx < length; idx++) {\n if (items[idx] && items[idx].hasSubgroups) {\n return replaceInRange(items[idx].items, item, observable);\n } else if (items[idx] === item || items[idx] === observable) {\n items[idx] = observable;\n return true;\n }\n }\n }\n function replaceWithObservable(view, data, ranges, type, serverGrouping) {\n for (var viewIndex = 0, length = view.length; viewIndex < length; viewIndex++) {\n var item = view[viewIndex];\n if (!item || item instanceof type) {\n continue;\n }\n if (item.hasSubgroups !== undefined && !serverGrouping) {\n replaceWithObservable(item.items, data, ranges, type, serverGrouping);\n } else {\n for (var idx = 0; idx < data.length; idx++) {\n if (data[idx] === item) {\n view[viewIndex] = data.at(idx);\n replaceInRanges(ranges, data, item, view[viewIndex]);\n break;\n }\n }\n }\n }\n }\n function removeModel(data, model) {\n if (!data) {\n return;\n }\n var length = data.length;\n var dataItem;\n var idx;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._groupPaging = options.groupPaging;\n if (that._groupPaging) {\n that._groupsState = {};\n }\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _isServerGroupPaged: function () {\n return this._isServerGrouped() && this._groupPaging;\n },\n _isGroupPaged: function () {\n var group = this._group || [];\n return this._groupPaging && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n this._insertModelInRange(index, model);\n return model;\n },\n pushInsert: function (index, items) {\n var that = this;\n var rangeSpan = that._getCurrentRangeSpan();\n if (!items) {\n items = index;\n index = 0;\n }\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var result = this.insert(index, item);\n pushed.push(result);\n var pristine = result.toJSON();\n if (this._isServerGrouped()) {\n pristine = this._wrapInEmptyGroup(pristine);\n }\n this._pristineData.push(pristine);\n if (rangeSpan && rangeSpan.length) {\n $(rangeSpan).last()[0].pristineData.push(pristine);\n }\n index++;\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'create',\n items: pushed\n });\n }\n },\n pushCreate: function (items) {\n this.pushInsert(this._data.length, items);\n },\n pushUpdate: function (items) {\n if (!isArray(items)) {\n items = [items];\n }\n var pushed = [];\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var target = this.get(model.id);\n if (target) {\n pushed.push(target);\n target.accept(item);\n target.trigger(CHANGE);\n this._updatePristineForModel(target, item);\n } else {\n this.pushCreate(item);\n }\n }\n if (pushed.length) {\n this.trigger('push', {\n type: 'update',\n items: pushed\n });\n }\n },\n pushDestroy: function (items) {\n var pushed = this._removeItems(items);\n if (pushed.length) {\n this.trigger('push', {\n type: 'destroy',\n items: pushed\n });\n }\n },\n _removeItems: function (items, removePristine) {\n if (!isArray(items)) {\n items = [items];\n }\n var shouldRemovePristine = typeof removePristine !== 'undefined' ? removePristine : true;\n var destroyed = [];\n var autoSync = this.options.autoSync;\n this.options.autoSync = false;\n try {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items[idx];\n var model = this._createNewModel(item);\n var found = false;\n this._eachItem(this._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.id === model.id) {\n destroyed.push(item);\n items.splice(idx, 1);\n found = true;\n break;\n }\n }\n });\n if (found && shouldRemovePristine) {\n this._removePristineForModel(model);\n this._destroyed.pop();\n }\n }\n } finally {\n this.options.autoSync = autoSync;\n }\n return destroyed;\n },\n remove: function (model) {\n var result, that = this, hasGroups = that._isServerGrouped();\n this._eachItem(that._data, function (items) {\n result = removeModel(items, model);\n if (result && hasGroups) {\n if (!result.isNew || !result.isNew()) {\n that._destroyed.push(result);\n }\n return true;\n }\n });\n this._removeModelFromRanges(model);\n return model;\n },\n destroyed: function () {\n return this._destroyed;\n },\n created: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew()) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n updated: function () {\n var idx, length, result = [], data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && !data[idx].isNew() && data[idx].dirty) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n sync: function () {\n var that = this, created = [], updated = [], destroyed = that._destroyed;\n var promise = $.Deferred().resolve().promise();\n if (that.online()) {\n if (!that.reader.model) {\n return promise;\n }\n created = that.created();\n updated = that.updated();\n var promises = [];\n if (that.options.batch && that.transport.submit) {\n promises = that._sendSubmit(created, updated, destroyed);\n } else {\n promises.push.apply(promises, that._send('create', created));\n promises.push.apply(promises, that._send('update', updated));\n promises.push.apply(promises, that._send('destroy', destroyed));\n }\n promise = $.when.apply(null, promises).then(function () {\n var idx, length;\n for (idx = 0, length = arguments.length; idx < length; idx++) {\n if (arguments[idx]) {\n that._accept(arguments[idx]);\n }\n }\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n that.trigger(SYNC);\n if (that._isServerGroupPaged()) {\n that.read();\n }\n });\n } else {\n that._storeData(true);\n that._syncEnd();\n that._change({ action: 'sync' });\n }\n return promise;\n },\n _syncEnd: noop,\n cancelChanges: function (model) {\n var that = this;\n if (model instanceof kendo.data.Model) {\n that._cancelModel(model);\n } else {\n that._destroyed = [];\n that._detachObservableParents();\n that._data = that._observe(that._pristineData);\n if (that.options.serverPaging) {\n that._total = that._pristineTotal;\n }\n that._ranges = [];\n that._addRange(that._data, 0);\n that._changesCanceled();\n that._change();\n that._markOfflineUpdatesAsDirty();\n if (that._isServerGrouped()) {\n that.read();\n }\n }\n },\n _changesCanceled: noop,\n _markOfflineUpdatesAsDirty: function () {\n var that = this;\n if (that.options.offlineStorage != null) {\n that._eachItem(that._data, function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n var item = items.at(idx);\n if (item.__state__ == 'update' || item.__state__ == 'create') {\n item.dirty = true;\n }\n }\n });\n }\n },\n hasChanges: function () {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n if (this._destroyed.length) {\n return true;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].isNew && data[idx].isNew() || data[idx].dirty) {\n return true;\n }\n }\n return false;\n },\n _accept: function (result) {\n var that = this, models = result.models, response = result.response, idx = 0, serverGroup = that._isServerGrouped(), pristine = that._pristineData, type = result.type, length;\n that.trigger(REQUESTEND, {\n response: response,\n type: type\n });\n if (response && !isEmptyObject(response)) {\n response = that.reader.parse(response);\n if (that._handleCustomErrors(response)) {\n return;\n }\n response = that.reader.data(response);\n if (!isArray(response)) {\n response = [response];\n }\n } else {\n response = $.map(models, function (model) {\n return model.toJSON();\n });\n }\n if (type === 'destroy') {\n that._destroyed = [];\n }\n for (idx = 0, length = models.length; idx < length; idx++) {\n if (type !== 'destroy') {\n models[idx].accept(response[idx]);\n if (type === 'create') {\n pristine.push(serverGroup ? that._wrapInEmptyGroup(models[idx].toJSON()) : response[idx]);\n } else if (type === 'update') {\n that._updatePristineForModel(models[idx], response[idx]);\n }\n } else {\n that._removePristineForModel(models[idx]);\n }\n }\n },\n _updatePristineForModel: function (model, values) {\n this._executeOnPristineForModel(model, function (index, items) {\n kendo.deepExtend(items[index], values);\n });\n },\n _executeOnPristineForModel: function (model, callback) {\n this._eachPristineItem(function (items) {\n var index = indexOfPristineModel(items, model);\n if (index > -1) {\n callback(index, items);\n return true;\n }\n });\n },\n _removePristineForModel: function (model) {\n this._executeOnPristineForModel(model, function (index, items) {\n items.splice(index, 1);\n });\n },\n _readData: function (data) {\n var read = !this._isServerGrouped() ? this.reader.data : this.reader.groups;\n return read.call(this.reader, data);\n },\n _eachPristineItem: function (callback) {\n var that = this;\n var options = that.options;\n var rangeSpan = that._getCurrentRangeSpan();\n that._eachItem(that._pristineData, callback);\n if (options.serverPaging && options.useRanges) {\n each(rangeSpan, function (i, range) {\n that._eachItem(range.pristineData, callback);\n });\n }\n },\n _eachItem: function (data, callback) {\n if (data && data.length) {\n if (this._isServerGrouped()) {\n eachGroupItems(data, callback);\n } else {\n callback(data);\n }\n }\n },\n _pristineForModel: function (model) {\n var pristine, idx, callback = function (items) {\n idx = indexOfPristineModel(items, model);\n if (idx > -1) {\n pristine = items[idx];\n return true;\n }\n };\n this._eachPristineItem(callback);\n return pristine;\n },\n _cancelModel: function (model) {\n var that = this;\n var pristine = this._pristineForModel(model);\n this._eachItem(this._data, function (items) {\n var idx = indexOfModel(items, model);\n if (idx >= 0) {\n if (pristine && (!model.isNew() || pristine.__state__)) {\n items[idx].accept(pristine);\n if (pristine.__state__ == 'update') {\n items[idx].dirty = true;\n }\n } else {\n that._modelCanceled(model);\n items.splice(idx, 1);\n that._removeModelFromRanges(model);\n }\n }\n });\n },\n _modelCanceled: noop,\n _submit: function (promises, data) {\n var that = this;\n that.trigger(REQUESTSTART, { type: 'submit' });\n that.trigger(PROGRESS);\n that.transport.submit(extend({\n success: function (response, type) {\n var promise = $.grep(promises, function (x) {\n return x.type == type;\n })[0];\n if (promise) {\n promise.resolve({\n response: response,\n models: promise.models,\n type: type\n });\n }\n },\n error: function (response, status, error) {\n for (var idx = 0; idx < promises.length; idx++) {\n promises[idx].reject(response);\n }\n that.error(response, status, error);\n }\n }, data));\n },\n _sendSubmit: function (created, updated, destroyed) {\n var that = this, promises = [];\n if (that.options.batch) {\n if (created.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'create';\n deferred.models = created;\n }));\n }\n if (updated.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'update';\n deferred.models = updated;\n }));\n }\n if (destroyed.length) {\n promises.push($.Deferred(function (deferred) {\n deferred.type = 'destroy';\n deferred.models = destroyed;\n }));\n }\n that._submit(promises, {\n data: {\n created: that.reader.serialize(toJSON(created)),\n updated: that.reader.serialize(toJSON(updated)),\n destroyed: that.reader.serialize(toJSON(destroyed))\n }\n });\n }\n return promises;\n },\n _promise: function (data, models, type) {\n var that = this;\n return $.Deferred(function (deferred) {\n that.trigger(REQUESTSTART, { type: type });\n that.trigger(PROGRESS);\n that.transport[type].call(that.transport, extend({\n success: function (response) {\n deferred.resolve({\n response: response,\n models: models,\n type: type\n });\n },\n error: function (response, status, error) {\n deferred.reject(response);\n that.error(response, status, error);\n }\n }, data));\n }).promise();\n },\n _send: function (method, data) {\n var that = this, idx, length, promises = [], converted = that.reader.serialize(toJSON(data));\n if (that.options.batch) {\n if (data.length) {\n promises.push(that._promise({ data: { models: converted } }, data, method));\n }\n } else {\n for (idx = 0, length = data.length; idx < length; idx++) {\n promises.push(that._promise({ data: converted[idx] }, [data[idx]], method));\n }\n }\n return promises;\n },\n read: function (data) {\n var that = this, params = that._params(data);\n var deferred = $.Deferred();\n that._queueRequest(params, function () {\n var isPrevented = that.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n that.trigger(PROGRESS);\n that._ranges = [];\n that.trigger('reset');\n if (that.online()) {\n that.transport.read({\n data: params,\n success: function (data) {\n that._ranges = [];\n that.success(data, params);\n deferred.resolve();\n },\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n deferred.reject.apply(deferred, args);\n }\n });\n } else if (that.options.offlineStorage != null) {\n that.success(that.offlineData(), params);\n deferred.resolve();\n }\n } else {\n that._dequeueRequest();\n deferred.resolve(isPrevented);\n }\n });\n return deferred.promise();\n },\n _readAggregates: function (data) {\n return this.reader.aggregates(data);\n },\n success: function (data) {\n var that = this, options = that.options, items, replaceSubset;\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n if (that.online()) {\n data = that.reader.parse(data);\n if (that._handleCustomErrors(data)) {\n that._dequeueRequest();\n return;\n }\n that._total = that.reader.total(data);\n if (that._isServerGroupPaged()) {\n that._serverGroupsTotal = that._total;\n }\n if (that._pageSize > that._total) {\n that._pageSize = that._total;\n if (that.options.pageSize && that.options.pageSize > that._pageSize) {\n that._pageSize = that.options.pageSize;\n }\n }\n if (that._aggregate && options.serverAggregates) {\n that._aggregateResult = that._readAggregates(data);\n }\n data = that._readData(data);\n that._destroyed = [];\n } else {\n data = that._readData(data);\n items = [];\n var itemIds = {};\n var model = that.reader.model;\n var idField = model ? model.idField : 'id';\n var idx;\n for (idx = 0; idx < this._destroyed.length; idx++) {\n var id = this._destroyed[idx][idField];\n itemIds[id] = id;\n }\n for (idx = 0; idx < data.length; idx++) {\n var item = data[idx];\n var state = item.__state__;\n if (state == 'destroy') {\n if (!itemIds[item[idField]]) {\n this._destroyed.push(this._createNewModel(item));\n }\n } else {\n items.push(item);\n }\n }\n data = items;\n that._total = data.length;\n }\n that._pristineTotal = that._total;\n replaceSubset = that._skip && that._data.length && that._skip < that._data.length;\n if (that.options.endless) {\n if (replaceSubset) {\n that._pristineData.splice(that._skip, that._pristineData.length);\n }\n items = data.slice(0);\n for (var j = 0; j < items.length; j++) {\n that._pristineData.push(items[j]);\n }\n } else {\n that._pristineData = data.slice(0);\n }\n that._detachObservableParents();\n if (that.options.endless) {\n that._data.unbind(CHANGE, that._changeHandler);\n if (that._isServerGrouped() && that._data[that._data.length - 1].value === data[0].value) {\n fillLastGroup(that._data[that._data.length - 1], data[0]);\n data.shift();\n }\n data = that._observe(data);\n if (replaceSubset) {\n that._data.splice(that._skip, that._data.length);\n }\n for (var i = 0; i < data.length; i++) {\n that._data.push(data[i]);\n }\n that._data.bind(CHANGE, that._changeHandler);\n } else {\n that._data = that._observe(data);\n }\n that._markOfflineUpdatesAsDirty();\n that._storeData();\n that._addRange(that._data);\n that._process(that._data);\n that._dequeueRequest();\n },\n _detachObservableParents: function () {\n if (this._data && this._shouldDetachObservableParents) {\n for (var idx = 0; idx < this._data.length; idx++) {\n if (this._data[idx].parent) {\n this._data[idx].parent = noop;\n }\n }\n }\n },\n _storeData: function (updatePristine) {\n var serverGrouping = this._isServerGrouped();\n var model = this.reader.model;\n function items(data) {\n var state = [];\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data.at(idx);\n var item = dataItem.toJSON();\n if (serverGrouping && dataItem.items) {\n item.items = items(dataItem.items);\n } else {\n item.uid = dataItem.uid;\n if (model) {\n if (dataItem.isNew()) {\n item.__state__ = 'create';\n } else if (dataItem.dirty) {\n item.__state__ = 'update';\n }\n }\n }\n state.push(item);\n }\n return state;\n }\n if (this.options.offlineStorage != null) {\n var state = items(this._data);\n var destroyed = [];\n for (var idx = 0; idx < this._destroyed.length; idx++) {\n var item = this._destroyed[idx].toJSON();\n item.__state__ = 'destroy';\n destroyed.push(item);\n }\n this.offlineData(state.concat(destroyed));\n if (updatePristine) {\n this._pristineData = this.reader.reader ? this.reader.reader._wrapDataAccessBase(state) : this.reader._wrapDataAccessBase(state);\n }\n }\n },\n _addRange: function (data, skip) {\n var that = this, start = typeof skip !== 'undefined' ? skip : that._skip || 0, end, range = {\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n };\n if (this._isGroupPaged()) {\n end = start + data.length;\n range.outerStart = start;\n range.outerEnd = end;\n } else {\n end = start + that._flatData(data, true).length;\n }\n range.start = start;\n range.end = end;\n that._ranges.push(range);\n that._sortRanges();\n if (that._isGroupPaged()) {\n if (!that._groupsFlat) {\n that._groupsFlat = [];\n }\n that._appendToGroupsFlat(range.data);\n that._updateOuterRangesLength();\n }\n },\n _appendToGroupsFlat: function (data) {\n var length = data.length;\n for (var i = 0; i < length; i++) {\n this._groupsFlat.push(data[i]);\n }\n },\n _getGroupByUid: function (uid) {\n var length = this._groupsFlat.length;\n var group;\n for (var i = 0; i < length; i++) {\n group = this._groupsFlat[i];\n if (group.uid === uid) {\n return group;\n }\n }\n },\n _sortRanges: function () {\n this._ranges.sort(function (x, y) {\n return x.start - y.start;\n });\n },\n error: function (xhr, status, errorThrown) {\n this._dequeueRequest();\n this.trigger(REQUESTEND, {});\n this.trigger(ERROR, {\n xhr: xhr,\n status: status,\n errorThrown: errorThrown\n });\n },\n _params: function (data) {\n var that = this, options = extend({\n take: that.take(),\n skip: that.skip(),\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate,\n groupPaging: !!that._groupPaging\n }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n if (!that.options.groupPaging) {\n delete options.groupPaging;\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray && !(that.options.useRanges && that.options.serverPaging)) {\n that._data.unbind(CHANGE, that._changeHandler);\n } else {\n that._changeHandler = proxy(that._change, that);\n }\n return data.bind(CHANGE, that._changeHandler);\n },\n _updateTotalForAction: function (action, items) {\n var that = this;\n var total = parseInt(that._total, 10);\n if (!isNumber(that._total)) {\n total = parseInt(that._pristineTotal, 10);\n }\n if (action === 'add') {\n total += items.length;\n } else if (action === 'remove') {\n total -= items.length;\n } else if (action !== 'itemchange' && action !== 'sync' && !that.options.serverPaging) {\n total = that._pristineTotal;\n } else if (action === 'sync') {\n total = that._pristineTotal = parseInt(that._total, 10);\n }\n that._total = total;\n },\n _change: function (e) {\n var that = this, idx, length, action = e ? e.action : '';\n if (action === 'remove') {\n for (idx = 0, length = e.items.length; idx < length; idx++) {\n if (!e.items[idx].isNew || !e.items[idx].isNew()) {\n that._destroyed.push(e.items[idx]);\n }\n }\n }\n if (that.options.autoSync && (action === 'add' || action === 'remove' || action === 'itemchange')) {\n var handler = function (args) {\n if (args.action === 'sync') {\n that.unbind('change', handler);\n that._updateTotalForAction(action, e.items);\n }\n };\n that.first('change', handler);\n that.sync();\n } else {\n that._updateTotalForAction(action, e ? e.items : []);\n that._process(that._data, e);\n }\n },\n _calculateAggregates: function (data, options) {\n options = options || {};\n var query = new Query(data), aggregates = options.aggregate, filter = options.filter;\n if (filter) {\n query = query.filter(filter);\n }\n return query.aggregate(aggregates);\n },\n _process: function (data, e) {\n var that = this, options = {}, result;\n if (that.options.serverPaging !== true) {\n options.skip = that._skip;\n options.take = that._take || that._pageSize;\n if (options.skip === undefined && that._page !== undefined && that._pageSize !== undefined) {\n options.skip = (that._page - 1) * that._pageSize;\n }\n if (that.options.useRanges) {\n options.skip = that.currentRangeStart();\n }\n }\n if (that.options.serverSorting !== true) {\n options.sort = that._sort;\n }\n if (that.options.serverFiltering !== true) {\n options.filter = that._filter;\n }\n if (that.options.serverGrouping !== true) {\n options.group = that._group;\n }\n if (that.options.serverAggregates !== true) {\n options.aggregate = that._aggregate;\n }\n if (that.options.serverGrouping) {\n that._clearEmptyGroups(data);\n }\n options.groupPaging = that._groupPaging;\n if (that._isGroupPaged() && e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n result = that._queryProcess(data, { aggregate: that._aggregate });\n } else {\n result = that._queryProcess(data, options);\n }\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that._setView(result, options, e);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\n },\n _setView: function (result, options, e) {\n var that = this;\n if (that._isGroupPaged() && !that._isServerGrouped()) {\n if (e && (e.action === 'page' || e.action === 'expandGroup' || e.action === 'collapseGroup')) {\n that.view(result.data);\n that._updateOuterRangesLength();\n } else {\n that._ranges = [];\n var query = new Query(result.data);\n that._addRange(that._observe(result.data));\n if (options.skip + options.take > result.data.length) {\n options.skip = result.data.length - options.take;\n }\n that.view(query.range(options.skip, options.take).toArray());\n }\n } else {\n that.view(result.data);\n }\n },\n _clearEmptyGroups: function (data) {\n for (var idx = data.length - 1; idx >= 0; idx--) {\n var group = data[idx];\n if (group.hasSubgroups) {\n this._clearEmptyGroups(group.items);\n } else {\n if (group.items && !group.items.length) {\n splice.apply(group.parent(), [\n idx,\n 1\n ]);\n }\n }\n }\n },\n _queryProcess: function (data, options) {\n if (this.options.inPlaceSort) {\n return Query.process(data, options, this.options.inPlaceSort);\n } else {\n return Query.process(data, options);\n }\n },\n _mergeState: function (options) {\n var that = this;\n if (options !== undefined) {\n that._pageSize = options.pageSize;\n that._page = options.page;\n that._sort = options.sort;\n that._filter = options.filter;\n that._group = options.group;\n that._aggregate = options.aggregate;\n that._skip = that._currentRangeStart = options.skip;\n that._take = options.take;\n if (that._skip === undefined) {\n that._skip = that._currentRangeStart = that.skip();\n options.skip = that.skip();\n }\n if (that._take === undefined && that._pageSize !== undefined) {\n that._take = that._pageSize;\n options.take = that._take;\n }\n if (options.sort) {\n that._sort = options.sort = normalizeSort(options.sort);\n that._sortFields = sortFields(options.sort);\n }\n if (options.filter) {\n that._filter = options.filter = that.options.accentFoldingFiltering && !$.isEmptyObject(options.filter) ? $.extend({}, normalizeFilter(options.filter), { accentFoldingFiltering: that.options.accentFoldingFiltering }) : normalizeFilter(options.filter);\n }\n if (options.group) {\n that._group = options.group = normalizeGroup(options.group);\n }\n if (options.aggregate) {\n that._aggregate = options.aggregate = normalizeAggregate(options.aggregate);\n }\n }\n return options;\n },\n query: function (options) {\n var result;\n var remote = this.options.serverSorting || this.options.serverPaging || this.options.serverFiltering || this.options.serverGrouping || this.options.serverAggregates;\n if (remote || (this._data === undefined || this._data.length === 0) && !this._destroyed.length) {\n if (this.options.endless) {\n var moreItemsCount = options.pageSize - this.pageSize();\n if (moreItemsCount > 0) {\n moreItemsCount = this.pageSize();\n options.page = options.pageSize / moreItemsCount;\n options.pageSize = moreItemsCount;\n } else {\n options.page = 1;\n this.options.endless = false;\n }\n }\n return this.read(this._mergeState(options));\n }\n var isPrevented = this.trigger(REQUESTSTART, { type: 'read' });\n if (!isPrevented) {\n this.trigger(PROGRESS);\n if (options) {\n options.groupPaging = this._groupPaging;\n }\n result = this._queryProcess(this._data, this._mergeState(options));\n this._setFilterTotal(result.total, true);\n this._aggregateResult = this._calculateAggregates(result.dataToAggregate || this._data, options);\n this._setView(result, options);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, {\n items: result.data,\n action: options ? options.action : ''\n });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n _hasExpandedSubGroups: function (group) {\n var result = false;\n var length = group.items ? group.items.length : 0;\n if (!group.hasSubgroups) {\n return false;\n }\n for (var i = 0; i < length; i++) {\n if (this._groupsState[group.items[i].uid]) {\n result = true;\n break;\n }\n }\n return result;\n },\n _findGroupedRange: function (data, result, options, parents, callback) {\n var that = this;\n var length = data.length;\n var group;\n var current;\n var itemsLength;\n var hasNotRequestedItems;\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 (group.hasSubgroups && !group.subgroupCount) {\n that.getGroupSubGroupCount(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 hasNotRequestedItems = !group.items || group.items.length - itemsToSkip < options.take - options.taken;\n if (!that._hasExpandedSubGroups(group) && itemsToSkip > groupCount) {\n options.skipped += groupCount;\n continue;\n }\n if (group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.subgroupCount) || !group.hasSubgroups && (!group.items || hasNotRequestedItems && group.items.length < group.itemCount)) {\n that.getGroupItems(group, options, parents, callback);\n that._fetchingGroupItems = true;\n return;\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 }\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 getGroupItems: function (group, options, parents, callback) {\n var that = this;\n var skip;\n var take;\n var filter;\n var data;\n var subgroups;\n if (!group.items) {\n group.items = [];\n }\n skip = group.items.length;\n take = that.take();\n filter = this._composeItemsFilter(group, parents);\n data = {\n page: math.floor((skip || 0) / (take || 1)) || 1,\n pageSize: take,\n skip: skip,\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),\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 getGroupSubGroupCount: function (group, options, parents, callback) {\n var that = this;\n var filter;\n var groupIndex;\n var data;\n if (!group.items) {\n group.items = [];\n }\n filter = this._composeItemsFilter(group, parents);\n groupIndex = this._group.map(function (g) {\n return g.field;\n }).indexOf(group.field);\n data = {\n filter: filter,\n group: [that._group[groupIndex + 1]],\n groupPaging: true,\n includeSubGroupCount: 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._subGroupCountSuccessHandler(group, options.skip, that.take(), 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 },\n _subGroupCountSuccessHandler: function (group, skip, take, callback) {\n var that = this;\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 that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n that._fetchingGroupItems = false;\n if (isFunction(totalField)) {\n group.subgroupCount = totalField(data);\n } else {\n group.subgroupCount = data[totalField];\n }\n that.range(skip, take, callback, 'expandGroup');\n };\n },\n _groupItemsSuccessHandler: function (group, skip, take, callback) {\n var that = this;\n var timestamp = that._timeStamp();\n callback = isFunction(callback) ? callback : noop;\n return function (data) {\n var temp;\n var model = Model.define(that.options.schema.model);\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n if (group.hasSubgroups) {\n temp = that.reader.groups(data);\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 < temp.length; i++) {\n group.items.push(temp[i]);\n }\n group.items.omitChangeEvent = false;\n that._updateRangePristineData(group);\n that._fetchingGroupItems = false;\n that._serverGroupsTotal += temp.length;\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 for (var i = 0; i < rangesLength; i++) {\n range = ranges[i];\n dataLength = range.data.length;\n indexes = [];\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 temp = temp[indexes.splice(0, 1)[0]].items;\n }\n temp[indexes[0]] = that._cloneGroup(group);\n break;\n }\n }\n },\n _containsSubGroup: function (group, subgroup, indexes) {\n var that = this;\n var length = group.items.length;\n var currentSubGroup;\n if (group.hasSubgroups && length) {\n for (var i = 0; i < length; i++) {\n currentSubGroup = group.items[i];\n indexes.push(i);\n if (currentSubGroup.uid === subgroup.uid) {\n return true;\n } else if (currentSubGroup.hasSubgroups && currentSubGroup.items.length) {\n return that._containsSubGroup(currentSubGroup, subgroup, indexes);\n }\n indexes.pop();\n }\n }\n },\n _cloneGroup: function (group) {\n var that = this;\n group = typeof group.toJSON == 'function' ? group.toJSON() : group;\n if (group.items && group.items.length) {\n group.items = group.items.map(function (item) {\n return that._cloneGroup(item);\n });\n }\n return group;\n },\n _setFilterTotal: function (filterTotal, setDefaultValue) {\n var that = this;\n if (!that.options.serverFiltering) {\n if (filterTotal !== undefined) {\n that._total = filterTotal;\n } else if (setDefaultValue) {\n that._total = that._data.length;\n }\n }\n },\n fetch: function (callback) {\n var that = this;\n var fn = function (isPrevented) {\n if (isPrevented !== true && isFunction(callback)) {\n callback.call(that);\n }\n };\n return this._query().done(fn);\n },\n _query: function (options) {\n var that = this;\n return that.query(extend({}, {\n page: that.page(),\n pageSize: that.pageSize(),\n sort: that.sort(),\n filter: that.filter(),\n group: that.group(),\n aggregate: that.aggregate()\n }, options));\n },\n next: function (options) {\n var that = this, page = that.page(), total = that.total();\n options = options || {};\n if (!page || total && page + 1 > that.totalPages()) {\n return;\n }\n that._skip = that._currentRangeStart = page * that.take();\n page += 1;\n options.page = page;\n that._query(options);\n return page;\n },\n prev: function (options) {\n var that = this, page = that.page();\n options = options || {};\n if (!page || page === 1) {\n return;\n }\n that._skip = that._currentRangeStart = that._skip - that.take();\n page -= 1;\n options.page = page;\n that._query(options);\n return page;\n },\n page: function (val) {\n var that = this, skip;\n if (val !== undefined) {\n val = math.max(math.min(math.max(val, 1), that.totalPages()), 1);\n var take = that.take();\n if (that._isGroupPaged()) {\n val -= 1;\n that.range(val * take, take, null, 'page');\n return;\n }\n that._query(that._pageableQueryOptions({ page: val }));\n return;\n }\n skip = that.skip();\n return skip !== undefined ? math.round((skip || 0) / (that.take() || 1)) + 1 : undefined;\n },\n pageSize: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query(that._pageableQueryOptions({\n pageSize: val,\n page: 1\n }));\n return;\n }\n return that.take();\n },\n sort: function (val) {\n var that = this;\n if (val !== undefined) {\n that.trigger('sort');\n that._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n var options = { group: val };\n if (that._groupPaging) {\n options.page = 1;\n }\n if (val !== undefined) {\n that._query(options);\n return;\n }\n return that._group;\n },\n getGroupsFlat: function (data) {\n var idx, result = [], length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n var group = data[idx];\n if (group.hasSubgroups) {\n result = result.concat(this.getGroupsFlat(group.items));\n }\n result.push(group);\n }\n return result;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n groupsTotal: function (includeExpanded) {\n var that = this;\n if (!that._group.length) {\n return that.total();\n }\n if (that._isServerGrouped()) {\n if (that._serverGroupsTotal) {\n return that._serverGroupsTotal;\n }\n that._serverGroupsTotal = that.total();\n return that._serverGroupsTotal;\n }\n return that._calculateGroupsTotal(that._ranges.length ? that._ranges[0].data : [], includeExpanded);\n },\n _calculateGroupsTotal: function (groups, includeExpanded, itemsField, ignoreState) {\n var that = this;\n itemsField = itemsField || 'items';\n var total;\n var length;\n if (that._group.length && groups) {\n total = 0;\n length = groups.length;\n for (var i = 0; i < length; i++) {\n total += that.groupCount(groups[i], includeExpanded, itemsField, ignoreState);\n }\n that._groupsTotal = total;\n return total;\n }\n that._groupsTotal = that._data.length;\n return that._groupsTotal;\n },\n groupCount: function (group, includeExpanded, itemsField, ignoreState) {\n var that = this;\n var total = 0;\n if (group.hasSubgroups && that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total += 1;\n }\n group[itemsField].forEach(function (subgroup) {\n total += that.groupCount(subgroup, includeExpanded, itemsField, ignoreState);\n });\n } else {\n if (that._groupsState[group.uid]) {\n if (includeExpanded && !group.excludeHeader || ignoreState) {\n total++;\n }\n total += group[itemsField] ? group[itemsField].length : 0;\n } else {\n total++;\n }\n }\n return total;\n },\n countGroupRange: function (range) {\n var total = 0;\n var length = range.length;\n for (var i = 0; i < length; i++) {\n total += this.groupCount(range[i], true);\n }\n return total;\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _pageableQueryOptions: function (options) {\n return options;\n },\n _wrapInEmptyGroup: function (model) {\n var groups = this.group(), parent, group, idx, length;\n for (idx = groups.length - 1, length = 0; idx >= length; idx--) {\n group = groups[idx];\n parent = {\n value: model.get ? model.get(group.field) : model[group.field],\n field: group.field,\n items: parent ? [parent] : [model],\n hasSubgroups: !!parent,\n aggregates: this._emptyAggregates(group.aggregates)\n };\n }\n return parent;\n },\n totalPages: function () {\n var that = this, pageSize = that.pageSize() || that.total(), total = that._isGroupPaged() ? that.groupsTotal(true) : that.total();\n return math.ceil((total || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback, action) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n var total = this._isGroupPaged() ? this.groupsTotal(true) : this.total();\n if (action === 'expandGroup' || action === 'collapseGroup') {\n this._updateOuterRangesLength();\n }\n skip = math.min(skip || 0, total);\n callback = isFunction(callback) ? callback : noop;\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, total), data;\n data = that._findRange(skip, math.min(skip + take, total), callback);\n if ((data.length || total === 0) && !that._fetchingGroupItems) {\n that._processRangeData(data, skip, take, that._originalPageSkip || pageSkip, that._originalSize || size, { action: action });\n that._originalPageSkip = null;\n that._originalSize = null;\n callback();\n return;\n }\n if (that._isGroupPaged()) {\n that._originalPageSkip = pageSkip;\n that._originalSize = size;\n pageSkip = math.max(math.floor(that._adjustPageSkip(skip, take) / take), 0) * take;\n size = math.min(pageSkip + take, total);\n }\n if (take !== undefined && !that._fetchingGroupItems) {\n if (that._isGroupPaged() && !that._groupRangeExists(pageSkip, take) || !that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end, callback) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length, groupMapOptions = {\n take: end - start,\n skip: start,\n skipped: 0,\n taken: 0,\n includeParents: true\n }, prevRangeEnd, isGroupPaged = that._isGroupPaged(), startField = isGroupPaged ? 'outerStart' : 'start', endField = isGroupPaged ? 'outerEnd' : 'end', currentDataLength;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (isGroupPaged) {\n if (range.outerStart >= end) {\n return [];\n }\n if (start > range.outerEnd) {\n groupMapOptions.skipped += range.outerEnd - (prevRangeEnd || 0);\n prevRangeEnd = range.outerEnd;\n continue;\n }\n if (typeof prevRangeEnd !== 'undefined' && prevRangeEnd != range.outerStart) {\n groupMapOptions.skipped += range.outerStart - prevRangeEnd;\n }\n if (groupMapOptions.skipped > groupMapOptions.skip) {\n return [];\n }\n if (typeof prevRangeEnd === 'undefined' && start > 0 && range.start > 0) {\n groupMapOptions.skipped = range.outerStart;\n }\n takeIdx = skipIdx;\n while (true) {\n this._findGroupedRange(range.data, data, groupMapOptions, null, callback);\n currentDataLength = that._calculateGroupsTotal(data, true, 'currentItems');\n if (currentDataLength >= groupMapOptions.take) {\n return data;\n }\n if (that._fetchingGroupItems) {\n return [];\n }\n takeIdx++;\n if (ranges[takeIdx] && ranges[takeIdx].outerStart === range.outerEnd) {\n range = ranges[takeIdx];\n } else {\n break;\n }\n }\n } else if (start >= range[startField] && start <= range[endField]) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = normalizeGroupWithoutCompare(that.group() || []).concat(normalizeSort(that.sort() || []));\n processed = that._queryProcess(range.data, {\n sort: sort,\n filter: that.filter()\n });\n }\n flatData = rangeData = processed.data;\n if (processed.total !== undefined) {\n rangeEnd = processed.total;\n }\n }\n startIndex = 0;\n if (start + count > range.start) {\n startIndex = start + count - range.start;\n }\n endIndex = flatData.length;\n if (rangeEnd > end) {\n endIndex = endIndex - (rangeEnd - end);\n }\n count += endIndex - startIndex;\n data = that._mergeGroups(data, rangeData, startIndex, endIndex);\n if (end <= range.end && count == end - start) {\n return data;\n }\n }\n }\n break;\n }\n prevRangeEnd = range.outerEnd;\n }\n return [];\n },\n _getRangesMismatch: function (pageSkip) {\n var that = this;\n var ranges = that._ranges;\n var mismatch = 0;\n var i = 0;\n while (true) {\n var range = ranges[i];\n if (!range || range.outerStart > pageSkip) {\n break;\n }\n if (range.outerEnd != range.end) {\n mismatch = range.outerEnd - range.end;\n }\n i++;\n }\n return mismatch;\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n _processRangeData: function (data, skip, take, pageSkip, size, eventData) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() && !that._omitPrefetch ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data, eventData);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n if (!that._isGroupPaged()) {\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\n }\n break;\n }\n }\n if (!found) {\n that._addRange(that._observe(temp), skip);\n }\n }\n that._total = that.reader.total(data);\n if (force || (timestamp >= that._currentRequestTimeStamp || !that._skipRequestsInProgress)) {\n if (callback && temp.length) {\n callback();\n } else {\n that.trigger(CHANGE, {});\n }\n }\n };\n },\n prefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (that._isGroupPaged() && !that._isServerGrouped() && that._groupRangeExists(skip, size)) {\n if (callback) {\n callback();\n }\n return;\n }\n if (that._isServerGroupPaged() && !that._groupRangeExists(skip, size) || !that._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n if (that._omitPrefetch) {\n that.trigger(PROGRESS);\n }\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _adjustPageSkip: function (start, take) {\n var that = this;\n var prevRange = that._getPrevRange(start);\n var result;\n var total = that.total();\n var mismatch;\n if (prevRange) {\n mismatch = that._getRangesMismatch(start);\n if (!mismatch) {\n return start;\n }\n start -= mismatch;\n }\n result = math.max(math.floor(start / take), 0) * take;\n if (result > total) {\n while (true) {\n result -= take;\n if (result < total) {\n break;\n }\n }\n }\n return result;\n },\n _getNextRange: function (end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= end && ranges[idx].end >= end) {\n return ranges[idx];\n }\n }\n },\n _getPrevRange: function (start) {\n var that = this, ranges = that._ranges, idx, range, length = ranges.length;\n for (idx = length - 1; idx >= 0; idx--) {\n if (ranges[idx].outerStart <= start) {\n range = ranges[idx];\n break;\n }\n }\n return range;\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _groupRangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length, availableItemsCount = 0, total = that.groupsTotal(true);\n if (end > total && !that._isServerGrouped()) {\n end = total;\n }\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n var range = ranges[idx];\n if (range.outerStart <= start && range.outerEnd >= start) {\n availableItemsCount += range.outerEnd - start;\n } else if (range.outerStart <= end && range.outerEnd >= end) {\n availableItemsCount += end - range.outerStart;\n }\n }\n return availableItemsCount >= end - start;\n },\n _getCurrentRangeSpan: function () {\n var that = this;\n var ranges = that._ranges;\n var start = that.currentRangeStart();\n var end = start + (that.take() || 0);\n var rangeSpan = [];\n var range;\n var idx;\n var length = ranges.length;\n for (idx = 0; idx < length; idx++) {\n range = ranges[idx];\n if (range.start <= start && range.end >= start || range.start >= start && range.start <= end) {\n rangeSpan.push(range);\n }\n }\n return rangeSpan;\n },\n _removeModelFromRanges: function (model) {\n var that = this;\n var range;\n for (var idx = 0, length = this._ranges.length; idx < length; idx++) {\n range = this._ranges[idx];\n that._removeModelFromRange(range, model);\n }\n that._updateRangesLength();\n },\n _removeModelFromRange: function (range, model) {\n this._eachItem(range.data, function (data) {\n if (!data) {\n return;\n }\n for (var idx = 0; idx < data.length; idx++) {\n var dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n [].splice.call(data, idx, 1);\n break;\n }\n }\n });\n },\n _insertModelInRange: function (index, model) {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n if (range.start <= index && range.end >= index) {\n if (!that._getByUid(model.uid, range.data)) {\n if (that._isServerGrouped()) {\n range.data.splice(index, 0, that._wrapInEmptyGroup(model));\n } else {\n range.data.splice(index, 0, model);\n }\n }\n break;\n }\n }\n that._updateRangesLength();\n },\n _updateRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchFound = false;\n var mismatchLength = 0;\n var lengthDifference = 0;\n var rangeLength;\n var range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? range.data.length : that._flatData(range.data, true).length;\n lengthDifference = rangeLength - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n },\n _updateOuterRangesLength: function () {\n var that = this;\n var ranges = that._ranges || [];\n var rangesLength = ranges.length;\n var mismatchLength = 0;\n var range;\n var i;\n var prevRange;\n var rangeLength;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n rangeLength = that._isGroupPaged() ? that._calculateGroupsTotal(range.data, true, 'items', true) : that._flatData(range.data, true).length;\n if (prevRange) {\n if (prevRange.end != range.start) {\n mismatchLength = range.start - prevRange.end;\n }\n range.outerStart = prevRange.outerEnd + mismatchLength;\n mismatchLength = 0;\n } else {\n range.outerStart = range.start;\n }\n range.outerEnd = range.outerStart + rangeLength;\n prevRange = range;\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap.call(that, data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n var accentFoldingFiltering = this.options.accentFoldingFiltering;\n expressions = accentFoldingFiltering ? $.extend({}, normalizeFilter(expressions), { accentFoldingFiltering: accentFoldingFiltering }) : normalizeFilter(expressions);\n if (!expressions || expressions.filters.length === 0) {\n this._updateHierarchicalFilter(function () {\n return true;\n });\n return false;\n }\n compiled = Query.filterExpr(expressions);\n fields = compiled.fields;\n operators = compiled.operators;\n predicate = filter = new Function('d, __f, __o', 'return ' + compiled.expression);\n if (fields.length || operators.length) {\n filter = function (d) {\n return predicate(d, fields, operators);\n };\n }\n this._updateHierarchicalFilter(filter);\n return true;\n },\n _updateHierarchicalFilter: function (filter) {\n var current;\n var data = this._data;\n var result = false;\n for (var idx = 0; idx < data.length; idx++) {\n current = data[idx];\n if (current.hasChildren) {\n current._matchFilter = current.children._updateHierarchicalFilter(filter);\n if (!current._matchFilter) {\n current._matchFilter = filter(current);\n }\n } else {\n current._matchFilter = filter(current);\n }\n if (current._matchFilter) {\n result = true;\n }\n }\n return result;\n },\n _find: function (method, value) {\n var idx, length, node, children;\n var data = this._data;\n if (!data) {\n return;\n }\n node = DataSource.fn[method].call(this, value);\n if (node) {\n return node;\n }\n data = this._flatData(this._data);\n for (idx = 0, length = data.length; idx < length; idx++) {\n children = data[idx].children;\n if (!(children instanceof HierarchicalDataSource)) {\n continue;\n }\n node = children[method](value);\n if (node) {\n return node;\n }\n }\n },\n get: function (id) {\n return this._find('get', id);\n },\n getByUid: function (uid) {\n return this._find('getByUid', uid);\n }\n });\n function inferList(list, fields) {\n var items = $(list).children(), idx, length, data = [], record, textField = fields[0].field, urlField = fields[1] && fields[1].field, spriteCssClassField = fields[2] && fields[2].field, imageUrlField = fields[3] && fields[3].field, item, id, textChild, className, children;\n function elements(collection, tagName) {\n return collection.filter(tagName).add(collection.find(tagName));\n }\n for (idx = 0, length = items.length; idx < length; idx++) {\n record = { _loaded: true };\n item = items.eq(idx);\n textChild = item[0].firstChild;\n children = item.children();\n list = children.filter('ul');\n children = children.filter(':not(ul)');\n id = item.attr('data-id');\n if (id) {\n record.id = id;\n }\n if (textChild) {\n record[textField] = textChild.nodeType == 3 ? textChild.nodeValue : children.text();\n }\n if (urlField) {\n record[urlField] = elements(children, 'a').attr('href');\n }\n if (imageUrlField) {\n record[imageUrlField] = elements(children, 'img').attr('src');\n }\n if (spriteCssClassField) {\n className = elements(children, '.k-sprite').prop('className');\n record[spriteCssClassField] = className && kendo.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n Comparer: Comparer,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n if (value !== null && typeof value !== 'undefined' && element.value === value.toString()) {\n element.checked = true;\n } else {\n element.checked = false;\n }\n }\n },\n value: function () {\n var element = this.element, value = element.value;\n if (element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n binders.select = {\n source: binders.source.extend({\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action == 'itemchange' || e.action === undefined) {\n that.render();\n if (that.bindings.value) {\n if (that.bindings.value) {\n var val = retrievePrimitiveValues(that.bindings.value.get(), $(that.element).data('valueField'));\n if (val === null) {\n that.element.selectedIndex = -1;\n } else {\n that.element.value = val;\n }\n }\n }\n }\n } else {\n that.render();\n }\n }\n }),\n value: TypedBinder.extend({\n init: function (target, bindings, options) {\n TypedBinder.fn.init.call(this, target, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n parsedValue: function () {\n var dataType = this.dataType();\n var values = [];\n var value, option, idx, length;\n for (idx = 0, length = this.element.options.length; idx < length; idx++) {\n option = this.element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n values.push(this._parseValue(value, dataType));\n }\n }\n return values;\n },\n change: function () {\n var values = [], element = this.element, source, field = this.options.valueField || this.options.textField, valuePrimitive = this.options.valuePrimitive, option, valueIndex, value, idx, length;\n for (idx = 0, length = element.options.length; idx < length; idx++) {\n option = element.options[idx];\n if (option.selected) {\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n if (field) {\n values.push(value);\n } else {\n values.push(this._parseValue(value, this.dataType()));\n }\n }\n }\n if (field) {\n source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n for (valueIndex = 0; valueIndex < values.length; valueIndex++) {\n for (idx = 0, length = source.length; idx < length; idx++) {\n var sourceValue = source[idx].get(field);\n var match = String(sourceValue) === values[valueIndex];\n if (match) {\n values[valueIndex] = source[idx];\n break;\n }\n }\n }\n }\n value = this.bindings[VALUE].get();\n if (value instanceof ObservableArray) {\n value.splice.apply(value, [\n 0,\n value.length\n ].concat(values));\n } else if (!valuePrimitive && (value instanceof ObservableObject || value === null || value === undefined || !field)) {\n this.bindings[VALUE].set(values[0]);\n } else {\n this.bindings[VALUE].set(values[0].get(field));\n }\n },\n refresh: function () {\n var optionIndex, element = this.element, options = element.options, value = this.bindings[VALUE].get(), values = value, field = this.options.valueField || this.options.textField, found = false, type = this.dataType(), optionValue;\n if (!(values instanceof ObservableArray)) {\n values = new ObservableArray([value]);\n }\n element.selectedIndex = -1;\n for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {\n value = values[valueIndex];\n if (field && value instanceof ObservableObject) {\n value = value.get(field);\n }\n if (type == 'date') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(values[valueIndex], 'yyyy-MM-ddTHH:mm:ss');\n }\n for (optionIndex = 0; optionIndex < options.length; optionIndex++) {\n optionValue = options[optionIndex].value;\n if (optionValue === '' && value !== '') {\n optionValue = options[optionIndex].text;\n }\n if (value != null && optionValue == value.toString()) {\n options[optionIndex].selected = true;\n found = true;\n }\n }\n }\n },\n destroy: function () {\n $(this.element).off(CHANGE, this._change);\n }\n })\n };\n function dataSourceBinding(bindingName, fieldName, setter) {\n return Binder.extend({\n init: function (widget, bindings, options) {\n var that = this;\n Binder.fn.init.call(that, widget.element[0], bindings, options);\n that.widget = widget;\n that._dataBinding = proxy(that.dataBinding, that);\n that._dataBound = proxy(that.dataBound, that);\n that._itemChange = proxy(that.itemChange, that);\n },\n itemChange: function (e) {\n bindElement(e.item[0], e.data, this._ns(e.ns), [e.data].concat(this.bindings[bindingName]._parents()));\n },\n dataBinding: function (e) {\n var idx, length, widget = this.widget, items = e.removedItems || widget.items();\n for (idx = 0, length = items.length; idx < length; idx++) {\n unbindElementTree(items[idx], false);\n }\n },\n _ns: function (ns) {\n ns = ns || kendo.ui;\n var all = [\n kendo.ui,\n kendo.dataviz.ui,\n kendo.mobile.ui\n ];\n all.splice($.inArray(ns, all), 1);\n all.unshift(ns);\n return kendo.rolesFromNamespaces(all);\n },\n dataBound: function (e) {\n var idx, length, widget = this.widget, items = e.addedItems || widget.items(), dataSource = widget[fieldName], view, parents, hds = kendo.data.HierarchicalDataSource;\n if (hds && dataSource instanceof hds) {\n return;\n }\n if (items.length) {\n view = e.addedDataItems || dataSource.flatView();\n parents = this.bindings[bindingName]._parents();\n for (idx = 0, length = view.length; idx < length; idx++) {\n if (items[idx]) {\n bindElement(items[idx], view[idx], this._ns(e.ns), [view[idx]].concat(parents));\n }\n }\n }\n },\n refresh: function (e) {\n var that = this, source, widget = that.widget, select, multiselect, dropdowntree;\n e = e || {};\n if (!e.action) {\n that.destroy();\n widget.bind('dataBinding', that._dataBinding);\n widget.bind('dataBound', that._dataBound);\n widget.bind('itemChange', that._itemChange);\n source = that.bindings[bindingName].get();\n if (widget[fieldName] instanceof kendo.data.DataSource && widget[fieldName] != source) {\n if (source instanceof kendo.data.DataSource) {\n widget[setter](source);\n } else if (source && source._dataSource) {\n widget[setter](source._dataSource);\n } else {\n select = kendo.ui.Select && widget instanceof kendo.ui.Select;\n multiselect = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect;\n dropdowntree = kendo.ui.DropDownTree && widget instanceof kendo.ui.DropDownTree;\n if (!dropdowntree) {\n widget[fieldName].data(source);\n } else {\n widget.treeview[fieldName].data(source);\n }\n if (that.bindings.value && (select || multiselect)) {\n widget.value(retrievePrimitiveValues(that.bindings.value.get(), widget.options.dataValueField));\n }\n }\n }\n }\n },\n destroy: function () {\n var widget = this.widget;\n widget.unbind('dataBinding', this._dataBinding);\n widget.unbind('dataBound', this._dataBound);\n widget.unbind('itemChange', this._itemChange);\n }\n });\n }\n binders.widget = {\n events: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this.handlers = {};\n },\n refresh: function (key) {\n var binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n this.widget.unbind(key, handler);\n }\n handler = binding.get();\n this.handlers[key] = function (e) {\n e.data = binding.source;\n handler(e);\n if (e.data === binding.source) {\n delete e.data;\n }\n };\n this.widget.bind(key, this.handlers[key]);\n },\n destroy: function () {\n var handler;\n for (handler in this.handlers) {\n this.widget.unbind(handler, this.handlers[handler]);\n }\n }\n }),\n checked: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = proxy(this.change, this);\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings[CHECKED].set(this.value());\n },\n refresh: function () {\n this.widget.check(this.bindings[CHECKED].get() === true);\n },\n value: function () {\n var element = this.element, value = element.value;\n if (value == 'on' || value == 'off' || this.element.type == 'checkbox') {\n value = element.checked;\n }\n return value;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n start: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.start.set(this.widget.range().start);\n },\n refresh: function () {\n var that = this;\n var start = this.bindings.start.get();\n var end = that.widget._range ? that.widget._range.end : null;\n this.widget.range({\n start: start,\n end: end\n });\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n end: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this._change = proxy(this.change, this);\n this.widget = widget;\n this.widget.bind(CHANGE, this._change);\n },\n change: function () {\n this.bindings.end.set(this.widget.range().end);\n },\n refresh: function () {\n var that = this;\n var end = this.bindings.end.get();\n var start = that.widget._range ? that.widget._range.start : null;\n this.widget.range({\n start: start,\n end: end\n });\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n visible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var visible = this.bindings.visible.get();\n this.widget.wrapper[0].style.display = visible ? '' : 'none';\n }\n }),\n invisible: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n var invisible = this.bindings.invisible.get();\n this.widget.wrapper[0].style.display = invisible ? 'none' : '';\n }\n }),\n enabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(this.bindings.enabled.get());\n }\n }\n }),\n disabled: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n },\n refresh: function () {\n if (this.widget.enable) {\n this.widget.enable(!this.bindings.disabled.get());\n }\n }\n }),\n source: dataSourceBinding('source', 'dataSource', 'setDataSource'),\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n var value = this.bindings.value.get();\n this._valueIsObservableObject = !options.valuePrimitive && (value == null || value instanceof ObservableObject);\n this._valueIsObservableArray = value instanceof ObservableArray;\n this._initChange = false;\n },\n _source: function () {\n var source;\n if (this.widget.dataItem) {\n source = this.widget.dataItem();\n if (source && source instanceof ObservableObject) {\n return [source];\n }\n }\n if (this.bindings.source) {\n source = this.bindings.source.get();\n }\n if (!source || source instanceof kendo.data.DataSource) {\n source = this.widget.dataSource.flatView();\n }\n return source;\n },\n change: function () {\n var value = this.widget.value(), field = this.options.dataValueField || this.options.dataTextField, isArray = toString.call(value) === '[object Array]', isObservableObject = this._valueIsObservableObject, valueIndex, valueLength, values = [], sourceItem, sourceValue, idx, length, source;\n this._initChange = true;\n if (field) {\n if (value === '' && (isObservableObject || this.options.valuePrimitive)) {\n value = null;\n } else {\n source = this._source();\n if (isArray) {\n valueLength = value.length;\n values = value.slice(0);\n }\n for (idx = 0, length = source.length; idx < length; idx++) {\n sourceItem = source[idx];\n sourceValue = sourceItem.get(field);\n if (isArray) {\n for (valueIndex = 0; valueIndex < valueLength; valueIndex++) {\n if (sourceValue == values[valueIndex]) {\n values[valueIndex] = sourceItem;\n break;\n }\n }\n } else if (sourceValue == value) {\n value = isObservableObject ? sourceItem : sourceValue;\n break;\n }\n }\n if (values[0]) {\n if (this._valueIsObservableArray) {\n value = values;\n } else if (isObservableObject || !field) {\n value = values[0];\n } else {\n value = values[0].get(field);\n }\n }\n }\n }\n this.bindings.value.set(value);\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var widget = this.widget;\n var options = widget.options;\n var textField = options.dataTextField;\n var valueField = options.dataValueField || textField;\n var value = this.bindings.value.get();\n var text = options.text || '';\n var idx = 0, length;\n var values = [];\n if (value === undefined) {\n value = null;\n }\n if (valueField) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n values[idx] = value[idx].get(valueField);\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n text = value.get(textField);\n value = value.get(valueField);\n }\n }\n if (options.autoBind === false && !options.cascadeFrom && widget.listView && !widget.listView.bound()) {\n if (textField === valueField && !text) {\n text = value;\n }\n if (!text && (value || value === 0) && options.valuePrimitive) {\n widget.value(value);\n } else {\n widget._preselect(value, text);\n }\n } else {\n widget.value(value);\n }\n }\n this._initChange = false;\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n }),\n dropdowntree: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, selectedNode = that.widget.treeview.select(), nonPrimitiveValues = that.widget._isMultipleSelection() ? that.widget._getAllChecked() : that.widget.treeview.dataItem(selectedNode) || that.widget.value(), newValues = valuePrimitive || that.widget.options.autoBind === false ? that.widget.value() : nonPrimitiveValues;\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice ? newValues.slice(0) : newValues;\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n gantt: { dependencies: dataSourceBinding('dependencies', 'dependencies', 'setDependenciesDataSource') },\n multiselect: {\n value: Binder.extend({\n init: function (widget, bindings, options) {\n Binder.fn.init.call(this, widget.element[0], bindings, options);\n this.widget = widget;\n this._change = $.proxy(this.change, this);\n this.widget.first(CHANGE, this._change);\n this._initChange = false;\n },\n change: function () {\n var that = this, oldValues = that.bindings[VALUE].get(), valuePrimitive = that.options.valuePrimitive, newValues = valuePrimitive ? that.widget.value() : that.widget.dataItems();\n var field = this.options.dataValueField || this.options.dataTextField;\n newValues = newValues.slice(0);\n that._initChange = true;\n if (oldValues instanceof ObservableArray) {\n var remove = [];\n var newLength = newValues.length;\n var i = 0, j = 0;\n var old = oldValues[i];\n var same = false;\n var removeIndex;\n var newValue;\n var found;\n while (old !== undefined) {\n found = false;\n for (j = 0; j < newLength; j++) {\n if (valuePrimitive) {\n same = newValues[j] == old;\n } else {\n newValue = newValues[j];\n newValue = newValue.get ? newValue.get(field) : newValue;\n same = newValue == (old.get ? old.get(field) : old);\n }\n if (same) {\n newValues.splice(j, 1);\n newLength -= 1;\n found = true;\n break;\n }\n }\n if (!found) {\n remove.push(old);\n arraySplice(oldValues, i, 1);\n removeIndex = i;\n } else {\n i += 1;\n }\n old = oldValues[i];\n }\n arraySplice(oldValues, oldValues.length, 0, newValues);\n if (remove.length) {\n oldValues.trigger('change', {\n action: 'remove',\n items: remove,\n index: removeIndex\n });\n }\n if (newValues.length) {\n oldValues.trigger('change', {\n action: 'add',\n items: newValues,\n index: oldValues.length - 1\n });\n }\n } else {\n that.bindings[VALUE].set(newValues);\n }\n that._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var options = this.options, widget = this.widget, field = options.dataValueField || options.dataTextField, value = this.bindings.value.get(), data = value, idx = 0, length, values = [], selectedValue;\n if (value === undefined) {\n value = null;\n }\n if (field) {\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n selectedValue = value[idx];\n values[idx] = selectedValue.get ? selectedValue.get(field) : selectedValue;\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(field);\n }\n }\n if (options.autoBind === false && options.valuePrimitive !== true && !widget._isBound()) {\n widget._preselect(data, value);\n } else {\n widget.value(value);\n }\n }\n },\n destroy: function () {\n this.widget.unbind(CHANGE, this._change);\n }\n })\n },\n scheduler: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx;\n var length;\n var widget = this.widget;\n var elements = e.addedItems || widget.items();\n var data, parents;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n },\n grid: {\n source: dataSourceBinding('source', 'dataSource', 'setDataSource').extend({\n dataBound: function (e) {\n var idx, length, widget = this.widget, elements = e.addedItems || widget.items(), parents, data;\n if (elements.length) {\n data = e.addedDataItems || widget.dataItems();\n parents = this.bindings.source._parents();\n for (idx = 0, length = data.length; idx < length; idx++) {\n bindElement(elements[idx], data[idx], this._ns(e.ns), [data[idx]].concat(parents));\n }\n }\n }\n })\n }\n };\n var arraySplice = function (arr, idx, remove, add) {\n add = add || [];\n remove = remove || 0;\n var addLength = add.length;\n var oldLength = arr.length;\n var shifted = [].slice.call(arr, idx + remove);\n var shiftedLength = shifted.length;\n var index;\n if (addLength) {\n addLength = idx + addLength;\n index = 0;\n for (; idx < addLength; idx++) {\n arr[idx] = add[index];\n index++;\n }\n arr.length = addLength;\n } else if (remove) {\n arr.length = idx;\n remove += idx;\n while (idx < remove) {\n delete arr[--remove];\n }\n }\n if (shiftedLength) {\n shiftedLength = idx + shiftedLength;\n index = 0;\n for (; idx < shiftedLength; idx++) {\n arr[idx] = shifted[index];\n index++;\n }\n arr.length = shiftedLength;\n }\n idx = arr.length;\n while (idx < oldLength) {\n delete arr[idx];\n idx++;\n }\n };\n var BindingTarget = Class.extend({\n init: function (target, options) {\n this.target = target;\n this.options = options;\n this.toDestroy = [];\n },\n bind: function (bindings) {\n var key, hasValue, hasSource, hasEvents, hasChecked, hasCss, widgetBinding = this instanceof WidgetBindingTarget, specificBinders = this.binders();\n for (key in bindings) {\n if (key == VALUE) {\n hasValue = true;\n } else if (key == SOURCE) {\n hasSource = true;\n } else if (key == EVENTS && !widgetBinding) {\n hasEvents = true;\n } else if (key == CHECKED) {\n hasChecked = true;\n } else if (key == CSS) {\n hasCss = true;\n } else {\n this.applyBinding(key, bindings, specificBinders);\n }\n }\n if (hasSource) {\n this.applyBinding(SOURCE, bindings, specificBinders);\n }\n if (hasValue) {\n this.applyBinding(VALUE, bindings, specificBinders);\n }\n if (hasChecked) {\n this.applyBinding(CHECKED, bindings, specificBinders);\n }\n if (hasEvents && !widgetBinding) {\n this.applyBinding(EVENTS, bindings, specificBinders);\n }\n if (hasCss && !widgetBinding) {\n this.applyBinding(CSS, bindings, specificBinders);\n }\n },\n binders: function () {\n return binders[this.target.nodeName.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else if (name !== 'template') {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.nodeName.toLowerCase() + ' element');\n }\n },\n destroy: function () {\n var idx, length, toDestroy = this.toDestroy;\n for (idx = 0, length = toDestroy.length; idx < length; idx++) {\n toDestroy[idx].destroy();\n }\n }\n });\n var WidgetBindingTarget = BindingTarget.extend({\n binders: function () {\n return binders.widget[this.target.options.name.toLowerCase()] || {};\n },\n applyBinding: function (name, bindings, specificBinders) {\n var binder = specificBinders[name] || binders.widget[name], toDestroy = this.toDestroy, attribute, binding = bindings[name];\n if (binder) {\n binder = new binder(this.target, bindings, this.target.options);\n toDestroy.push(binder);\n if (binding instanceof Binding) {\n binder.bind(binding);\n toDestroy.push(binding);\n } else {\n for (attribute in binding) {\n binder.bind(binding, attribute);\n toDestroy.push(binding[attribute]);\n }\n }\n } else {\n throw new Error('The ' + name + ' binding is not supported by the ' + this.target.options.name + ' widget');\n }\n }\n });\n function bindingTargetForRole(element, roles) {\n var widget = kendo.initWidget(element, {}, roles);\n if (widget) {\n return new WidgetBindingTarget(widget);\n }\n }\n var keyValueRegExp = /[A-Za-z0-9_\\-]+:(\\{([^}]*)\\}|[^,}]+)/g, whiteSpaceRegExp = /\\s/g;\n function parseBindings(bind) {\n var result = {}, idx, length, token, colonIndex, key, value, tokens;\n tokens = bind.match(keyValueRegExp);\n for (idx = 0, length = tokens.length; idx < length; idx++) {\n token = tokens[idx];\n colonIndex = token.indexOf(':');\n key = token.substring(0, colonIndex);\n value = token.substring(colonIndex + 1);\n if (value.charAt(0) == '{') {\n value = parseBindings(value);\n }\n result[key] = value;\n }\n return result;\n }\n function createBindings(bindings, source, type) {\n var binding, result = {};\n for (binding in bindings) {\n result[binding] = new type(source, bindings[binding]);\n }\n return result;\n }\n function bindElement(element, source, roles, parents) {\n if (!element || element.getAttribute('data-' + kendo.ns + 'stop')) {\n return;\n }\n var role = element.getAttribute('data-' + kendo.ns + 'role'), idx, bind = element.getAttribute('data-' + kendo.ns + 'bind'), childrenCopy = [], deep = true, bindings, options = {}, target;\n parents = parents || [source];\n if (role || bind) {\n unbindElement(element, false);\n }\n if (role) {\n target = bindingTargetForRole(element, roles);\n }\n if (bind) {\n bind = parseBindings(bind.replace(whiteSpaceRegExp, ''));\n if (!target) {\n options = kendo.parseOptions(element, {\n textField: '',\n valueField: '',\n template: '',\n valueUpdate: CHANGE,\n valuePrimitive: false,\n autoBind: true\n }, source);\n options.roles = roles;\n target = new BindingTarget(element, options);\n }\n target.source = source;\n bindings = createBindings(bind, parents, Binding);\n if (options.template) {\n bindings.template = new TemplateBinding(parents, '', options.template);\n }\n if (bindings.click) {\n bind.events = bind.events || {};\n bind.events.click = bind.click;\n bindings.click.destroy();\n delete bindings.click;\n }\n if (bindings.source) {\n deep = false;\n }\n if (bind.attr) {\n bindings.attr = createBindings(bind.attr, parents, Binding);\n }\n if (bind.style) {\n bindings.style = createBindings(bind.style, parents, Binding);\n }\n if (bind.events) {\n bindings.events = createBindings(bind.events, parents, EventBinding);\n }\n if (bind.css) {\n bindings.css = createBindings(bind.css, parents, Binding);\n }\n target.bind(bindings);\n }\n if (target) {\n element.kendoBindingTarget = target;\n }\n var children = element.children;\n if (deep && children && !element.getAttribute('data-' + kendo.ns + 'stop')) {\n for (idx = 0; idx < children.length; idx++) {\n childrenCopy[idx] = children[idx];\n }\n for (idx = 0; idx < childrenCopy.length; idx++) {\n bindElement(childrenCopy[idx], source, roles, parents);\n }\n }\n }\n function bind(dom, object) {\n var idx, length, node, roles = kendo.rolesFromNamespaces([].slice.call(arguments, 2));\n object = kendo.observable(object);\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n node = dom[idx];\n if (node.nodeType === 1) {\n bindElement(node, object, roles);\n }\n }\n }\n function unbindElement(element, destroyWidget) {\n var bindingTarget = element.kendoBindingTarget;\n if (bindingTarget) {\n bindingTarget.destroy();\n if (deleteExpando) {\n delete element.kendoBindingTarget;\n } else if (element.removeAttribute) {\n element.removeAttribute('kendoBindingTarget');\n } else {\n element.kendoBindingTarget = null;\n }\n }\n if (destroyWidget) {\n var widget = kendo.widgetInstance($(element));\n if (widget && typeof widget.destroy === FUNCTION) {\n widget.destroy();\n }\n }\n }\n function unbindElementTree(element, destroyWidgets) {\n unbindElement(element, destroyWidgets);\n unbindElementChildren(element, destroyWidgets);\n }\n function unbindElementChildren(element, destroyWidgets) {\n var children = element.children;\n if (children) {\n for (var idx = 0, length = children.length; idx < length; idx++) {\n unbindElementTree(children[idx], destroyWidgets);\n }\n }\n }\n function unbind(dom) {\n var idx, length;\n dom = $(dom);\n for (idx = 0, length = dom.length; idx < length; idx++) {\n unbindElementTree(dom[idx], false);\n }\n }\n function notify(widget, namespace) {\n var element = widget.element, bindingTarget = element[0].kendoBindingTarget;\n if (bindingTarget) {\n bind(element, bindingTarget.source, namespace);\n }\n }\n function retrievePrimitiveValues(value, valueField) {\n var values = [];\n var idx = 0;\n var length;\n var item;\n if (!valueField) {\n return value;\n }\n if (value instanceof ObservableArray) {\n for (length = value.length; idx < length; idx++) {\n item = value[idx];\n values[idx] = item.get ? item.get(valueField) : item[valueField];\n }\n value = values;\n } else if (value instanceof ObservableObject) {\n value = value.get(valueField);\n }\n return value;\n }\n kendo.unbind = unbind;\n kendo.bind = bind;\n kendo.data.binders = binders;\n kendo.data.Binder = Binder;\n kendo.notify = notify;\n kendo.observable = function (object) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n return object;\n };\n kendo.observableHierarchy = function (array) {\n var dataSource = kendo.data.HierarchicalDataSource.create(array);\n function recursiveRead(data) {\n var i, children;\n for (i = 0; i < data.length; i++) {\n data[i]._initChildren();\n children = data[i].children;\n children.fetch();\n data[i].items = children.data();\n recursiveRead(data[i].items);\n }\n }\n dataSource.fetch();\n recursiveRead(dataSource.data());\n dataSource._data._dataSource = dataSource;\n return dataSource._data;\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.view', [\n 'kendo.core',\n 'kendo.binder',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'view',\n name: 'View',\n category: 'framework',\n description: 'The View class instantiates and handles the events of a certain screen from the application.',\n depends: [\n 'core',\n 'binder',\n 'fx'\n ],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, attr = kendo.attr, ui = kendo.ui, attrValue = kendo.attrValue, directiveSelector = kendo.directiveSelector, Observable = kendo.Observable, Widget = kendo.ui.Widget, roleSelector = kendo.roleSelector, SCRIPT = 'SCRIPT', INIT = 'init', TRANSITION_START = 'transitionStart', TRANSITION_END = 'transitionEnd', SHOW = 'show', HIDE = 'hide', ATTACH = 'attach', DETACH = 'detach', sizzleErrorRegExp = /unrecognized expression/;\n var bodyRegExp = /]*>(([\\u000a\\u000d\\u2028\\u2029]|.)*)<\\/body>/i;\n var LOAD_START = 'loadStart';\n var LOAD_COMPLETE = 'loadComplete';\n var SHOW_START = 'showStart';\n var SAME_VIEW_REQUESTED = 'sameViewRequested';\n var VIEW_SHOW = 'viewShow';\n var VIEW_TYPE_DETERMINED = 'viewTypeDetermined';\n var AFTER = 'after';\n var classNames = {\n content: 'k-content',\n view: 'k-view',\n stretchedView: 'k-stretched-view',\n widget: 'k-widget',\n header: 'k-header',\n footer: 'k-footer'\n };\n var View = kendo.ui.Widget.extend({\n init: function (content, options) {\n var that = this;\n options = options || {};\n that.id = kendo.guid();\n Observable.fn.init.call(that);\n this.options = $.extend({}, this.options, options);\n that.content = content;\n if (that.options.renderOnInit) {\n Widget.fn.init.call(that, that._createElement(), options);\n }\n if (that.options.wrapInSections) {\n that._renderSections();\n }\n that.tagName = options.tagName || 'div';\n that.model = options.model;\n that._wrap = options.wrap !== false;\n this._evalTemplate = options.evalTemplate || false;\n that._fragments = {};\n that.bind([\n INIT,\n SHOW,\n HIDE,\n TRANSITION_START,\n TRANSITION_END\n ], options);\n },\n options: {\n name: 'View',\n renderOnInit: false,\n wrapInSections: false,\n detachOnHide: true,\n detachOnDestroy: true\n },\n render: function (container) {\n var that = this, notInitialized = !that.element;\n if (notInitialized) {\n that.element = that._createElement();\n }\n if (container) {\n $(container).append(that.element);\n }\n if (notInitialized) {\n kendo.bind(that.element, that.model);\n that.trigger(INIT);\n }\n if (container) {\n that._eachFragment(ATTACH);\n that.trigger(SHOW);\n }\n return that.element;\n },\n clone: function () {\n return new ViewClone(this);\n },\n triggerBeforeShow: function () {\n return true;\n },\n triggerBeforeHide: function () {\n return true;\n },\n showStart: function () {\n var that = this;\n var element = that.render();\n if (element) {\n element.css('display', '');\n }\n this.trigger(SHOW_START, { view: this });\n },\n showEnd: function () {\n },\n hideEnd: function () {\n this.hide();\n },\n beforeTransition: function (type) {\n this.trigger(TRANSITION_START, { type: type });\n },\n afterTransition: function (type) {\n this.trigger(TRANSITION_END, { type: type });\n },\n hide: function () {\n if (this.options.detachOnHide) {\n this._eachFragment(DETACH);\n $(this.element).detach();\n }\n this.trigger(HIDE);\n },\n destroy: function () {\n var that = this;\n var element = that.element;\n if (element) {\n Widget.fn.destroy.call(that);\n kendo.unbind(element);\n kendo.destroy(element);\n if (that.options.detachOnDestroy) {\n element.remove();\n }\n }\n },\n purge: function () {\n var that = this;\n that.destroy();\n $(that.element).add(that.content).add(that.wrapper).off().remove();\n },\n fragments: function (fragments) {\n $.extend(this._fragments, fragments);\n },\n _eachFragment: function (methodName) {\n for (var placeholder in this._fragments) {\n this._fragments[placeholder][methodName](this, placeholder);\n }\n },\n _createElement: function () {\n var that = this, wrapper = '<' + that.tagName + '>', element, content;\n try {\n content = $(document.getElementById(that.content) || that.content);\n if (content[0].tagName === SCRIPT) {\n content = content.html();\n }\n } catch (e) {\n if (sizzleErrorRegExp.test(e.message)) {\n content = that.content;\n }\n }\n if (typeof content === 'string') {\n content = content.replace(/^\\s+|\\s+$/g, '');\n if (that._evalTemplate) {\n content = kendo.template(content)(that.model || {});\n }\n element = $(wrapper).append(content);\n if (!that._wrap) {\n element = element.contents();\n }\n } else {\n element = content;\n if (that._evalTemplate) {\n var result = $(kendo.template($('
    ').append(element.clone(true)).html())(that.model || {}));\n if ($.contains(document, element[0])) {\n element.replaceWith(result);\n }\n element = result;\n }\n if (that._wrap) {\n element = element.wrapAll(wrapper).parent();\n }\n }\n return element;\n },\n _renderSections: function () {\n var that = this;\n if (that.options.wrapInSections) {\n that._wrapper();\n that._createContent();\n that._createHeader();\n that._createFooter();\n }\n },\n _wrapper: function () {\n var that = this;\n var content = that.content;\n if (content.is(roleSelector('view'))) {\n that.wrapper = that.content;\n } else {\n that.wrapper = content.wrap('
    ').parent();\n }\n var wrapper = that.wrapper;\n wrapper.attr('id', that.id);\n wrapper.addClass(classNames.view);\n wrapper.addClass(classNames.widget);\n wrapper.attr('role', 'view');\n },\n _createContent: function () {\n var that = this;\n var wrapper = $(that.wrapper);\n var contentSelector = roleSelector('content');\n if (!wrapper.children(contentSelector)[0]) {\n var ccontentElements = wrapper.children().filter(function () {\n var child = $(this);\n if (!child.is(roleSelector('header')) && !child.is(roleSelector('footer'))) {\n return child;\n }\n });\n ccontentElements.wrap('
    ');\n }\n this.contentElement = wrapper.children(roleSelector('content'));\n this.contentElement.addClass(classNames.stretchedView).addClass(classNames.content);\n },\n _createHeader: function () {\n var that = this;\n var wrapper = that.wrapper;\n this.header = wrapper.children(roleSelector('header')).addClass(classNames.header);\n },\n _createFooter: function () {\n var that = this;\n var wrapper = that.wrapper;\n this.footer = wrapper.children(roleSelector('footer')).addClass(classNames.footer);\n }\n });\n var ViewClone = kendo.Class.extend({\n init: function (view) {\n $.extend(this, {\n element: view.element.clone(true),\n transition: view.transition,\n id: view.id\n });\n view.element.parent().append(this.element);\n },\n hideEnd: function () {\n this.element.remove();\n },\n beforeTransition: $.noop,\n afterTransition: $.noop\n });\n var Layout = View.extend({\n init: function (content, options) {\n View.fn.init.call(this, content, options);\n this.containers = {};\n },\n container: function (selector) {\n var container = this.containers[selector];\n if (!container) {\n container = this._createContainer(selector);\n this.containers[selector] = container;\n }\n return container;\n },\n showIn: function (selector, view, transition) {\n this.container(selector).show(view, transition);\n },\n _createContainer: function (selector) {\n var root = this.render(), element = root.find(selector), container;\n if (!element.length && root.is(selector)) {\n if (root.is(selector)) {\n element = root;\n } else {\n throw new Error('can\\'t find a container with the specified ' + selector + ' selector');\n }\n }\n container = new ViewContainer(element);\n container.bind('accepted', function (e) {\n e.view.render(element);\n });\n return container;\n }\n });\n var Fragment = View.extend({\n attach: function (view, placeholder) {\n view.element.find(placeholder).replaceWith(this.render());\n },\n detach: function () {\n }\n });\n var transitionRegExp = /^(\\w+)(:(\\w+))?( (\\w+))?$/;\n function parseTransition(transition) {\n if (!transition) {\n return {};\n }\n var matches = transition.match(transitionRegExp) || [];\n return {\n type: matches[1],\n direction: matches[3],\n reverse: matches[5] === 'reverse'\n };\n }\n var ViewContainer = Observable.extend({\n init: function (container) {\n Observable.fn.init.call(this);\n this.container = container;\n this.history = [];\n this.view = null;\n this.running = false;\n },\n after: function () {\n this.running = false;\n this.trigger('complete', { view: this.view });\n this.trigger('after');\n },\n end: function () {\n this.view.showEnd();\n this.previous.hideEnd();\n this.after();\n },\n show: function (view, transition, locationID) {\n if (!view.triggerBeforeShow() || this.view && !this.view.triggerBeforeHide()) {\n this.trigger('after');\n return false;\n }\n locationID = locationID || view.id;\n var that = this, current = view === that.view ? view.clone() : that.view, history = that.history, previousEntry = history[history.length - 2] || {}, back = previousEntry.id === locationID, theTransition = transition || (back ? history[history.length - 1].transition : view.transition), transitionData = parseTransition(theTransition);\n if (that.running) {\n that.effect.stop();\n }\n if (theTransition === 'none') {\n theTransition = null;\n }\n that.trigger('accepted', { view: view });\n that.view = view;\n that.previous = current;\n that.running = true;\n if (!back) {\n history.push({\n id: locationID,\n transition: theTransition\n });\n } else {\n history.pop();\n }\n if (!current) {\n view.showStart();\n view.showEnd();\n that.after();\n return true;\n }\n if (!theTransition || !kendo.effects.enabled) {\n view.showStart();\n that.end();\n } else {\n view.element.addClass('k-fx-hidden');\n view.showStart();\n if (back && !transition) {\n transitionData.reverse = !transitionData.reverse;\n }\n that.effect = kendo.fx(view.element).replace(current.element, transitionData.type).beforeTransition(function () {\n view.beforeTransition('show');\n current.beforeTransition('hide');\n }).afterTransition(function () {\n view.afterTransition('show');\n current.afterTransition('hide');\n }).direction(transitionData.direction).setReverse(transitionData.reverse);\n that.effect.run().then(function () {\n that.end();\n });\n }\n return true;\n },\n destroy: function () {\n var that = this;\n var view = that.view;\n if (view && view.destroy) {\n view.destroy();\n }\n }\n });\n var ViewEngine = Observable.extend({\n init: function (options) {\n var that = this, views, container;\n Observable.fn.init.call(that);\n that.options = options;\n $.extend(that, options);\n that.sandbox = $('
    ');\n container = that.container;\n views = that._hideViews(container);\n that.rootView = views.first();\n that.layouts = {};\n that.viewContainer = new kendo.ViewContainer(that.container);\n that.viewContainer.bind('accepted', function (e) {\n e.view.params = that.params;\n });\n that.viewContainer.bind('complete', function (e) {\n that.trigger(VIEW_SHOW, { view: e.view });\n });\n that.viewContainer.bind(AFTER, function () {\n that.trigger(AFTER);\n });\n this.bind(this.events, options);\n },\n events: [\n SHOW_START,\n AFTER,\n VIEW_SHOW,\n LOAD_START,\n LOAD_COMPLETE,\n SAME_VIEW_REQUESTED,\n VIEW_TYPE_DETERMINED\n ],\n destroy: function () {\n var that = this;\n var viewContainer = that.viewContainer;\n kendo.destroy(that.container);\n for (var id in that.layouts) {\n this.layouts[id].destroy();\n }\n if (viewContainer) {\n viewContainer.destroy();\n }\n },\n view: function () {\n return this.viewContainer.view;\n },\n showView: function (url, transition, params) {\n url = url.replace(new RegExp('^' + this.remoteViewURLPrefix), '');\n if (url === '' && this.remoteViewURLPrefix) {\n url = '/';\n }\n if (url.replace(/^#/, '') === this.url) {\n this.trigger(SAME_VIEW_REQUESTED);\n return false;\n }\n this.trigger(SHOW_START);\n var that = this, element = that._findViewElement(url), view = kendo.widgetInstance(element);\n that.url = url.replace(/^#/, '');\n that.params = params;\n if (view && view.reload) {\n view.purge();\n element = [];\n }\n this.trigger(VIEW_TYPE_DETERMINED, {\n remote: element.length === 0,\n url: url\n });\n if (element[0]) {\n if (!view) {\n view = that._createView(element);\n }\n return that.viewContainer.show(view, transition, url);\n } else {\n return true;\n }\n },\n append: function (html, url) {\n var sandbox = this.sandbox, urlPath = (url || '').split('?')[0], container = this.container, views, view;\n if (bodyRegExp.test(html)) {\n html = RegExp.$1;\n }\n sandbox[0].innerHTML = html;\n container.append(sandbox.children('script, style'));\n views = this._hideViews(sandbox);\n view = views.first();\n if (!view.length) {\n views = view = sandbox.wrapInner('
    ').children();\n }\n if (urlPath) {\n view.hide().attr(attr('url'), urlPath);\n }\n container.append(views);\n return this._createView(view);\n },\n _locate: function (selectors) {\n return this.$angular ? directiveSelector(selectors) : roleSelector(selectors);\n },\n _findViewElement: function (url) {\n var element, urlPath = url.split('?')[0];\n if (!urlPath) {\n return this.rootView;\n }\n element = this.container.children('[' + attr('url') + '=\\'' + urlPath + '\\']');\n if (!element[0] && urlPath.indexOf('/') === -1) {\n element = this.container.children(urlPath.charAt(0) === '#' ? urlPath : '#' + urlPath);\n }\n if (!element[0]) {\n element = this._findViewElementById(url);\n }\n return element;\n },\n _findViewElementById: function (id) {\n var element = this.container.children('[id=\\'' + id + '\\']');\n return element;\n },\n _createView: function (element) {\n return this._createSpaView(element);\n },\n _createMobileView: function (element) {\n return kendo.initWidget(element, {\n defaultTransition: this.transition,\n loader: this.loader,\n container: this.container,\n getLayout: this.getLayoutProxy,\n modelScope: this.modelScope,\n reload: attrValue(element, 'reload')\n }, ui.roles);\n },\n _createSpaView: function (element) {\n var viewOptions = (this.options || {}).viewOptions || {};\n return new kendo.View(element, {\n renderOnInit: viewOptions.renderOnInit,\n wrap: viewOptions.wrap || false,\n wrapInSections: viewOptions.wrapInSections,\n detachOnHide: viewOptions.detachOnHide,\n detachOnDestroy: viewOptions.detachOnDestroy\n });\n },\n _hideViews: function (container) {\n return container.children(this._locate('view')).hide();\n }\n });\n kendo.ViewEngine = ViewEngine;\n kendo.ViewContainer = ViewContainer;\n kendo.Fragment = Fragment;\n kendo.Layout = Layout;\n kendo.View = View;\n kendo.ViewClone = ViewClone;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.signalr', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'data.signalr',\n name: 'SignalR',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($) {\n var kendo = window.kendo;\n var isFunction = kendo.isFunction;\n function isJQueryPromise(promise) {\n return promise && isFunction(promise.done) && isFunction(promise.fail);\n }\n function isNativePromise(promise) {\n return promise && isFunction(promise.then) && isFunction(promise.catch);\n }\n var transport = kendo.data.RemoteTransport.extend({\n init: function (options) {\n var signalr = options && options.signalr ? options.signalr : {};\n var promise = signalr.promise;\n if (!promise) {\n throw new Error('The \"promise\" option must be set.');\n }\n if (!isJQueryPromise(promise) && !isNativePromise(promise)) {\n throw new Error('The \"promise\" option must be a Promise.');\n }\n this.promise = promise;\n var hub = signalr.hub;\n if (!hub) {\n throw new Error('The \"hub\" option must be set.');\n }\n if (typeof hub.on != 'function' || typeof hub.invoke != 'function') {\n throw new Error('The \"hub\" option is not a valid SignalR hub proxy.');\n }\n this.hub = hub;\n kendo.data.RemoteTransport.fn.init.call(this, options);\n },\n push: function (callbacks) {\n var client = this.options.signalr.client || {};\n if (client.create) {\n this.hub.on(client.create, callbacks.pushCreate);\n }\n if (client.update) {\n this.hub.on(client.update, callbacks.pushUpdate);\n }\n if (client.destroy) {\n this.hub.on(client.destroy, callbacks.pushDestroy);\n }\n },\n _crud: function (options, type) {\n var hub = this.hub;\n var promise = this.promise;\n var server = this.options.signalr.server;\n if (!server || !server[type]) {\n throw new Error(kendo.format('The \"server.{0}\" option must be set.', type));\n }\n var args = [server[type]];\n var data = this.parameterMap(options.data, type);\n if (!$.isEmptyObject(data)) {\n args.push(data);\n }\n if (isJQueryPromise(promise)) {\n promise.done(function () {\n hub.invoke.apply(hub, args).done(options.success).fail(options.error);\n });\n } else if (isNativePromise(promise)) {\n promise.then(function () {\n hub.invoke.apply(hub, args).then(options.success).catch(options.error);\n });\n }\n },\n read: function (options) {\n this._crud(options, 'read');\n },\n create: function (options) {\n this._crud(options, 'create');\n },\n update: function (options) {\n this._crud(options, 'update');\n },\n destroy: function (options) {\n this._crud(options, 'destroy');\n }\n });\n $.extend(true, kendo.data, { transports: { signalr: transport } });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.userevents', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'userevents',\n name: 'User Events',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, Class = kendo.Class, Observable = kendo.Observable, now = $.now, extend = $.extend, OS = support.mobileOS, invalidZeroEvents = OS && OS.android, DEFAULT_MIN_HOLD = 800, CLICK_DELAY = 300, DEFAULT_THRESHOLD = support.browser.msie ? 5 : 0, PRESS = 'press', HOLD = 'hold', SELECT = 'select', START = 'start', MOVE = 'move', END = 'end', CANCEL = 'cancel', TAP = 'tap', DOUBLETAP = 'doubleTap', RELEASE = 'release', GESTURESTART = 'gesturestart', GESTURECHANGE = 'gesturechange', GESTUREEND = 'gestureend', GESTURETAP = 'gesturetap';\n var THRESHOLD = {\n 'api': 0,\n 'touch': 0,\n 'mouse': 9,\n 'pointer': 9\n };\n var ENABLE_GLOBAL_SURFACE = !support.touch || support.mouseAndTouchPresent;\n function touchDelta(touch1, touch2) {\n var x1 = touch1.x.location, y1 = touch1.y.location, x2 = touch2.x.location, y2 = touch2.y.location, dx = x1 - x2, dy = y1 - y2;\n return {\n center: {\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2\n },\n distance: Math.sqrt(dx * dx + dy * dy)\n };\n }\n function getTouches(e) {\n var touches = [], originalEvent = e.originalEvent, currentTarget = e.currentTarget, idx = 0, length, changedTouches, touch;\n if (e.api) {\n touches.push({\n id: 2,\n event: e,\n target: e.target,\n currentTarget: e.target,\n location: e,\n type: 'api'\n });\n } else if (e.type.match(/touch/)) {\n changedTouches = originalEvent ? originalEvent.changedTouches : [];\n for (length = changedTouches.length; idx < length; idx++) {\n touch = changedTouches[idx];\n touches.push({\n location: touch,\n event: e,\n target: touch.target,\n currentTarget: currentTarget,\n id: touch.identifier,\n type: 'touch'\n });\n }\n } else if (support.pointers || support.msPointers) {\n touches.push({\n location: originalEvent,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n id: originalEvent.pointerId,\n type: 'pointer'\n });\n } else {\n touches.push({\n id: 1,\n event: e,\n target: e.target,\n currentTarget: currentTarget,\n location: e,\n type: 'mouse'\n });\n }\n return touches;\n }\n var TouchAxis = Class.extend({\n init: function (axis, location) {\n var that = this;\n that.axis = axis;\n that._updateLocationData(location);\n that.startLocation = that.location;\n that.velocity = that.delta = 0;\n that.timeStamp = now();\n },\n move: function (location) {\n var that = this, offset = location['page' + that.axis], timeStamp = now(), timeDelta = timeStamp - that.timeStamp || 1;\n if (!offset && invalidZeroEvents) {\n return;\n }\n that.delta = offset - that.location;\n that._updateLocationData(location);\n that.initialDelta = offset - that.startLocation;\n that.velocity = that.delta / timeDelta;\n that.timeStamp = timeStamp;\n },\n _updateLocationData: function (location) {\n var that = this, axis = that.axis;\n that.location = location['page' + axis];\n that.client = location['client' + axis];\n that.screen = location['screen' + axis];\n }\n });\n var Touch = Class.extend({\n init: function (userEvents, target, touchInfo) {\n extend(this, {\n x: new TouchAxis('X', touchInfo.location),\n y: new TouchAxis('Y', touchInfo.location),\n type: touchInfo.type,\n useClickAsTap: userEvents.useClickAsTap,\n threshold: userEvents.threshold || THRESHOLD[touchInfo.type],\n userEvents: userEvents,\n target: target,\n currentTarget: touchInfo.currentTarget,\n initialTouch: touchInfo.target,\n id: touchInfo.id,\n pressEvent: touchInfo,\n _clicks: userEvents._clicks,\n supportDoubleTap: userEvents.supportDoubleTap,\n _moved: false,\n _finished: false\n });\n },\n press: function () {\n this._holdTimeout = setTimeout($.proxy(this, '_hold'), this.userEvents.minHold);\n this._trigger(PRESS, this.pressEvent);\n },\n _tap: function (touchInfo) {\n var that = this;\n that.userEvents._clicks++;\n if (that.userEvents._clicks == 1) {\n that._clickTimeout = setTimeout(function () {\n if (that.userEvents._clicks == 1) {\n that._trigger(TAP, touchInfo);\n } else {\n that._trigger(DOUBLETAP, touchInfo);\n }\n that.userEvents._clicks = 0;\n }, CLICK_DELAY);\n }\n },\n _hold: function () {\n this._trigger(HOLD, this.pressEvent);\n },\n move: function (touchInfo) {\n var that = this;\n var preventMove = touchInfo.type !== 'api' && that.userEvents._shouldNotMove;\n if (that._finished || preventMove) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n if (this.supportDoubleTap) {\n this._tap(touchInfo);\n } else {\n this._trigger(TAP, touchInfo);\n }\n }\n }\n clearTimeout(this._holdTimeout);\n this.dispose();\n },\n dispose: function () {\n var userEvents = this.userEvents, activeTouches = userEvents.touches;\n this._finished = true;\n this.pressEvent = null;\n clearTimeout(this._holdTimeout);\n activeTouches.splice($.inArray(this, activeTouches), 1);\n },\n skip: function () {\n this.dispose();\n },\n cancel: function () {\n this.dispose();\n },\n isMoved: function () {\n return this._moved;\n },\n _start: function (touchInfo) {\n clearTimeout(this._holdTimeout);\n this.startTime = now();\n this._moved = true;\n this._trigger(START, touchInfo);\n },\n _trigger: function (name, touchInfo) {\n var that = this, jQueryEvent = touchInfo.event, data = {\n touch: that,\n x: that.x,\n y: that.y,\n target: that.target,\n event: jQueryEvent\n };\n if (that.userEvents.notify(name, data)) {\n jQueryEvent.preventDefault();\n }\n },\n _withinIgnoreThreshold: function () {\n var xDelta = this.x.initialDelta, yDelta = this.y.initialDelta;\n return Math.sqrt(xDelta * xDelta + yDelta * yDelta) <= this.threshold;\n }\n });\n function withEachUpEvent(callback) {\n var downEvents = kendo.eventMap.up.split(' '), idx = 0, length = downEvents.length;\n for (; idx < length; idx++) {\n callback(downEvents[idx]);\n }\n }\n var UserEvents = Observable.extend({\n init: function (element, options) {\n var that = this, filter, ns = kendo.guid();\n options = options || {};\n filter = that.filter = options.filter;\n that.threshold = options.threshold || DEFAULT_THRESHOLD;\n that.minHold = options.minHold || DEFAULT_MIN_HOLD;\n that.touches = [];\n that._maxTouches = options.multiTouch ? 2 : 1;\n that.allowSelection = options.allowSelection;\n that.captureUpIfMoved = options.captureUpIfMoved;\n that.useClickAsTap = !options.fastTap && !support.delayedClick();\n that.eventNS = ns;\n that._clicks = 0;\n that.supportDoubleTap = options.supportDoubleTap;\n element = $(element).handler(that);\n Observable.fn.init.call(that);\n extend(that, {\n element: element,\n surface: options.global && ENABLE_GLOBAL_SURFACE ? $(element[0].ownerDocument.documentElement) : $(options.surface || element),\n stopPropagation: options.stopPropagation,\n pressed: false\n });\n that.surface.handler(that).on(kendo.applyEventMap('move', ns), '_move').on(kendo.applyEventMap('up cancel', ns), '_end');\n element.on(kendo.applyEventMap('down', ns), filter, '_start');\n if (that.useClickAsTap) {\n element.on(kendo.applyEventMap('click', ns), filter, '_click');\n }\n if (support.pointers || support.msPointers) {\n if (support.browser.version < 11) {\n var defaultAction = 'pinch-zoom double-tap-zoom';\n element.css('-ms-touch-action', options.touchAction && options.touchAction != 'none' ? defaultAction + ' ' + options.touchAction : defaultAction);\n } else {\n element.css('touch-action', options.touchAction || 'none');\n }\n }\n if (options.preventDragEvent) {\n element.on(kendo.applyEventMap('dragstart', ns), kendo.preventDefault);\n }\n element.on(kendo.applyEventMap('mousedown', ns), filter, { root: element }, '_select');\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0], preventIfMovingProxy = $.proxy(that.preventIfMoving, that);\n withEachUpEvent(function (eventName) {\n surfaceElement.addEventListener(eventName, preventIfMovingProxy, true);\n });\n }\n that.bind([\n PRESS,\n HOLD,\n TAP,\n DOUBLETAP,\n START,\n MOVE,\n END,\n RELEASE,\n CANCEL,\n GESTURESTART,\n GESTURECHANGE,\n GESTUREEND,\n GESTURETAP,\n SELECT\n ], options);\n },\n preventIfMoving: function (e) {\n if (this._isMoved()) {\n e.preventDefault();\n }\n },\n destroy: function () {\n var that = this;\n if (that._destroyed) {\n return;\n }\n that._destroyed = true;\n if (that.captureUpIfMoved && support.eventCapture) {\n var surfaceElement = that.surface[0];\n withEachUpEvent(function (eventName) {\n surfaceElement.removeEventListener(eventName, that.preventIfMoving);\n });\n }\n that.element.kendoDestroy(that.eventNS);\n that.surface.kendoDestroy(that.eventNS);\n that.element.removeData('handler');\n that.surface.removeData('handler');\n that._disposeAll();\n that.unbind();\n delete that.surface;\n delete that.element;\n delete that.currentTarget;\n },\n capture: function () {\n UserEvents.current = this;\n },\n cancel: function () {\n this._disposeAll();\n this.trigger(CANCEL);\n },\n notify: function (eventName, data) {\n var that = this, touches = that.touches;\n if (this._isMultiTouch()) {\n switch (eventName) {\n case MOVE:\n eventName = GESTURECHANGE;\n break;\n case END:\n eventName = GESTUREEND;\n break;\n case TAP:\n eventName = GESTURETAP;\n break;\n }\n extend(data, { touches: touches }, touchDelta(touches[0], touches[1]));\n }\n return this.trigger(eventName, extend(data, { type: eventName }));\n },\n press: function (x, y, target) {\n this._apiCall('_start', x, y, target);\n },\n move: function (x, y) {\n this._apiCall('_move', x, y);\n },\n end: function (x, y) {\n this._apiCall('_end', x, y);\n },\n _isMultiTouch: function () {\n return this.touches.length > 1;\n },\n _maxTouchesReached: function () {\n return this.touches.length >= this._maxTouches;\n },\n _disposeAll: function () {\n var touches = this.touches;\n while (touches.length > 0) {\n touches.pop().dispose();\n }\n },\n _isMoved: function () {\n return $.grep(this.touches, function (touch) {\n return touch.isMoved();\n }).length;\n },\n _select: function (e) {\n if (!this.allowSelection || this.trigger(SELECT, { event: e })) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, idx = 0, filter = that.filter, target, touches = getTouches(e), length = touches.length, touch, which = e.which;\n if (which && which > 1 || that._maxTouchesReached()) {\n return;\n }\n UserEvents.current = null;\n that.currentTarget = e.currentTarget;\n if (that.stopPropagation) {\n e.stopPropagation();\n }\n for (; idx < length; idx++) {\n if (that._maxTouchesReached()) {\n break;\n }\n touch = touches[idx];\n if (filter) {\n target = $(touch.currentTarget);\n } else {\n target = that.element;\n }\n if (!target.length) {\n continue;\n }\n touch = new Touch(that, target, touch);\n that.touches.push(touch);\n touch.press();\n if (that._isMultiTouch()) {\n that.notify('gesturestart', {});\n }\n }\n },\n _move: function (e) {\n this._eachTouch('move', e);\n },\n _end: function (e) {\n this._eachTouch('end', e);\n },\n _click: function (e) {\n var data = {\n touch: {\n initialTouch: e.target,\n target: $(e.currentTarget),\n endTime: now(),\n x: {\n location: e.pageX,\n client: e.clientX\n },\n y: {\n location: e.pageY,\n client: e.clientY\n }\n },\n x: e.pageX,\n y: e.pageY,\n target: $(e.currentTarget),\n event: e,\n type: 'tap'\n };\n if (this.trigger('tap', data)) {\n e.preventDefault();\n }\n },\n _eachTouch: function (methodName, e) {\n var that = this, dict = {}, touches = getTouches(e), activeTouches = that.touches, idx, touch, touchInfo, matchingTouch;\n for (idx = 0; idx < activeTouches.length; idx++) {\n touch = activeTouches[idx];\n dict[touch.id] = touch;\n }\n for (idx = 0; idx < touches.length; idx++) {\n touchInfo = touches[idx];\n matchingTouch = dict[touchInfo.id];\n if (matchingTouch) {\n matchingTouch[methodName](touchInfo);\n }\n }\n },\n _apiCall: function (type, x, y, target) {\n this[type]({\n api: true,\n pageX: x,\n pageY: y,\n clientX: x,\n clientY: y,\n target: $(target || this.element)[0],\n stopPropagation: $.noop,\n preventDefault: $.noop\n });\n }\n });\n UserEvents.defaultThreshold = function (value) {\n DEFAULT_THRESHOLD = value;\n };\n UserEvents.minHold = function (value) {\n DEFAULT_MIN_HOLD = value;\n };\n kendo.getTouches = getTouches;\n kendo.touchDelta = touchDelta;\n kendo.UserEvents = UserEvents;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.draganddrop', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'draganddrop',\n name: 'Drag & drop',\n category: 'framework',\n description: 'Drag & drop functionality for any DOM element.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, document = window.document, $window = $(window), Class = kendo.Class, Widget = kendo.ui.Widget, Observable = kendo.Observable, UserEvents = kendo.UserEvents, proxy = $.proxy, extend = $.extend, getOffset = kendo.getOffset, draggables = {}, dropTargets = {}, dropAreas = {}, lastDropTarget, elementUnderCursor = kendo.elementUnderCursor, KEYUP = 'keyup', CHANGE = 'change', DRAGSTART = 'dragstart', HOLD = 'hold', DRAG = 'drag', DRAGEND = 'dragend', DRAGCANCEL = 'dragcancel', HINTDESTROYED = 'hintDestroyed', DRAGENTER = 'dragenter', DRAGLEAVE = 'dragleave', DROP = 'drop';\n function contains(parent, child) {\n try {\n return $.contains(parent, child) || parent == child;\n } catch (e) {\n return false;\n }\n }\n function numericCssPropery(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function within(value, range) {\n return Math.min(Math.max(value, range.min), range.max);\n }\n function containerBoundaries(container, element) {\n var offset = getOffset(container), outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, minX = offset.left + numericCssPropery(container, 'borderLeftWidth') + numericCssPropery(container, 'paddingLeft'), minY = offset.top + numericCssPropery(container, 'borderTopWidth') + numericCssPropery(container, 'paddingTop'), maxX = minX + container.width() - outerWidth(element, true), maxY = minY + container.height() - outerHeight(element, true);\n return {\n x: {\n min: minX,\n max: maxX\n },\n y: {\n min: minY,\n max: maxY\n }\n };\n }\n function checkTarget(target, targets, areas) {\n var theTarget, theFilter, i = 0, targetLen = targets && targets.length, areaLen = areas && areas.length;\n while (target && target.parentNode) {\n for (i = 0; i < targetLen; i++) {\n theTarget = targets[i];\n if (theTarget.element[0] === target) {\n return {\n target: theTarget,\n targetElement: target\n };\n }\n }\n for (i = 0; i < areaLen; i++) {\n theFilter = areas[i];\n if ($.contains(theFilter.element[0], target) && support.matchesSelector.call(target, theFilter.options.filter)) {\n return {\n target: theFilter,\n targetElement: target\n };\n }\n }\n target = target.parentNode;\n }\n return undefined;\n }\n var TapCapture = Observable.extend({\n init: function (element, options) {\n var that = this, domElement = element[0];\n that.capture = false;\n if (domElement.addEventListener) {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.addEventListener(this, proxy(that._press, that), true);\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.addEventListener(this, proxy(that._release, that), true);\n });\n } else {\n $.each(kendo.eventMap.down.split(' '), function () {\n domElement.attachEvent(this, proxy(that._press, that));\n });\n $.each(kendo.eventMap.up.split(' '), function () {\n domElement.attachEvent(this, proxy(that._release, that));\n });\n }\n Observable.fn.init.call(that);\n that.bind([\n 'press',\n 'release'\n ], options || {});\n },\n captureNext: function () {\n this.capture = true;\n },\n cancelCapture: function () {\n this.capture = false;\n },\n _press: function (e) {\n var that = this;\n that.trigger('press');\n if (that.capture) {\n e.preventDefault();\n }\n },\n _release: function (e) {\n var that = this;\n that.trigger('release');\n if (that.capture) {\n e.preventDefault();\n that.cancelCapture();\n }\n }\n });\n var PaneDimension = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.forcedEnabled = false;\n $.extend(that, options);\n that.scale = 1;\n if (that.horizontal) {\n that.measure = 'offsetWidth';\n that.scrollSize = 'scrollWidth';\n that.axis = 'x';\n } else {\n that.measure = 'offsetHeight';\n that.scrollSize = 'scrollHeight';\n that.axis = 'y';\n }\n },\n makeVirtual: function () {\n $.extend(this, {\n virtual: true,\n forcedEnabled: true,\n _virtualMin: 0,\n _virtualMax: 0\n });\n },\n virtualSize: function (min, max) {\n if (this._virtualMin !== min || this._virtualMax !== max) {\n this._virtualMin = min;\n this._virtualMax = max;\n this.update();\n }\n },\n outOfBounds: function (offset) {\n return offset > this.max || offset < this.min;\n },\n forceEnabled: function () {\n this.forcedEnabled = true;\n },\n getSize: function () {\n return this.container[0][this.measure];\n },\n getTotal: function () {\n return this.element[0][this.scrollSize];\n },\n rescale: function (scale) {\n this.scale = scale;\n },\n update: function (silent) {\n var that = this, total = that.virtual ? that._virtualMax : that.getTotal(), scaledTotal = total * that.scale, size = that.getSize();\n if (total === 0 && !that.forcedEnabled) {\n return;\n }\n that.max = that.virtual ? -that._virtualMin : 0;\n that.size = size;\n that.total = scaledTotal;\n that.min = Math.min(that.max, size - scaledTotal);\n that.minScale = size / total;\n that.centerOffset = (scaledTotal - size) / 2;\n that.enabled = that.forcedEnabled || scaledTotal > size;\n if (!silent) {\n that.trigger(CHANGE, that);\n }\n }\n });\n var PaneDimensions = Observable.extend({\n init: function (options) {\n var that = this;\n Observable.fn.init.call(that);\n that.x = new PaneDimension(extend({ horizontal: true }, options));\n that.y = new PaneDimension(extend({ horizontal: false }, options));\n that.container = options.container;\n that.forcedMinScale = options.minScale;\n that.maxScale = options.maxScale || 100;\n that.bind(CHANGE, options);\n },\n rescale: function (newScale) {\n this.x.rescale(newScale);\n this.y.rescale(newScale);\n this.refresh();\n },\n centerCoordinates: function () {\n return {\n x: Math.min(0, -this.x.centerOffset),\n y: Math.min(0, -this.y.centerOffset)\n };\n },\n refresh: function () {\n var that = this;\n that.x.update();\n that.y.update();\n that.enabled = that.x.enabled || that.y.enabled;\n that.minScale = that.forcedMinScale || Math.min(that.x.minScale, that.y.minScale);\n that.fitScale = Math.max(that.x.minScale, that.y.minScale);\n that.trigger(CHANGE);\n }\n });\n var PaneAxis = Observable.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Observable.fn.init.call(that);\n },\n outOfBounds: function () {\n return this.dimension.outOfBounds(this.movable[this.axis]);\n },\n dragMove: function (delta) {\n var that = this, dimension = that.dimension, axis = that.axis, movable = that.movable, position = movable[axis] + delta;\n if (!dimension.enabled) {\n return;\n }\n if (position < dimension.min && delta < 0 || position > dimension.max && delta > 0) {\n delta *= that.resistance;\n }\n movable.translateAxis(axis, delta);\n that.trigger(CHANGE, that);\n }\n });\n var Pane = Class.extend({\n init: function (options) {\n var that = this, x, y, resistance, movable;\n extend(that, { elastic: true }, options);\n resistance = that.elastic ? 0.5 : 0;\n movable = that.movable;\n that.x = x = new PaneAxis({\n axis: 'x',\n dimension: that.dimensions.x,\n resistance: resistance,\n movable: movable\n });\n that.y = y = new PaneAxis({\n axis: 'y',\n dimension: that.dimensions.y,\n resistance: resistance,\n movable: movable\n });\n that.userEvents.bind([\n 'press',\n 'move',\n 'end',\n 'gesturestart',\n 'gesturechange'\n ], {\n gesturestart: function (e) {\n that.gesture = e;\n that.offset = that.dimensions.container.offset();\n },\n press: function (e) {\n if ($(e.event.target).closest('a').is('[data-navigate-on-press=true]')) {\n e.sender.cancel();\n }\n },\n gesturechange: function (e) {\n var previousGesture = that.gesture, previousCenter = previousGesture.center, center = e.center, scaleDelta = e.distance / previousGesture.distance, minScale = that.dimensions.minScale, maxScale = that.dimensions.maxScale, coordinates;\n if (movable.scale <= minScale && scaleDelta < 1) {\n scaleDelta += (1 - scaleDelta) * 0.8;\n }\n if (movable.scale * scaleDelta >= maxScale) {\n scaleDelta = maxScale / movable.scale;\n }\n var offsetX = movable.x + that.offset.left, offsetY = movable.y + that.offset.top;\n coordinates = {\n x: (offsetX - previousCenter.x) * scaleDelta + center.x - offsetX,\n y: (offsetY - previousCenter.y) * scaleDelta + center.y - offsetY\n };\n movable.scaleWith(scaleDelta);\n x.dragMove(coordinates.x);\n y.dragMove(coordinates.y);\n that.dimensions.rescale(movable.scale);\n that.gesture = e;\n e.preventDefault();\n },\n move: function (e) {\n if (e.event.target.tagName.match(/textarea|input/i)) {\n return;\n }\n if (x.dimension.enabled || y.dimension.enabled) {\n x.dragMove(e.x.delta);\n y.dragMove(e.y.delta);\n e.preventDefault();\n } else {\n e.touch.skip();\n }\n },\n end: function (e) {\n e.preventDefault();\n }\n });\n }\n });\n var TRANSFORM_STYLE = support.transitions.prefix + 'Transform', translate;\n if (support.hasHW3D) {\n translate = function (x, y, scale) {\n return 'translate3d(' + x + 'px,' + y + 'px,0) scale(' + scale + ')';\n };\n } else {\n translate = function (x, y, scale) {\n return 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')';\n };\n }\n var Movable = Observable.extend({\n init: function (element) {\n var that = this;\n Observable.fn.init.call(that);\n that.element = $(element);\n that.element[0].style.webkitTransformOrigin = 'left top';\n that.x = 0;\n that.y = 0;\n that.scale = 1;\n that._saveCoordinates(translate(that.x, that.y, that.scale));\n },\n translateAxis: function (axis, by) {\n this[axis] += by;\n this.refresh();\n },\n scaleTo: function (scale) {\n this.scale = scale;\n this.refresh();\n },\n scaleWith: function (scaleDelta) {\n this.scale *= scaleDelta;\n this.refresh();\n },\n translate: function (coordinates) {\n this.x += coordinates.x;\n this.y += coordinates.y;\n this.refresh();\n },\n moveAxis: function (axis, value) {\n this[axis] = value;\n this.refresh();\n },\n moveTo: function (coordinates) {\n extend(this, coordinates);\n this.refresh();\n },\n refresh: function () {\n var that = this, x = that.x, y = that.y, newCoordinates;\n if (that.round) {\n x = Math.round(x);\n y = Math.round(y);\n }\n newCoordinates = translate(x, y, that.scale);\n if (newCoordinates != that.coordinates) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n that.element[0].style.position = 'absolute';\n that.element[0].style.left = that.x + 'px';\n that.element[0].style.top = that.y + 'px';\n } else {\n that.element[0].style[TRANSFORM_STYLE] = newCoordinates;\n }\n that._saveCoordinates(newCoordinates);\n that.trigger(CHANGE);\n }\n },\n _saveCoordinates: function (coordinates) {\n this.coordinates = coordinates;\n }\n });\n function destroyDroppable(collection, widget) {\n var groupName = widget.options.group, droppables = collection[groupName], i;\n Widget.fn.destroy.call(widget);\n if (droppables.length > 1) {\n for (i = 0; i < droppables.length; i++) {\n if (droppables[i] == widget) {\n droppables.splice(i, 1);\n break;\n }\n }\n } else {\n droppables.length = 0;\n delete collection[groupName];\n }\n }\n var DropTarget = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropTargets)) {\n dropTargets[group] = [that];\n } else {\n dropTargets[group].push(that);\n }\n },\n events: [\n DRAGENTER,\n DRAGLEAVE,\n DROP\n ],\n options: {\n name: 'DropTarget',\n group: 'default'\n },\n destroy: function () {\n destroyDroppable(dropTargets, this);\n },\n _trigger: function (eventName, e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n return that.trigger(eventName, extend({}, e.event, {\n draggable: draggable,\n dropTarget: e.dropTarget\n }));\n }\n },\n _over: function (e) {\n this._trigger(DRAGENTER, e);\n },\n _out: function (e) {\n this._trigger(DRAGLEAVE, e);\n },\n _drop: function (e) {\n var that = this, draggable = draggables[that.options.group];\n if (draggable) {\n draggable.dropped = !that._trigger(DROP, e);\n }\n }\n });\n DropTarget.destroyGroup = function (groupName) {\n var group = dropTargets[groupName] || dropAreas[groupName], i;\n if (group) {\n for (i = 0; i < group.length; i++) {\n Widget.fn.destroy.call(group[i]);\n }\n group.length = 0;\n delete dropTargets[groupName];\n delete dropAreas[groupName];\n }\n };\n DropTarget._cache = dropTargets;\n var DropTargetArea = DropTarget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n var group = that.options.group;\n if (!(group in dropAreas)) {\n dropAreas[group] = [that];\n } else {\n dropAreas[group].push(that);\n }\n },\n destroy: function () {\n destroyDroppable(dropAreas, this);\n },\n options: {\n name: 'DropTargetArea',\n group: 'default',\n filter: null\n }\n });\n var Draggable = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n that._activated = false;\n that.userEvents = new UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: that.options.filter,\n threshold: that.options.distance,\n start: proxy(that._start, that),\n hold: proxy(that._hold, that),\n move: proxy(that._drag, that),\n end: proxy(that._end, that),\n cancel: proxy(that._cancel, that),\n select: proxy(that._select, that)\n });\n if (kendo.support.touch) {\n that.element.find(that.options.filter).css('touch-action', 'none');\n }\n that._afterEndHandler = proxy(that._afterEnd, that);\n that._captureEscape = proxy(that._captureEscape, that);\n },\n events: [\n HOLD,\n DRAGSTART,\n DRAG,\n DRAGEND,\n DRAGCANCEL,\n HINTDESTROYED\n ],\n options: {\n name: 'Draggable',\n distance: kendo.support.touch ? 0 : 5,\n group: 'default',\n cursorOffset: null,\n axis: null,\n container: null,\n filter: null,\n ignore: null,\n holdToDrag: false,\n autoScroll: false,\n dropped: false\n },\n cancelHold: function () {\n this._activated = false;\n },\n _captureEscape: function (e) {\n var that = this;\n if (e.keyCode === kendo.keys.ESC) {\n that._trigger(DRAGCANCEL, { event: e });\n that.userEvents.cancel();\n }\n },\n _updateHint: function (e) {\n var that = this, coordinates, options = that.options, boundaries = that.boundaries, axis = options.axis, cursorOffset = that.options.cursorOffset;\n if (cursorOffset) {\n coordinates = {\n left: e.x.location + cursorOffset.left,\n top: e.y.location + cursorOffset.top\n };\n } else {\n that.hintOffset.left += e.x.delta;\n that.hintOffset.top += e.y.delta;\n coordinates = $.extend({}, that.hintOffset);\n }\n if (boundaries) {\n coordinates.top = within(coordinates.top, boundaries.y);\n coordinates.left = within(coordinates.left, boundaries.x);\n }\n if (axis === 'x') {\n delete coordinates.top;\n } else if (axis === 'y') {\n delete coordinates.left;\n }\n that.hint.css(coordinates);\n },\n _shouldIgnoreTarget: function (target) {\n var ignoreSelector = this.options.ignore;\n return ignoreSelector && $(target).is(ignoreSelector);\n },\n _select: function (e) {\n if (!this._shouldIgnoreTarget(e.event.target)) {\n e.preventDefault();\n }\n },\n _start: function (e) {\n var that = this, options = that.options, container = options.container ? $(options.container) : null, hint = options.hint;\n if (this._shouldIgnoreTarget(e.touch.initialTouch) || options.holdToDrag && !that._activated) {\n that.userEvents.cancel();\n return;\n }\n that.currentTarget = e.target;\n that.currentTargetOffset = getOffset(that.currentTarget);\n if (hint) {\n if (that.hint) {\n that.hint.stop(true, true).remove();\n }\n that.hint = kendo.isFunction(hint) ? $(hint.call(that, that.currentTarget)) : hint;\n var offset = getOffset(that.currentTarget);\n that.hintOffset = offset;\n that.hint.css({\n position: 'absolute',\n zIndex: 20000,\n left: offset.left,\n top: offset.top\n }).appendTo(document.body);\n that.angular('compile', function () {\n that.hint.removeAttr('ng-repeat');\n var scopeTarget = $(e.target);\n while (!scopeTarget.data('$$kendoScope') && scopeTarget.length) {\n scopeTarget = scopeTarget.parent();\n }\n return {\n elements: that.hint.get(),\n scopeFrom: scopeTarget.data('$$kendoScope')\n };\n });\n }\n draggables[options.group] = that;\n that.dropped = false;\n if (container) {\n that.boundaries = containerBoundaries(container, that.hint);\n }\n $(document).on(KEYUP, that._captureEscape);\n if (that._trigger(DRAGSTART, e)) {\n that.userEvents.cancel();\n that._afterEnd();\n }\n that.userEvents.capture();\n },\n _hold: function (e) {\n this.currentTarget = e.target;\n if (this._trigger(HOLD, e)) {\n this.userEvents.cancel();\n } else {\n this._activated = true;\n }\n },\n _drag: function (e) {\n e.preventDefault();\n var cursorElement = this._elementUnderCursor(e);\n if (this.options.autoScroll && this._cursorElement !== cursorElement) {\n this._scrollableParent = findScrollableParent(cursorElement);\n this._cursorElement = cursorElement;\n }\n this._lastEvent = e;\n this._processMovement(e, cursorElement);\n if (this.options.autoScroll) {\n if (this._scrollableParent[0]) {\n var velocity = autoScrollVelocity(e.x.location, e.y.location, scrollableViewPort(this._scrollableParent));\n this._scrollCompenstation = $.extend({}, this.hintOffset);\n this._scrollVelocity = velocity;\n if (velocity.y === 0 && velocity.x === 0) {\n clearInterval(this._scrollInterval);\n this._scrollInterval = null;\n } else if (!this._scrollInterval) {\n this._scrollInterval = setInterval($.proxy(this, '_autoScroll'), 50);\n }\n }\n }\n if (this.hint) {\n this._updateHint(e);\n }\n },\n _processMovement: function (e, cursorElement) {\n this._withDropTarget(cursorElement, function (target, targetElement) {\n if (!target) {\n if (lastDropTarget) {\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n lastDropTarget = null;\n }\n return;\n }\n if (lastDropTarget) {\n if (targetElement === lastDropTarget.targetElement) {\n return;\n }\n lastDropTarget._trigger(DRAGLEAVE, extend(e, { dropTarget: $(lastDropTarget.targetElement) }));\n }\n target._trigger(DRAGENTER, extend(e, { dropTarget: $(targetElement) }));\n lastDropTarget = extend(target, { targetElement: targetElement });\n });\n this._trigger(DRAG, extend(e, {\n dropTarget: lastDropTarget,\n elementUnderCursor: cursorElement\n }));\n },\n _autoScroll: function () {\n var parent = this._scrollableParent[0], velocity = this._scrollVelocity, compensation = this._scrollCompenstation;\n if (!parent) {\n return;\n }\n var cursorElement = this._elementUnderCursor(this._lastEvent);\n this._processMovement(this._lastEvent, cursorElement);\n var yIsScrollable, xIsScrollable;\n var isRootNode = parent === scrollableRoot()[0];\n if (isRootNode) {\n yIsScrollable = document.body.scrollHeight > $window.height();\n xIsScrollable = document.body.scrollWidth > $window.width();\n } else {\n yIsScrollable = parent.offsetHeight <= parent.scrollHeight;\n xIsScrollable = parent.offsetWidth <= parent.scrollWidth;\n }\n var yDelta = parent.scrollTop + velocity.y;\n var yInBounds = yIsScrollable && yDelta > 0 && yDelta < parent.scrollHeight;\n var xDelta = parent.scrollLeft + velocity.x;\n var xInBounds = xIsScrollable && xDelta > 0 && xDelta < parent.scrollWidth;\n if (yInBounds) {\n parent.scrollTop += velocity.y;\n }\n if (xInBounds) {\n parent.scrollLeft += velocity.x;\n }\n if (this.hint && isRootNode && (xInBounds || yInBounds)) {\n if (yInBounds) {\n compensation.top += velocity.y;\n }\n if (xInBounds) {\n compensation.left += velocity.x;\n }\n this.hint.css(compensation);\n }\n },\n _end: function (e) {\n this._withDropTarget(this._elementUnderCursor(e), function (target, targetElement) {\n if (target) {\n target._drop(extend({}, e, { dropTarget: $(targetElement) }));\n lastDropTarget = null;\n }\n });\n this._cancel(this._trigger(DRAGEND, e));\n },\n _cancel: function (isDefaultPrevented) {\n var that = this;\n that._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that._activated = false;\n if (that.hint && !that.dropped) {\n setTimeout(function () {\n that.hint.stop(true, true);\n if (isDefaultPrevented) {\n that._afterEndHandler();\n } else {\n that.hint.animate(that.currentTargetOffset, 'fast', that._afterEndHandler);\n }\n }, 0);\n } else {\n that._afterEnd();\n }\n },\n _trigger: function (eventName, e) {\n var that = this;\n return that.trigger(eventName, extend({}, e.event, {\n x: e.x,\n y: e.y,\n currentTarget: that.currentTarget,\n initialTarget: e.touch ? e.touch.initialTouch : null,\n dropTarget: e.dropTarget,\n elementUnderCursor: e.elementUnderCursor\n }));\n },\n _elementUnderCursor: function (e) {\n var target = elementUnderCursor(e), hint = this.hint;\n if (hint && contains(hint[0], target)) {\n hint.hide();\n target = elementUnderCursor(e);\n if (!target) {\n target = elementUnderCursor(e);\n }\n hint.show();\n }\n return target;\n },\n _withDropTarget: function (element, callback) {\n var result, group = this.options.group, targets = dropTargets[group], areas = dropAreas[group];\n if (targets && targets.length || areas && areas.length) {\n result = checkTarget(element, targets, areas);\n if (result) {\n callback(result.target, result.targetElement);\n } else {\n callback();\n }\n }\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that._afterEnd();\n that.userEvents.destroy();\n this._scrollableParent = null;\n this._cursorElement = null;\n clearInterval(this._scrollInterval);\n that.currentTarget = null;\n },\n _afterEnd: function () {\n var that = this;\n if (that.hint) {\n that.hint.remove();\n }\n delete draggables[that.options.group];\n that.trigger('destroy');\n that.trigger(HINTDESTROYED);\n $(document).off(KEYUP, that._captureEscape);\n }\n });\n kendo.ui.plugin(DropTarget);\n kendo.ui.plugin(DropTargetArea);\n kendo.ui.plugin(Draggable);\n kendo.TapCapture = TapCapture;\n kendo.containerBoundaries = containerBoundaries;\n extend(kendo.ui, {\n Pane: Pane,\n PaneDimensions: PaneDimensions,\n Movable: Movable\n });\n function scrollableViewPort(element) {\n var root = scrollableRoot()[0], offset, top, left;\n if (element[0] === root) {\n top = root.scrollTop;\n left = root.scrollLeft;\n return {\n top: top,\n left: left,\n bottom: top + $window.height(),\n right: left + $window.width()\n };\n } else {\n offset = element.offset();\n offset.bottom = offset.top + element.height();\n offset.right = offset.left + element.width();\n return offset;\n }\n }\n function scrollableRoot() {\n return $(kendo.support.browser.edge || kendo.support.browser.safari ? document.body : document.documentElement);\n }\n function findScrollableParent(element) {\n var root = scrollableRoot();\n if (!element || element === document.body || element === document.documentElement) {\n return root;\n }\n var parent = $(element)[0];\n while (parent && !kendo.isScrollable(parent) && parent !== document.body) {\n parent = parent.parentNode;\n }\n if (parent === document.body) {\n return root;\n }\n return $(parent);\n }\n function autoScrollVelocity(mouseX, mouseY, rect) {\n var velocity = {\n x: 0,\n y: 0\n };\n var AUTO_SCROLL_AREA = 50;\n if (mouseX - rect.left < AUTO_SCROLL_AREA) {\n velocity.x = -(AUTO_SCROLL_AREA - (mouseX - rect.left));\n } else if (rect.right - mouseX < AUTO_SCROLL_AREA) {\n velocity.x = AUTO_SCROLL_AREA - (rect.right - mouseX);\n }\n if (mouseY - rect.top < AUTO_SCROLL_AREA) {\n velocity.y = -(AUTO_SCROLL_AREA - (mouseY - rect.top));\n } else if (rect.bottom - mouseY < AUTO_SCROLL_AREA) {\n velocity.y = AUTO_SCROLL_AREA - (rect.bottom - mouseY);\n }\n return velocity;\n }\n kendo.ui.Draggable.utils = {\n autoScrollVelocity: autoScrollVelocity,\n scrollableViewPort: scrollableViewPort,\n findScrollableParent: findScrollableParent\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.mobile.scroller', [\n 'kendo.fx',\n 'kendo.draganddrop'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'mobile.scroller',\n name: 'Scroller',\n category: 'mobile',\n description: 'The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.',\n depends: [\n 'fx',\n 'draganddrop'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, mobile = kendo.mobile, fx = kendo.effects, ui = mobile.ui, proxy = $.proxy, extend = $.extend, Widget = ui.Widget, Class = kendo.Class, Movable = kendo.ui.Movable, Pane = kendo.ui.Pane, PaneDimensions = kendo.ui.PaneDimensions, Transition = fx.Transition, Animation = fx.Animation, abs = Math.abs, SNAPBACK_DURATION = 500, SCROLLBAR_OPACITY = 0.7, FRICTION = 0.96, VELOCITY_MULTIPLIER = 10, MAX_VELOCITY = 55, OUT_OF_BOUNDS_FRICTION = 0.5, ANIMATED_SCROLLER_PRECISION = 5, RELEASECLASS = 'km-scroller-release', REFRESHCLASS = 'km-scroller-refresh', PULL = 'pull', CHANGE = 'change', RESIZE = 'resize', SCROLL = 'scroll', MOUSE_WHEEL_ID = 2;\n var ZoomSnapBack = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options);\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.tapCapture.bind('press', proxy(that.cancel, that));\n },\n enabled: function () {\n return this.movable.scale < this.dimensions.minScale;\n },\n done: function () {\n return this.dimensions.minScale - this.movable.scale < 0.01;\n },\n tick: function () {\n var movable = this.movable;\n movable.scaleWith(1.1);\n this.dimensions.rescale(movable.scale);\n },\n onEnd: function () {\n var movable = this.movable;\n movable.scaleTo(this.dimensions.minScale);\n this.dimensions.rescale(movable.scale);\n }\n });\n var DragInertia = Animation.extend({\n init: function (options) {\n var that = this;\n Animation.fn.init.call(that);\n extend(that, options, {\n transition: new Transition({\n axis: options.axis,\n movable: options.movable,\n onEnd: function () {\n that._end();\n }\n })\n });\n that.tapCapture.bind('press', function () {\n that.cancel();\n });\n that.userEvents.bind('end', proxy(that.start, that));\n that.userEvents.bind('gestureend', proxy(that.start, that));\n that.userEvents.bind('tap', proxy(that.onEnd, that));\n },\n onCancel: function () {\n this.transition.cancel();\n },\n freeze: function (location) {\n var that = this;\n that.cancel();\n that._moveTo(location);\n },\n onEnd: function () {\n var that = this;\n if (that.paneAxis.outOfBounds()) {\n that._snapBack();\n } else {\n that._end();\n }\n },\n done: function () {\n return abs(this.velocity) < 1;\n },\n start: function (e) {\n var that = this, velocity;\n if (!that.dimension.enabled) {\n return;\n }\n if (that.paneAxis.outOfBounds()) {\n if (that.transition._started) {\n that.transition.cancel();\n that.velocity = Math.min(e.touch[that.axis].velocity * that.velocityMultiplier, MAX_VELOCITY);\n Animation.fn.start.call(that);\n } else {\n that._snapBack();\n }\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('
    ');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('
    ').prepend('
    ');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n supportDoubleTap: that.options.supportDoubleTap,\n start: function (e) {\n dimensions.refresh();\n var velocityX = abs(e.x.velocity), velocityY = abs(e.y.velocity), horizontalSwipe = velocityX * 2 >= velocityY, originatedFromFixedContainer = $.contains(that.fixedContainer[0], e.event.target), verticalSwipe = velocityY * 2 >= velocityX;\n if (!originatedFromFixedContainer && !avoidScrolling(e) && that.enabled && (dimensions.x.enabled && horizontalSwipe || dimensions.y.enabled && verticalSwipe)) {\n userEvents.capture();\n } else {\n userEvents.cancel();\n }\n }\n }), pane = new Pane({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n elastic: that.options.elastic\n }), zoomSnapBack = new ZoomSnapBack({\n movable: movable,\n dimensions: dimensions,\n userEvents: userEvents,\n tapCapture: tapCapture\n }), animatedScroller = new AnimatedScroller({\n moveTo: function (coordinates) {\n that.scrollTo(coordinates.x, coordinates.y);\n }\n });\n movable.bind(CHANGE, function () {\n that.scrollTop = -movable.y;\n that.scrollLeft = -movable.x;\n that.trigger(SCROLL, {\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n });\n if (that.options.mousewheelScrolling) {\n element.on('DOMMouseScroll mousewheel', proxy(this, '_wheelScroll'));\n }\n extend(that, {\n movable: movable,\n dimensions: dimensions,\n zoomSnapBack: zoomSnapBack,\n animatedScroller: animatedScroller,\n userEvents: userEvents,\n pane: pane,\n tapCapture: tapCapture,\n pulled: false,\n enabled: true,\n scrollElement: inner,\n scrollTop: 0,\n scrollLeft: 0,\n fixedContainer: element.children().first()\n });\n that._initAxis('x');\n that._initAxis('y');\n that._wheelEnd = function () {\n that._wheel = false;\n that.userEvents.end(0, that._wheelY);\n };\n dimensions.refresh();\n if (that.options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n _wheelScroll: function (e) {\n if (e.ctrlKey) {\n return;\n }\n if (!this._wheel) {\n this._wheel = true;\n this._wheelY = 0;\n this.userEvents.press(0, this._wheelY);\n }\n clearTimeout(this._wheelTimeout);\n this._wheelTimeout = setTimeout(this._wheelEnd, 50);\n var delta = kendo.wheelDeltaY(e);\n if (delta) {\n this._wheelY += delta;\n this.userEvents.move(0, this._wheelY);\n }\n e.preventDefault();\n },\n makeVirtual: function () {\n this.dimensions.y.makeVirtual();\n },\n virtualSize: function (min, max) {\n this.dimensions.y.virtualSize(min, max);\n },\n height: function () {\n return this.dimensions.y.size;\n },\n scrollHeight: function () {\n return this.scrollElement[0].scrollHeight;\n },\n scrollWidth: function () {\n return this.scrollElement[0].scrollWidth;\n },\n options: {\n name: 'Scroller',\n zoom: false,\n pullOffset: 140,\n visibleScrollHints: false,\n elastic: true,\n useNative: false,\n mousewheelScrolling: true,\n avoidScrolling: function () {\n return false;\n },\n pullToRefresh: false,\n messages: {\n pullTemplate: 'Pull to refresh',\n releaseTemplate: 'Release to refresh',\n refreshTemplate: 'Refreshing'\n }\n },\n events: [\n PULL,\n SCROLL,\n RESIZE\n ],\n _resize: function () {\n if (!this._native) {\n this.contentResized();\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n if (options.pullToRefresh) {\n that._initPullToRefresh();\n }\n },\n reset: function () {\n if (this._native) {\n this.scrollElement.scrollTop(0);\n } else {\n this.movable.moveTo({\n x: 0,\n y: 0\n });\n this._scale(1);\n }\n },\n contentResized: function () {\n this.dimensions.refresh();\n if (this.pane.x.outOfBounds()) {\n this.movable.moveAxis('x', this.dimensions.x.min);\n }\n if (this.pane.y.outOfBounds()) {\n this.movable.moveAxis('y', this.dimensions.y.min);\n }\n },\n zoomOut: function () {\n var dimensions = this.dimensions;\n dimensions.refresh();\n this._scale(dimensions.fitScale);\n this.movable.moveTo(dimensions.centerCoordinates());\n },\n enable: function () {\n this.enabled = true;\n },\n disable: function () {\n this.enabled = false;\n },\n scrollTo: function (x, y) {\n if (this._native) {\n this.scrollElement.scrollLeft(abs(x));\n this.scrollElement.scrollTop(abs(y));\n } else {\n this.dimensions.refresh();\n this.movable.moveTo({\n x: x,\n y: y\n });\n }\n },\n animatedScrollTo: function (x, y, callback) {\n var from, to;\n if (this._native) {\n this.scrollTo(x, y);\n } else {\n from = {\n x: this.movable.x,\n y: this.movable.y\n };\n to = {\n x: x,\n y: y\n };\n this.animatedScroller.setCoordinates(from, to);\n this.animatedScroller.setCallback(callback);\n this.animatedScroller.start();\n }\n },\n pullHandled: function () {\n var that = this;\n that.refreshHint.removeClass(REFRESHCLASS);\n that.hintContainer.html(that.pullTemplate({}));\n that.yinertia.onEnd();\n that.xinertia.onEnd();\n that.userEvents.cancel();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n if (this.userEvents) {\n this.userEvents.destroy();\n }\n },\n _scale: function (scale) {\n this.dimensions.rescale(scale);\n this.movable.scaleTo(scale);\n },\n _initPullToRefresh: function () {\n var that = this;\n that.dimensions.y.forceEnabled();\n that.pullTemplate = kendo.template(that.options.messages.pullTemplate);\n that.releaseTemplate = kendo.template(that.options.messages.releaseTemplate);\n that.refreshTemplate = kendo.template(that.options.messages.refreshTemplate);\n that.scrollElement.prepend('' + that.pullTemplate({}) + '');\n that.refreshHint = that.scrollElement.children().first();\n that.hintContainer = that.refreshHint.children('.km-template');\n that.pane.y.bind('change', proxy(that._paneChange, that));\n that.userEvents.bind('end', proxy(that._dragEnd, that));\n },\n _dragEnd: function () {\n var that = this;\n if (!that.pulled) {\n return;\n }\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS).addClass(REFRESHCLASS);\n that.hintContainer.html(that.refreshTemplate({}));\n that.yinertia.freeze(that.options.pullOffset / 2);\n that.trigger('pull');\n },\n _paneChange: function () {\n var that = this;\n if (that.movable.y / OUT_OF_BOUNDS_FRICTION > that.options.pullOffset) {\n if (!that.pulled) {\n that.pulled = true;\n that.refreshHint.removeClass(REFRESHCLASS).addClass(RELEASECLASS);\n that.hintContainer.html(that.releaseTemplate({}));\n }\n } else if (that.pulled) {\n that.pulled = false;\n that.refreshHint.removeClass(RELEASECLASS);\n that.hintContainer.html(that.pullTemplate({}));\n }\n },\n _initAxis: function (axis) {\n var that = this, movable = that.movable, dimension = that.dimensions[axis], tapCapture = that.tapCapture, paneAxis = that.pane[axis], scrollBar = new ScrollBar({\n axis: axis,\n movable: movable,\n dimension: dimension,\n container: that.element,\n alwaysVisible: that.options.visibleScrollHints\n });\n dimension.bind(CHANGE, function () {\n scrollBar.refresh();\n });\n paneAxis.bind(CHANGE, function () {\n scrollBar.show();\n });\n that[axis + 'inertia'] = new DragInertia({\n axis: axis,\n paneAxis: paneAxis,\n movable: movable,\n tapCapture: tapCapture,\n userEvents: that.userEvents,\n dimension: dimension,\n elastic: that.options.elastic,\n friction: that.options.friction || FRICTION,\n velocityMultiplier: that.options.velocityMultiplier || VELOCITY_MULTIPLIER,\n end: function () {\n scrollBar.hide();\n that.trigger('scrollEnd', {\n axis: axis,\n scrollTop: that.scrollTop,\n scrollLeft: that.scrollLeft\n });\n }\n });\n }\n });\n ui.plugin(Scroller);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.popup', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'popup',\n name: 'Pop-up',\n category: 'framework',\n depends: ['core'],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, Class = kendo.Class, support = kendo.support, getOffset = kendo.getOffset, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, OPEN = 'open', CLOSE = 'close', DEACTIVATE = 'deactivate', ACTIVATE = 'activate', CENTER = 'center', LEFT = 'left', RIGHT = 'right', TOP = 'top', BOTTOM = 'bottom', ABSOLUTE = 'absolute', HIDDEN = 'hidden', BODY = 'body', LOCATION = 'location', POSITION = 'position', VISIBLE = 'visible', EFFECTS = 'effects', ACTIVE = 'k-state-active', ACTIVEBORDER = 'k-state-border', ACTIVEBORDERREGEXP = /k-state-border-(\\w+)/, ACTIVECHILDREN = '.k-picker-wrap, .k-dropdown-wrap, .k-link', MOUSEDOWN = 'down', DOCUMENT_ELEMENT = $(document.documentElement), proxy = $.proxy, WINDOW = $(window), SCROLL = 'scroll', cssPrefix = support.transitions.css, TRANSFORM = cssPrefix + 'transform', extend = $.extend, NS = '.kendoPopup', styles = [\n 'font-size',\n 'font-family',\n 'font-stretch',\n 'font-style',\n 'font-weight',\n 'line-height'\n ];\n function contains(container, target) {\n if (!container || !target) {\n return false;\n }\n return container === target || $.contains(container, target);\n }\n var Popup = Widget.extend({\n init: function (element, options) {\n var that = this, parentPopup;\n options = options || {};\n if (options.isRtl) {\n options.origin = options.origin || BOTTOM + ' ' + RIGHT;\n options.position = options.position || TOP + ' ' + RIGHT;\n }\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that.collisions = options.collision ? options.collision.split(' ') : [];\n that.downEvent = kendo.applyEventMap(MOUSEDOWN, kendo.guid());\n if (that.collisions.length === 1) {\n that.collisions.push(that.collisions[0]);\n }\n parentPopup = $(that.options.anchor).closest('.k-popup,.k-group').filter(':not([class^=km-])');\n options.appendTo = $($(options.appendTo)[0] || parentPopup[0] || document.body);\n that.element.hide().addClass('k-popup k-group k-reset').toggleClass('k-rtl', !!options.isRtl).css({ position: ABSOLUTE }).appendTo(options.appendTo).attr('aria-hidden', true).on('mouseenter' + NS, function () {\n that._hovered = true;\n }).on('wheel' + NS, function (e) {\n var list = $(e.target).find('.k-list');\n var scrollArea = list.parent();\n if (list.length && list.is(':visible') && (scrollArea.scrollTop() === 0 && e.originalEvent.deltaY < 0 || scrollArea.scrollTop() === scrollArea.prop('scrollHeight') - scrollArea.prop('offsetHeight') && e.originalEvent.deltaY > 0)) {\n e.preventDefault();\n }\n }).on('mouseleave' + NS, function () {\n that._hovered = false;\n });\n that.wrapper = $();\n if (options.animation === false) {\n options.animation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n }\n extend(options.animation.open, {\n complete: function () {\n that.wrapper.css({ overflow: VISIBLE });\n that._activated = true;\n that._trigger(ACTIVATE);\n }\n });\n extend(options.animation.close, {\n complete: function () {\n that._animationClose();\n }\n });\n that._mousedownProxy = function (e) {\n that._mousedown(e);\n };\n if (support.mobileOS.android) {\n that._resizeProxy = function (e) {\n setTimeout(function () {\n that._resize(e);\n }, 600);\n };\n } else {\n that._resizeProxy = function (e) {\n that._resize(e);\n };\n }\n if (options.toggleTarget) {\n $(options.toggleTarget).on(options.toggleEvent + NS, $.proxy(that.toggle, that));\n }\n },\n events: [\n OPEN,\n ACTIVATE,\n CLOSE,\n DEACTIVATE\n ],\n options: {\n name: 'Popup',\n toggleEvent: 'click',\n origin: BOTTOM + ' ' + LEFT,\n position: TOP + ' ' + LEFT,\n anchor: BODY,\n appendTo: null,\n collision: 'flip fit',\n viewport: window,\n copyAnchorStyles: true,\n autosize: false,\n modal: false,\n adjustSize: {\n width: 0,\n height: 0\n },\n animation: {\n open: {\n effects: 'slideIn:down',\n transition: true,\n duration: 200\n },\n close: {\n duration: 100,\n hide: true\n }\n }\n },\n _animationClose: function () {\n var that = this;\n var location = that.wrapper.data(LOCATION);\n that.wrapper.hide();\n if (location) {\n that.wrapper.css(location);\n }\n if (that.options.anchor != BODY) {\n that._hideDirClass();\n }\n that._closing = false;\n that._trigger(DEACTIVATE);\n },\n destroy: function () {\n var that = this, options = that.options, element = that.element.off(NS), parent;\n Widget.fn.destroy.call(that);\n if (options.toggleTarget) {\n $(options.toggleTarget).off(NS);\n }\n if (!options.modal) {\n DOCUMENT_ELEMENT.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 = anchorOffset.top, left = anchorOffset.left, round = Math.round;\n if (appendTo[0] != document.body) {\n appendToOffset = getOffset(appendTo);\n top -= appendToOffset.top;\n left -= appendToOffset.left;\n }\n if (verticalOrigin === BOTTOM) {\n top += anchorHeight;\n }\n if (verticalOrigin === CENTER) {\n top += round(anchorHeight / 2);\n }\n if (verticalPosition === BOTTOM) {\n top -= height;\n }\n if (verticalPosition === CENTER) {\n top -= round(height / 2);\n }\n if (horizontalOrigin === RIGHT) {\n left += anchorWidth;\n }\n if (horizontalOrigin === CENTER) {\n left += round(anchorWidth / 2);\n }\n if (horizontalPosition === RIGHT) {\n left -= width;\n }\n if (horizontalPosition === CENTER) {\n left -= round(width / 2);\n }\n return {\n top: top,\n left: left\n };\n }\n });\n ui.plugin(Popup);\n var stableSort = kendo.support.stableSort;\n var tabKeyTrapNS = 'kendoTabKeyTrap';\n var focusableNodesSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex], *[contenteditable]';\n var TabKeyTrap = Class.extend({\n init: function (element) {\n this.element = $(element);\n this.element.autoApplyNS(tabKeyTrapNS);\n },\n trap: function () {\n this.element.on('keydown', proxy(this._keepInTrap, this));\n },\n removeTrap: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n },\n destroy: function () {\n this.element.kendoDestroy(tabKeyTrapNS);\n this.element = undefined;\n },\n shouldTrap: function () {\n return true;\n },\n _keepInTrap: function (e) {\n if (e.which !== 9 || !this.shouldTrap() || e.isDefaultPrevented()) {\n return;\n }\n var elements = this._focusableElements();\n var sortedElements = this._sortFocusableElements(elements);\n var next = this._nextFocusable(e, sortedElements);\n this._focus(next);\n e.preventDefault();\n },\n _focusableElements: function () {\n var elements = this.element.find(focusableNodesSelector).filter(function (i, item) {\n return item.tabIndex >= 0 && $(item).is(':visible') && !$(item).is('[disabled]');\n });\n if (this.element.is('[tabindex]')) {\n elements.push(this.element[0]);\n }\n return elements;\n },\n _sortFocusableElements: function (elements) {\n var sortedElements;\n if (stableSort) {\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex - next.tabIndex;\n });\n } else {\n var attrName = '__k_index';\n elements.each(function (i, item) {\n item.setAttribute(attrName, i);\n });\n sortedElements = elements.sort(function (prev, next) {\n return prev.tabIndex === next.tabIndex ? parseInt(prev.getAttribute(attrName), 10) - parseInt(next.getAttribute(attrName), 10) : prev.tabIndex - next.tabIndex;\n });\n elements.removeAttr(attrName);\n }\n return sortedElements;\n },\n _nextFocusable: function (e, elements) {\n var count = elements.length;\n var current = elements.index(e.target);\n return elements.get((current + (e.shiftKey ? -1 : 1)) % count);\n },\n _focus: function (element) {\n if (element.nodeName == 'IFRAME') {\n element.contentWindow.document.body.focus();\n return;\n }\n element.focus();\n if (element.nodeName == 'INPUT' && element.setSelectionRange && this._haveSelectionRange(element)) {\n element.setSelectionRange(0, element.value.length);\n }\n },\n _haveSelectionRange: function (element) {\n var elementType = element.type.toLowerCase();\n return elementType === 'text' || elementType === 'search' || elementType === 'url' || elementType === 'tel' || elementType === 'password';\n }\n });\n ui.Popup.TabKeyTrap = TabKeyTrap;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.tooltip', [\n 'kendo.core',\n 'kendo.popup',\n 'kendo.fx'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'tooltip',\n name: 'Tooltip',\n category: 'web',\n description: 'The Tooltip widget displays a popup hint for a given html element.',\n depends: [\n 'core',\n 'popup'\n ],\n features: [{\n id: 'tooltip-fx',\n name: 'Animation',\n description: 'Support for animation',\n depends: ['fx']\n }]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, Popup = kendo.ui.Popup, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, extend = $.extend, proxy = $.proxy, DOCUMENT = $(document), isLocalUrl = kendo.isLocalUrl, ARIAIDSUFFIX = '_tt_active', DESCRIBEDBY = 'aria-describedby', SHOW = 'show', HIDE = 'hide', ERROR = 'error', CONTENTLOAD = 'contentLoad', REQUESTSTART = 'requestStart', KCONTENTFRAME = 'k-content-frame', TEMPLATE = '
    ' + '
    ' + '#if (!autoHide) {#
    #}#' + '#if (callout){ #
    #}#' + '
    ', IFRAMETEMPLATE = kendo.template(''), NS = '.kendoTooltip', POSITIONS = {\n bottom: {\n origin: 'bottom center',\n position: 'top center'\n },\n top: {\n origin: 'top center',\n position: 'bottom center'\n },\n left: {\n origin: 'center left',\n position: 'center right',\n collision: 'fit flip'\n },\n right: {\n origin: 'center right',\n position: 'center left',\n collision: 'fit flip'\n },\n center: {\n position: 'center center',\n origin: 'center center'\n }\n }, REVERSE = {\n 'top': 'bottom',\n 'bottom': 'top',\n 'left': 'right',\n 'right': 'left',\n 'center': 'center'\n }, DIRCLASSES = {\n bottom: 'n',\n top: 's',\n left: 'e',\n right: 'w',\n center: 'n'\n }, DIMENSIONS = {\n 'horizontal': {\n offset: 'top',\n size: 'outerHeight'\n },\n 'vertical': {\n offset: 'left',\n size: 'outerWidth'\n }\n }, DEFAULTCONTENT = function (e) {\n return e.target.data(kendo.ns + 'title');\n };\n function restoreTitle(element) {\n while (element.length) {\n if (restoreTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n function restoreTitleAttributeForElement(element) {\n var title = element.data(kendo.ns + 'title');\n if (title) {\n element.attr('title', title);\n element.removeData(kendo.ns + 'title');\n return true;\n }\n }\n function saveTitleAttributeForElement(element) {\n var title = element.attr('title');\n if (title) {\n element.data(kendo.ns + 'title', title);\n element.attr('title', '');\n return true;\n }\n }\n function saveTitleAttributes(element) {\n while (element.length && !element.is('body')) {\n if (saveTitleAttributeForElement(element)) {\n break;\n }\n element = element.parent();\n }\n }\n var Tooltip = Widget.extend({\n init: function (element, options) {\n var that = this, axis;\n Widget.fn.init.call(that, element, options);\n axis = that.options.position.match(/left|right/) ? 'horizontal' : 'vertical';\n that.dimensions = DIMENSIONS[axis];\n that._documentKeyDownHandler = proxy(that._documentKeyDown, that);\n if (kendo.support.touch && this._isShownOnMouseEnter()) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._showOn, that));\n }\n that.element.on(that.options.showOn + NS, that.options.filter, proxy(that._showOn, that));\n if (this._isShownOnMouseEnter() || this._isShownOnClick()) {\n that.element.on('mouseenter' + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n if (this.options.autoHide && this._isShownOnMouseEnter()) {\n that.element.on('mouseleave' + NS, that.options.filter, proxy(that._mouseleave, that));\n }\n if (this.options.autoHide && this._isShownOnFocus()) {\n that.element.on('blur' + NS, that.options.filter, proxy(that._blur, that));\n }\n if (kendo.support.touch) {\n that.element.on(kendo.support.mousedown + NS, that.options.filter, proxy(that._mouseenter, that));\n }\n },\n options: {\n name: 'Tooltip',\n filter: '',\n content: DEFAULTCONTENT,\n showAfter: 100,\n hideAfter: 100,\n callout: true,\n offset: 0,\n position: 'bottom',\n showOn: 'mouseenter',\n autoHide: true,\n width: null,\n height: null,\n animation: {\n open: {\n effects: 'fade:in',\n duration: 0\n },\n close: {\n duration: 40,\n hide: true\n }\n }\n },\n events: [\n SHOW,\n HIDE,\n CONTENTLOAD,\n ERROR,\n REQUESTSTART\n ],\n _isShownOnFocus: function () {\n return this.options.showOn && this.options.showOn.match(/focus/);\n },\n _isShownOnMouseEnter: function () {\n return this.options.showOn && this.options.showOn.match(/mouseenter/);\n },\n _isShownOnClick: function () {\n return this.options.showOn && this.options.showOn.match(/click/);\n },\n _mouseenter: function (e) {\n saveTitleAttributes($(e.currentTarget));\n },\n _showOn: function (e) {\n var that = this;\n var currentTarget = $(e.currentTarget);\n if (that._isShownOnClick() && !that._isShownOnMouseEnter()) {\n that._show(currentTarget);\n } else if (that._isShownOnFocus()) {\n saveTitleAttributes(currentTarget);\n that._show(currentTarget);\n } else {\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._show(currentTarget);\n }, that.options.showAfter);\n }\n },\n _appendContent: function (target) {\n var that = this, contentOptions = that.options.content, element = that.content, showIframe = that.options.iframe, iframe;\n if (isPlainObject(contentOptions) && contentOptions.url) {\n if (!('iframe' in that.options)) {\n showIframe = !isLocalUrl(contentOptions.url);\n }\n that.trigger(REQUESTSTART, {\n options: contentOptions,\n target: target\n });\n if (!showIframe) {\n element.empty();\n kendo.ui.progress(element, true);\n that._ajaxRequest(contentOptions);\n } else {\n element.hide();\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = contentOptions.url || iframe.src;\n } else {\n element.html(IFRAMETEMPLATE({ content: contentOptions }));\n }\n element.find('.' + KCONTENTFRAME).off('load' + NS).on('load' + NS, function () {\n that.trigger(CONTENTLOAD);\n element.show();\n });\n }\n } else if (contentOptions && isFunction(contentOptions)) {\n contentOptions = contentOptions({\n sender: this,\n target: target\n });\n element.html(contentOptions || '');\n } else {\n element.html(contentOptions);\n }\n that.angular('compile', function () {\n return { elements: element };\n });\n },\n _ajaxRequest: function (options) {\n var that = this;\n jQuery.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: function (xhr, status) {\n kendo.ui.progress(that.content, false);\n that.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n success: proxy(function (data) {\n kendo.ui.progress(that.content, false);\n that.content.html(data);\n that.trigger(CONTENTLOAD);\n }, that)\n }, options));\n },\n _documentKeyDown: function (e) {\n if (e.keyCode === kendo.keys.ESC) {\n this.hide();\n }\n },\n refresh: function () {\n var that = this, popup = that.popup;\n if (popup && popup.options.anchor) {\n that._appendContent(popup.options.anchor);\n }\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n },\n show: function (target) {\n target = target || this.element;\n saveTitleAttributes(target);\n this._show(target);\n },\n _show: function (target) {\n var that = this, current = that.target();\n if (!that.popup) {\n that._initPopup();\n }\n if (current && current[0] != target[0]) {\n that.popup.close();\n that.popup.element.kendoStop(true, true);\n }\n if (!current || current[0] != target[0]) {\n that._appendContent(target);\n that.popup.options.anchor = target;\n }\n that.popup.one('deactivate', function () {\n restoreTitle(target);\n target.removeAttr(DESCRIBEDBY);\n this.element.removeAttr('id').attr('aria-hidden', true);\n DOCUMENT.off('keydown' + NS, that._documentKeyDownHandler);\n });\n that.popup._hovered = true;\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n autosize: true,\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n } else {\n that._offset(that.options.position, that.options.offset);\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n that.popup._hovered = undefined;\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide && this._isShownOnMouseEnter()) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n var that = this;\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._closePopup(e.currentTarget);\n }, that.options.hideAfter);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup && !this.popup._hovered) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2;\n that._offset(position, that.options.offset);\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n },\n _offset: function (position, offsetAmount) {\n var that = this, isTopLeft = position == 'top' || position == 'left', isFlipped = that.popup.flipped, direction = isTopLeft && isFlipped || !isTopLeft && !isFlipped ? 1 : -1, marginRule = isTopLeft ? 'margin-' + position : 'margin-' + REVERSE[position], offset = kendo._outerWidth(that.arrow) / 2 + offsetAmount;\n that.popup.wrapper.css(marginRule, offset * direction + 'px');\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n }\n return new HSL(h * 60, s * 100, l * 100, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var DARK_TRESHOLD = 180;\n var Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n },\n isDark: function () {\n return this.percBrightness() < DARK_TRESHOLD;\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n namedColors: namedColors,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n 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 function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n },\n multiplyCopy: function (matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n },\n invert: function () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n },\n clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n },\n round: function (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n },\n toArray: function (precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n },\n toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n },\n scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n },\n transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n },\n toString: function (digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n }\n });\n Point.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function () {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function () {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width || 0;\n this.height = height || 0;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n }\n });\n Size.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n },\n transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n },\n expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n },\n _isOnPath: function (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n });\n Rect.fromPoints = function () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n ObserversMixin.extend(Rect.prototype);\n 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 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _pointAt: function (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n },\n containsPoint: function (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n },\n _isOnPath: function (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n });\n defineAccessors(Circle.prototype, ['radius']);\n ObserversMixin.extend(Circle.prototype);\n var PRECISION = 10;\n function close(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n },\n multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n },\n clone: function () {\n return new Arc(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n },\n curvePoints: function () {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n },\n bbox: function (matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _arcInterval: function () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n },\n _intervalCurvePoints: function (startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n },\n _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n },\n _isOnPath: function (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n });\n Arc.fromPoints = function (start, end, rx, ry, largeArc, swipe, rotation) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n return new Arc(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n defineAccessors(Arc.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc.prototype);\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var rotation = parameters.rotation;\n if (rotation === void 0) {\n rotation = 0;\n }\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n var sign = largeArc !== swipe ? 1 : -1;\n var xt2 = Math.pow(xT, 2);\n var yt2 = Math.pow(yT, 2);\n var rx2 = Math.pow(rx, 2);\n var ry2 = Math.pow(ry, 2);\n var delta = xt2 / rx2 + yt2 / ry2;\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n if (isNaN(constT)) {\n constT = 0;\n }\n var cxT = constT * (rx * yT) / ry;\n var cyT = -constT * (ry * xT) / rx;\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n var uX = (xT - cxT) / rx;\n var uY = (yT - cyT) / ry;\n var vX = -(xT + cxT) / rx;\n var vY = -(yT + cyT) / ry;\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n if (swipe && angle < 0) {\n angle += 360;\n }\n var endAngle = startAngle + angle;\n var signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = Math.abs(endAngle) % 360 * signEndAngle;\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n },\n equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n },\n _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n },\n _curveExtremesFor: function (points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n },\n _curveExtremes: function (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n },\n _intersectionsTo: function (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n },\n _isOnCurveTo: function (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n },\n _isOnLineTo: function (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n },\n _isOnPathTo: function (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n var geometry = {\n Circle: Circle,\n Arc: Arc,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\n 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$$1 = getComputedStyle(element).transform;\n if (transform$$1 === 'none') {\n return Matrix.unit();\n }\n return parseMatrix(transform$$1);\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,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n 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 = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n },\n get: function (field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n },\n set: function (field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n },\n _set: function (field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n },\n _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n }\n });\n ObserversMixin.extend(OptionsStore.prototype);\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform(parentMatrix);\n }\n },\n currentTransform: function (parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n },\n opacity: function (value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n },\n clippedBBox: function (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n },\n stroke: function (color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n }\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n },\n geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var DEFAULT_STROKE = '#000';\n var Circle$1 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle$1.prototype.nodeType = 'Circle';\n Paintable.extend(Circle$1.prototype);\n Measurable.extend(Circle$1.prototype);\n defineGeometryAccessors(Circle$1.prototype, ['geometry']);\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n },\n push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n },\n shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n },\n _splice: function (index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n },\n _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\n });\n function elementsBoundingBox(elements, applyTransform, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = applyTransform ? element.bbox(transformation) : element.rawBBox();\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n function elementsClippedBoundingBox(elements, transformation) {\n var boundingBox;\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n if (element.visible()) {\n var elementBoundingBox = element.clippedBBox(transformation);\n if (elementBoundingBox) {\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, elementBoundingBox);\n } else {\n boundingBox = elementBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n var MultiPath = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.paths = new GeometryElementsArray();\n this.paths.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n moveTo: function (x, y) {\n var path = new Path();\n path.moveTo(x, y);\n this.paths.push(path);\n return this;\n },\n lineTo: function (x, y) {\n if (this.paths.length > 0) {\n last(this.paths).lineTo(x, y);\n }\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.paths.length > 0) {\n last(this.paths).curveTo(controlOut, controlIn, point);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.paths.length > 0) {\n last(this.paths).arc(startAngle, endAngle, radiusX, radiusY, anticlockwise);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.paths.length > 0) {\n last(this.paths).arcTo(end, rx, ry, largeArc, swipe, rotation);\n }\n return this;\n },\n close: function () {\n if (this.paths.length > 0) {\n last(this.paths).close();\n }\n return this;\n },\n _bbox: function (matrix) {\n return elementsBoundingBox(this.paths, true, matrix);\n },\n rawBBox: function () {\n return elementsBoundingBox(this.paths, false);\n },\n _containsPoint: function (point) {\n var paths = this.paths;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._containsPoint(point)) {\n return true;\n }\n }\n return false;\n },\n _isOnPath: function (point) {\n var paths = this.paths;\n var width = this.options.stroke.width;\n for (var idx = 0; idx < paths.length; idx++) {\n if (paths[idx]._isOnPath(point, width)) {\n return true;\n }\n }\n return false;\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.paths, this.currentTransform(transformation));\n }\n });\n MultiPath.prototype.nodeType = 'MultiPath';\n Paintable.extend(MultiPath.prototype);\n Measurable.extend(MultiPath.prototype);\n var ShapeMap = {\n l: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 2) {\n var point = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n point.translateWith(position);\n }\n path.lineTo(point.x, point.y);\n position.x = point.x;\n position.y = point.y;\n }\n },\n c: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 6) {\n var controlOut = new Point(parameters[i], parameters[i + 1]);\n var controlIn = new Point(parameters[i + 2], parameters[i + 3]);\n var point = new Point(parameters[i + 4], parameters[i + 5]);\n if (options.isRelative) {\n controlIn.translateWith(position);\n controlOut.translateWith(position);\n point.translateWith(position);\n }\n path.curveTo(controlOut, controlIn, point);\n position.x = point.x;\n position.y = point.y;\n }\n },\n v: function (path, options) {\n var value = options.isRelative ? 0 : options.position.x;\n toLineParamaters(options.parameters, true, value);\n this.l(path, options);\n },\n h: function (path, options) {\n var value = options.isRelative ? 0 : options.position.y;\n toLineParamaters(options.parameters, false, value);\n this.l(path, options);\n },\n a: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 7) {\n var radiusX = parameters[i];\n var radiusY = parameters[i + 1];\n var rotation = parameters[i + 2];\n var largeArc = parameters[i + 3];\n var swipe = parameters[i + 4];\n var endPoint = new Point(parameters[i + 5], parameters[i + 6]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (position.x !== endPoint.x || position.y !== endPoint.y) {\n path.arcTo(endPoint, radiusX, radiusY, largeArc, swipe, rotation);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n },\n s: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var lastControlIn;\n if (previousCommand === 's' || previousCommand === 'c') {\n lastControlIn = last(last(path.paths).segments).controlIn();\n }\n for (var i = 0; i < parameters.length; i += 4) {\n var controlIn = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n var controlOut = void 0;\n if (options.isRelative) {\n controlIn.translateWith(position);\n endPoint.translateWith(position);\n }\n if (lastControlIn) {\n controlOut = reflectionPoint(lastControlIn, position);\n } else {\n controlOut = position.clone();\n }\n lastControlIn = controlIn;\n path.curveTo(controlOut, controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n q: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n for (var i = 0; i < parameters.length; i += 4) {\n var controlPoint = new Point(parameters[i], parameters[i + 1]);\n var endPoint = new Point(parameters[i + 2], parameters[i + 3]);\n if (options.isRelative) {\n controlPoint.translateWith(position);\n endPoint.translateWith(position);\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n },\n t: function (path, options) {\n var parameters = options.parameters;\n var position = options.position;\n var previousCommand = options.previousCommand;\n var controlPoint;\n if (previousCommand === 'q' || previousCommand === 't') {\n var lastSegment = last(last(path.paths).segments);\n controlPoint = lastSegment.controlIn().clone().translateWith(position.scaleCopy(-1 / 3)).scale(3 / 2);\n }\n for (var i = 0; i < parameters.length; i += 2) {\n var endPoint = new Point(parameters[i], parameters[i + 1]);\n if (options.isRelative) {\n endPoint.translateWith(position);\n }\n if (controlPoint) {\n controlPoint = reflectionPoint(controlPoint, position);\n } else {\n controlPoint = position.clone();\n }\n var cubicControlPoints = quadraticToCubicControlPoints(position, controlPoint, endPoint);\n path.curveTo(cubicControlPoints.controlOut, cubicControlPoints.controlIn, endPoint);\n position.x = endPoint.x;\n position.y = endPoint.y;\n }\n }\n };\n function toLineParamaters(parameters, isVertical, value) {\n var insertPosition = isVertical ? 0 : 1;\n for (var i = 0; i < parameters.length; i += 2) {\n parameters.splice(i + insertPosition, 0, value);\n }\n }\n function reflectionPoint(point, center) {\n if (point && center) {\n return center.scaleCopy(2).translate(-point.x, -point.y);\n }\n }\n var third = 1 / 3;\n function quadraticToCubicControlPoints(position, controlPoint, endPoint) {\n var scaledPoint = controlPoint.clone().scale(2 / 3);\n return {\n controlOut: scaledPoint.clone().translateWith(position.scaleCopy(third)),\n controlIn: scaledPoint.translateWith(endPoint.scaleCopy(third))\n };\n }\n var SEGMENT_REGEX = /([a-df-z]{1})([^a-df-z]*)(z)?/gi;\n var SPLIT_REGEX = /[,\\s]?([+\\-]?(?:\\d*\\.\\d+|\\d+)(?:[eE][+\\-]?\\d+)?)/g;\n var MOVE = 'm';\n var CLOSE = 'z';\n function parseParameters(str) {\n var parameters = [];\n str.replace(SPLIT_REGEX, function (match, number) {\n parameters.push(parseFloat(number));\n });\n return parameters;\n }\n var PathParser = Class.extend({\n parse: function (str, options) {\n var multiPath = new MultiPath(options);\n var position = new Point();\n var previousCommand;\n str.replace(SEGMENT_REGEX, function (match, element, params, closePath) {\n var command = element.toLowerCase();\n var isRelative = command === element;\n var parameters = parseParameters(params.trim());\n if (command === MOVE) {\n if (isRelative) {\n position.x += parameters[0];\n position.y += parameters[1];\n } else {\n position.x = parameters[0];\n position.y = parameters[1];\n }\n multiPath.moveTo(position.x, position.y);\n if (parameters.length > 2) {\n command = 'l';\n parameters.splice(0, 2);\n }\n }\n if (ShapeMap[command]) {\n ShapeMap[command](multiPath, {\n parameters: parameters,\n position: position,\n isRelative: isRelative,\n previousCommand: previousCommand\n });\n if (closePath && closePath.toLowerCase() === CLOSE) {\n multiPath.close();\n }\n } else if (command !== MOVE) {\n throw new Error('Error while parsing SVG path. Unsupported command: ' + command);\n }\n previousCommand = command;\n });\n return multiPath;\n }\n });\n PathParser.current = new PathParser();\n var Path = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.segments = new GeometryElementsArray();\n this.segments.addObserver(this);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n if (!defined(this.options.stroke.lineJoin)) {\n this.options.set('stroke.lineJoin', 'miter');\n }\n }\n },\n moveTo: function (x, y) {\n this.suspend();\n this.segments.elements([]);\n this.resume();\n this.lineTo(x, y);\n return this;\n },\n lineTo: function (x, y) {\n var point = defined(y) ? new Point(x, y) : x;\n var segment = new Segment(point);\n this.segments.push(segment);\n return this;\n },\n curveTo: function (controlOut, controlIn, point) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var segment = new Segment(point, controlIn);\n this.suspend();\n lastSegment.controlOut(controlOut);\n this.resume();\n this.segments.push(segment);\n }\n return this;\n },\n arc: function (startAngle, endAngle, radiusX, radiusY, anticlockwise) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var start = rad(startAngle);\n var center = new Point(anchor.x - radiusX * Math.cos(start), anchor.y - radiusY * Math.sin(start));\n var arc = new Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n },\n close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n },\n _isOnPath: function (point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n },\n _bbox: function (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n }\n });\n Path.fromRect = function (rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function (points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var DEFAULT_STROKE$1 = '#000';\n var Arc$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc$2.prototype.nodeType = 'Arc';\n Paintable.extend(Arc$2.prototype);\n Measurable.extend(Arc$2.prototype);\n defineGeometryAccessors(Arc$2.prototype, ['geometry']);\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_FILL = '#000';\n var Text = Element$1.extend({\n init: function (content, position, options) {\n if (position === void 0) {\n position = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.content(content);\n this.position(position);\n if (!this.options.font) {\n this.options.font = DEFAULT_FONT;\n }\n if (!defined(this.options.fill)) {\n this.fill(DEFAULT_FILL);\n }\n },\n content: function (value) {\n if (defined(value)) {\n this.options.set('content', value);\n return this;\n }\n return this.options.get('content');\n },\n measure: function () {\n var metrics = kendoUtil.measureText(this.content(), { font: this.options.get('font') });\n return metrics;\n },\n rect: function () {\n var size = this.measure();\n var pos = this.position().clone();\n return new Rect(pos, [\n size.width,\n size.height\n ]);\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this.rect().bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this.rect().bbox();\n },\n _containsPoint: function (point) {\n return this.rect().containsPoint(point);\n }\n });\n Text.prototype.nodeType = 'Text';\n Paintable.extend(Text.prototype);\n definePointAccessors(Text.prototype, ['position']);\n var Image$1 = Element$1.extend({\n init: function (src, rect, options) {\n if (rect === void 0) {\n rect = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.src(src);\n this.rect(rect);\n },\n src: function (value) {\n if (defined(value)) {\n this.options.set('src', value);\n return this;\n }\n return this.options.get('src');\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n return this._rect.bbox(combinedMatrix);\n },\n rawBBox: function () {\n return this._rect.bbox();\n },\n _containsPoint: function (point) {\n return this._rect.containsPoint(point);\n },\n _hasFill: function () {\n return this.src();\n }\n });\n Image$1.prototype.nodeType = 'Image';\n defineGeometryAccessors(Image$1.prototype, ['rect']);\n var Traversable = {\n extend: function (proto, childrenField) {\n proto.traverse = function (callback) {\n var children = this[childrenField];\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.traverse) {\n child.traverse(callback);\n } else {\n callback(child);\n }\n }\n return this;\n };\n }\n };\n var Group = Element$1.extend({\n init: function (options) {\n Element$1.fn.init.call(this, options);\n this.children = [];\n },\n childrenChange: function (action, items, index) {\n this.trigger('childrenChange', {\n action: action,\n items: items,\n index: index\n });\n },\n append: function () {\n append(this.children, arguments);\n this._reparent(arguments, this);\n this.childrenChange('add', arguments);\n return this;\n },\n insert: function (index, element) {\n this.children.splice(index, 0, element);\n element.parent = this;\n this.childrenChange('add', [element], index);\n return this;\n },\n insertAt: function (element, index) {\n return this.insert(index, element);\n },\n remove: function (element) {\n var index = this.children.indexOf(element);\n if (index >= 0) {\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n removeAt: function (index) {\n if (0 <= index && index < this.children.length) {\n var element = this.children[index];\n this.children.splice(index, 1);\n element.parent = null;\n this.childrenChange('remove', [element], index);\n }\n return this;\n },\n clear: function () {\n var items = this.children;\n this.children = [];\n this._reparent(items, null);\n this.childrenChange('remove', items, 0);\n return this;\n },\n bbox: function (transformation) {\n return elementsBoundingBox(this.children, true, this.currentTransform(transformation));\n },\n rawBBox: function () {\n return elementsBoundingBox(this.children, false);\n },\n _clippedBBox: function (transformation) {\n return elementsClippedBoundingBox(this.children, this.currentTransform(transformation));\n },\n currentTransform: function (transformation) {\n return Element$1.prototype.currentTransform.call(this, transformation) || null;\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var children = this.children;\n var transform = this.currentTransform(parentTransform);\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].containsPoint(point, transform)) {\n return true;\n }\n }\n }\n return false;\n },\n _reparent: function (elements, newParent) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var child = elements[i];\n var parent = child.parent;\n if (parent && parent !== this$1 && parent.remove) {\n parent.remove(child);\n }\n child.parent = newParent;\n }\n }\n });\n Group.prototype.nodeType = 'Group';\n Traversable.extend(Group.prototype, 'children');\n function translateToPoint(point, bbox, element) {\n var transofrm = element.transform() || transform();\n var matrix = transofrm.matrix();\n matrix.e += point.x - bbox.origin.x;\n matrix.f += point.y - bbox.origin.y;\n transofrm.matrix(matrix);\n element.transform(transofrm);\n }\n function alignStart(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis];\n } else if (align === 'end') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n function alignStartReverse(size, rect, align, axis, sizeField) {\n var start;\n if (align === 'start') {\n start = rect.origin[axis] + rect.size[sizeField] - size;\n } else if (align === 'end') {\n start = rect.origin[axis];\n } else {\n start = rect.origin[axis] + (rect.size[sizeField] - size) / 2;\n }\n return start;\n }\n var DEFAULT_OPTIONS = {\n alignContent: 'start',\n justifyContent: 'start',\n alignItems: 'start',\n spacing: 0,\n orientation: 'horizontal',\n lineSpacing: 0,\n wrap: true,\n revers: false\n };\n var forEach = function (elements, callback) {\n elements.forEach(callback);\n };\n var forEachReverse = function (elements, callback) {\n var length = elements.length;\n for (var idx = length - 1; idx >= 0; idx--) {\n callback(elements[idx], idx);\n }\n };\n var Layout = Group.extend({\n init: function (rect, options) {\n Group.fn.init.call(this, $.extend({}, DEFAULT_OPTIONS, options));\n this._rect = rect;\n this._fieldMap = {};\n },\n rect: function (value) {\n if (value) {\n this._rect = value;\n return this;\n }\n return this._rect;\n },\n _initMap: function () {\n var options = this.options;\n var fieldMap = this._fieldMap;\n if (options.orientation === 'horizontal') {\n fieldMap.sizeField = 'width';\n fieldMap.groupsSizeField = 'height';\n fieldMap.groupAxis = 'x';\n fieldMap.groupsAxis = 'y';\n } else {\n fieldMap.sizeField = 'height';\n fieldMap.groupsSizeField = 'width';\n fieldMap.groupAxis = 'y';\n fieldMap.groupsAxis = 'x';\n }\n if (options.reverse) {\n this.forEach = forEachReverse;\n this.justifyAlign = alignStartReverse;\n } else {\n this.forEach = forEach;\n this.justifyAlign = alignStart;\n }\n },\n reflow: function () {\n var this$1 = this;\n if (!this._rect || this.children.length === 0) {\n return;\n }\n this._initMap();\n if (this.options.transform) {\n this.transform(null);\n }\n var options = this.options;\n var rect = this._rect;\n var ref = this._initGroups();\n var groups = ref.groups;\n var groupsSize = ref.groupsSize;\n var ref$1 = this._fieldMap;\n var sizeField = ref$1.sizeField;\n var groupsSizeField = ref$1.groupsSizeField;\n var groupAxis = ref$1.groupAxis;\n var groupsAxis = ref$1.groupsAxis;\n var groupOrigin = new Point();\n var elementOrigin = new Point();\n var size = new Size();\n var groupStart = alignStart(groupsSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var elementStart, group, groupBox;\n var arrangeElements = function (bbox, idx) {\n var element = group.elements[idx];\n elementOrigin[groupAxis] = elementStart;\n elementOrigin[groupsAxis] = alignStart(bbox.size[groupsSizeField], groupBox, options.alignItems, groupsAxis, groupsSizeField);\n translateToPoint(elementOrigin, bbox, element);\n elementStart += bbox.size[sizeField] + options.spacing;\n };\n for (var groupIdx = 0; groupIdx < groups.length; groupIdx++) {\n group = groups[groupIdx];\n groupOrigin[groupAxis] = elementStart = this$1.justifyAlign(group.size, rect, options.justifyContent, groupAxis, sizeField);\n groupOrigin[groupsAxis] = groupStart;\n size[sizeField] = group.size;\n size[groupsSizeField] = group.lineSize;\n groupBox = new Rect(groupOrigin, size);\n this$1.forEach(group.bboxes, arrangeElements);\n groupStart += group.lineSize + options.lineSpacing;\n }\n if (!options.wrap && group.size > rect.size[sizeField]) {\n var scale = rect.size[sizeField] / groupBox.size[sizeField];\n var scaledStart = groupBox.topLeft().scale(scale, scale);\n var scaledSize = groupBox.size[groupsSizeField] * scale;\n var newStart = alignStart(scaledSize, rect, options.alignContent, groupsAxis, groupsSizeField);\n var transform$$1 = transform();\n if (groupAxis === 'x') {\n transform$$1.translate(rect.origin.x - scaledStart.x, newStart - scaledStart.y);\n } else {\n transform$$1.translate(newStart - scaledStart.x, rect.origin.y - scaledStart.y);\n }\n transform$$1.scale(scale, scale);\n this.transform(transform$$1);\n }\n },\n _initGroups: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var lineSpacing = options.lineSpacing;\n var wrap = options.wrap;\n var spacing = options.spacing;\n var sizeField = this._fieldMap.sizeField;\n var group = this._newGroup();\n var groups = [];\n var addGroup = function () {\n groups.push(group);\n groupsSize += group.lineSize + lineSpacing;\n };\n var groupsSize = -lineSpacing;\n for (var idx = 0; idx < children.length; idx++) {\n var element = children[idx];\n var bbox = children[idx].clippedBBox();\n if (element.visible() && bbox) {\n if (wrap && group.size + bbox.size[sizeField] + spacing > this$1._rect.size[sizeField]) {\n if (group.bboxes.length === 0) {\n this$1._addToGroup(group, bbox, element);\n addGroup();\n group = this$1._newGroup();\n } else {\n addGroup();\n group = this$1._newGroup();\n this$1._addToGroup(group, bbox, element);\n }\n } else {\n this$1._addToGroup(group, bbox, element);\n }\n }\n }\n if (group.bboxes.length) {\n addGroup();\n }\n return {\n groups: groups,\n groupsSize: groupsSize\n };\n },\n _addToGroup: function (group, bbox, element) {\n group.size += bbox.size[this._fieldMap.sizeField] + this.options.spacing;\n group.lineSize = Math.max(bbox.size[this._fieldMap.groupsSizeField], group.lineSize);\n group.bboxes.push(bbox);\n group.elements.push(element);\n },\n _newGroup: function () {\n return {\n lineSize: 0,\n size: -this.options.spacing,\n bboxes: [],\n elements: []\n };\n }\n });\n var Rect$2 = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Rect();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke('#000');\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _containsPoint: function (point) {\n return this._geometry.containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Rect$2.prototype.nodeType = 'Rect';\n Paintable.extend(Rect$2.prototype);\n Measurable.extend(Rect$2.prototype);\n defineGeometryAccessors(Rect$2.prototype, ['geometry']);\n function alignElements(elements, rect, alignment, axis, sizeField) {\n for (var idx = 0; idx < elements.length; idx++) {\n var bbox = elements[idx].clippedBBox();\n if (bbox) {\n var point = bbox.origin.clone();\n point[axis] = alignStart(bbox.size[sizeField], rect, alignment || 'start', axis, sizeField);\n translateToPoint(point, bbox, elements[idx]);\n }\n }\n }\n function align(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'x', 'width');\n }\n function vAlign(elements, rect, alignment) {\n alignElements(elements, rect, alignment, 'y', 'height');\n }\n function stackElements(elements, stackAxis, otherAxis, sizeField) {\n if (elements.length > 1) {\n var origin = new Point();\n var previousBBox = elements[0].bbox;\n for (var idx = 1; idx < elements.length; idx++) {\n var element = elements[idx].element;\n var bbox = elements[idx].bbox;\n origin[stackAxis] = previousBBox.origin[stackAxis] + previousBBox.size[sizeField];\n origin[otherAxis] = bbox.origin[otherAxis];\n translateToPoint(origin, bbox, element);\n bbox.origin[stackAxis] = origin[stackAxis];\n previousBBox = bbox;\n }\n }\n }\n function createStackElements(elements) {\n var stackElements = [];\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var bbox = element.clippedBBox();\n if (bbox) {\n stackElements.push({\n element: element,\n bbox: bbox\n });\n }\n }\n return stackElements;\n }\n function stack(elements) {\n stackElements(createStackElements(elements), 'x', 'y', 'width');\n }\n function vStack(elements) {\n stackElements(createStackElements(elements), 'y', 'x', 'height');\n }\n function getStacks(elements, rect, sizeField) {\n var maxSize = rect.size[sizeField];\n var stacks = [];\n var stack = [];\n var stackSize = 0;\n var element, bbox;\n var addElementToStack = function () {\n stack.push({\n element: element,\n bbox: bbox\n });\n };\n for (var idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n bbox = element.clippedBBox();\n if (bbox) {\n var size = bbox.size[sizeField];\n if (stackSize + size > maxSize) {\n if (stack.length) {\n stacks.push(stack);\n stack = [];\n addElementToStack();\n stackSize = size;\n } else {\n addElementToStack();\n stacks.push(stack);\n stack = [];\n stackSize = 0;\n }\n } else {\n addElementToStack();\n stackSize += size;\n }\n }\n }\n if (stack.length) {\n stacks.push(stack);\n }\n return stacks;\n }\n function wrapElements(elements, rect, axis, otherAxis, sizeField) {\n var stacks = getStacks(elements, rect, sizeField);\n var origin = rect.origin.clone();\n var result = [];\n for (var idx = 0; idx < stacks.length; idx++) {\n var stack = stacks[idx];\n var startElement = stack[0];\n origin[otherAxis] = startElement.bbox.origin[otherAxis];\n translateToPoint(origin, startElement.bbox, startElement.element);\n startElement.bbox.origin[axis] = origin[axis];\n stackElements(stack, axis, otherAxis, sizeField);\n result.push([]);\n for (var elementIdx = 0; elementIdx < stack.length; elementIdx++) {\n result[idx].push(stack[elementIdx].element);\n }\n }\n return result;\n }\n function wrap(elements, rect) {\n return wrapElements(elements, rect, 'x', 'y', 'width');\n }\n function vWrap(elements, rect) {\n return wrapElements(elements, rect, 'y', 'x', 'height');\n }\n function fit(element, rect) {\n var bbox = element.clippedBBox();\n if (bbox) {\n var elementSize = bbox.size;\n var rectSize = rect.size;\n if (rectSize.width < elementSize.width || rectSize.height < elementSize.height) {\n var scale = Math.min(rectSize.width / elementSize.width, rectSize.height / elementSize.height);\n var transform$$1 = element.transform() || transform();\n transform$$1.scale(scale, scale);\n element.transform(transform$$1);\n }\n }\n }\n var StopsArray = ElementsArray.extend({\n _change: function () {\n this.optionsChange({ field: 'stops' });\n }\n });\n function optionsAccessor(name) {\n return function (value) {\n if (defined(value)) {\n this.options.set(name, value);\n return this;\n }\n return this.options.get(name);\n };\n }\n function defineOptionsAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = optionsAccessor(names[i]);\n }\n }\n var GradientStop = Class.extend({\n init: function (offset, color, opacity) {\n this.options = new OptionsStore({\n offset: offset,\n color: color,\n opacity: defined(opacity) ? opacity : 1\n });\n this.options.addObserver(this);\n }\n });\n GradientStop.create = function (arg) {\n if (defined(arg)) {\n var stop;\n if (arg instanceof GradientStop) {\n stop = arg;\n } else if (arg.length > 1) {\n stop = new GradientStop(arg[0], arg[1], arg[2]);\n } else {\n stop = new GradientStop(arg.offset, arg.color, arg.opacity);\n }\n return stop;\n }\n };\n defineOptionsAccessors(GradientStop.prototype, [\n 'offset',\n 'color',\n 'opacity'\n ]);\n ObserversMixin.extend(GradientStop.prototype);\n var Gradient = Class.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n this.stops = new StopsArray(this._createStops(options.stops));\n this.stops.addObserver(this);\n this._userSpace = options.userSpace;\n this.id = definitionId();\n },\n userSpace: function (value) {\n if (defined(value)) {\n this._userSpace = value;\n this.optionsChange();\n return this;\n }\n return this._userSpace;\n },\n _createStops: function (stops) {\n if (stops === void 0) {\n stops = [];\n }\n var result = [];\n for (var idx = 0; idx < stops.length; idx++) {\n result.push(GradientStop.create(stops[idx]));\n }\n return result;\n },\n addStop: function (offset, color, opacity) {\n this.stops.push(new GradientStop(offset, color, opacity));\n },\n removeStop: function (stop) {\n var index = this.stops.indexOf(stop);\n if (index >= 0) {\n this.stops.splice(index, 1);\n }\n }\n });\n Gradient.prototype.nodeType = 'Gradient';\n ObserversMixin.extend(Gradient.prototype);\n $.extend(Gradient.prototype, {\n optionsChange: function (e) {\n this.trigger('optionsChange', {\n field: 'gradient' + (e ? '.' + e.field : ''),\n value: this\n });\n },\n geometryChange: function () {\n this.optionsChange();\n }\n });\n var LinearGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.start(options.start || new Point());\n this.end(options.end || new Point(1, 0));\n }\n });\n definePointAccessors(LinearGradient.prototype, [\n 'start',\n 'end'\n ]);\n var RadialGradient = Gradient.extend({\n init: function (options) {\n if (options === void 0) {\n options = {};\n }\n Gradient.fn.init.call(this, options);\n this.center(options.center || new Point());\n this._radius = defined(options.radius) ? options.radius : 1;\n this._fallbackFill = options.fallbackFill;\n },\n radius: function (value) {\n if (defined(value)) {\n this._radius = value;\n this.geometryChange();\n return this;\n }\n return this._radius;\n },\n fallbackFill: function (value) {\n if (defined(value)) {\n this._fallbackFill = value;\n this.optionsChange();\n return this;\n }\n return this._fallbackFill;\n }\n });\n definePointAccessors(RadialGradient.prototype, ['center']);\n function swing(position) {\n return 0.5 - Math.cos(position * Math.PI) / 2;\n }\n function linear(position) {\n return position;\n }\n function easeOutElastic(position, time, start, diff) {\n var s = 1.70158, p = 0, a = diff;\n if (position === 0) {\n return start;\n }\n if (position === 1) {\n return start + diff;\n }\n if (!p) {\n p = 0.5;\n }\n if (a < Math.abs(diff)) {\n a = diff;\n s = p / 4;\n } else {\n s = p / (2 * Math.PI) * Math.asin(diff / a);\n }\n return a * Math.pow(2, -10 * position) * Math.sin((Number(position) - s) * (1.1 * Math.PI) / p) + diff + start;\n }\n var easingFunctions = {\n swing: swing,\n linear: linear,\n easeOutElastic: easeOutElastic\n };\n var AnimationFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type) {\n this._items.push({\n name: name,\n type: type\n });\n },\n create: function (element, options) {\n var items = this._items;\n var match;\n if (options && options.type) {\n var type = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name.toLowerCase() === type) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n }\n });\n AnimationFactory.current = new AnimationFactory();\n var now = Date.now || function () {\n return new Date().getTime();\n };\n var Animation = Class.extend({\n init: function (element, options) {\n this.options = $.extend({}, this.options, options);\n this.element = element;\n },\n setup: function () {\n },\n step: function () {\n },\n play: function () {\n var this$1 = this;\n var options = this.options;\n var duration = options.duration;\n var delay = options.delay;\n if (delay === void 0) {\n delay = 0;\n }\n var easing = easingFunctions[options.easing];\n var start = now() + delay;\n var finish = start + duration;\n if (duration === 0) {\n this.step(1);\n this.abort();\n } else {\n setTimeout(function () {\n var loop = function () {\n if (this$1._stopped) {\n return;\n }\n var wallTime = now();\n var time = limitValue(wallTime - start, 0, duration);\n var position = time / duration;\n var easingPosition = easing(position, time, 0, 1, duration);\n this$1.step(easingPosition);\n if (wallTime < finish) {\n kendo.animationFrame(loop);\n } else {\n this$1.abort();\n }\n };\n loop();\n }, delay);\n }\n },\n abort: function () {\n this._stopped = true;\n },\n destroy: function () {\n this.abort();\n }\n });\n Animation.prototype.options = {\n duration: 500,\n easing: 'swing'\n };\n Animation.create = function (type, element, options) {\n return AnimationFactory.current.create(type, element, options);\n };\n var SurfaceFactory = Class.extend({\n init: function () {\n this._items = [];\n },\n register: function (name, type, order) {\n var items = this._items;\n var first = items[0];\n var entry = {\n name: name,\n type: type,\n order: order\n };\n if (!first || order < first.order) {\n items.unshift(entry);\n } else {\n items.push(entry);\n }\n },\n create: function (element, options) {\n var items = this._items;\n var match = items[0];\n if (options && options.type) {\n var preferred = options.type.toLowerCase();\n for (var i = 0; i < items.length; i++) {\n if (items[i].name === preferred) {\n match = items[i];\n break;\n }\n }\n }\n if (match) {\n return new match.type(element, options);\n }\n kendo.logToConsole('Warning: Unable to create Kendo UI Drawing Surface. Possible causes:\\n' + '- The browser does not support SVG and Canvas. User agent: ' + navigator.userAgent);\n }\n });\n SurfaceFactory.current = new SurfaceFactory();\n var events = [\n 'click',\n 'mouseenter',\n 'mouseleave',\n 'mousemove',\n 'resize'\n ];\n var Surface = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = $.extend({}, options);\n this.element = element;\n this.element._kendoExportVisual = this.exportVisual.bind(this);\n this._click = this._handler('click');\n this._mouseenter = this._handler('mouseenter');\n this._mouseleave = this._handler('mouseleave');\n this._mousemove = this._handler('mousemove');\n this._visual = new Group();\n elementSize(element, this.options);\n this.bind(events, this.options);\n this._enableTracking();\n },\n draw: function (element) {\n this._visual.children.push(element);\n },\n clear: function () {\n this._visual.children = [];\n },\n destroy: function () {\n this._visual = null;\n this.element._kendoExportVisual = null;\n this.unbind();\n },\n eventTarget: function (e) {\n var this$1 = this;\n var domNode = eventElement(e);\n var node;\n while (!node && domNode) {\n node = domNode._kendoNode;\n if (domNode === this$1.element) {\n break;\n }\n domNode = domNode.parentElement;\n }\n if (node) {\n return node.srcElement;\n }\n },\n exportVisual: function () {\n return this._visual;\n },\n getSize: function () {\n return elementSize(this.element);\n },\n currentSize: function (size) {\n if (size) {\n this._size = size;\n } else {\n return this._size;\n }\n },\n setSize: function (size) {\n elementSize(this.element, size);\n this.currentSize(size);\n this._resize();\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this.currentSize();\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this.currentSize(size);\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n size: function (value) {\n if (!value) {\n return this.getSize();\n }\n this.setSize(value);\n },\n suspendTracking: function () {\n this._suspendedTracking = true;\n },\n resumeTracking: function () {\n this._suspendedTracking = false;\n },\n _enableTracking: function () {\n },\n _resize: function () {\n },\n _handler: function (eventName) {\n var this$1 = this;\n return function (e) {\n var node = this$1.eventTarget(e);\n if (node && !this$1._suspendedTracking) {\n this$1.trigger(eventName, {\n element: node,\n originalEvent: e,\n type: eventName\n });\n }\n };\n },\n _elementOffset: function () {\n var element = this.element;\n var 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 _surfacePoint: function (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n var inverseTransform = elementScale(this.element).invert();\n var point = new Point(x, y).transform(inverseTransform);\n return point;\n }\n });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n },\n load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n },\n removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n }\n });\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\"' + value + '\" ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var 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 = BaseNode.extend({\n init: function (srcElement, options) {\n BaseNode.fn.init.call(this, srcElement);\n this.definitions = {};\n this.options = options;\n },\n destroy: function () {\n if (this.element) {\n this.element._kendoNode = null;\n this.element = null;\n }\n this.clearDefinitions();\n BaseNode.fn.destroy.call(this);\n },\n load: function (elements, pos) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP[srcElement.nodeType](srcElement, this$1.options);\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n childNode.createDefinitions();\n if (children && children.length > 0) {\n childNode.load(children);\n }\n var element = this$1.element;\n if (element) {\n childNode.attachTo(element, pos);\n }\n }\n },\n root: function () {\n var root = this;\n while (root.parent) {\n root = root.parent;\n }\n return root;\n },\n attachTo: function (domElement, pos) {\n var container = document.createElement('div');\n renderSVG$1(container, '' + this.render() + '');\n var element = container.firstChild.firstChild;\n if (element) {\n if (defined(pos)) {\n domElement.insertBefore(element, domElement.childNodes[pos] || null);\n } else {\n domElement.appendChild(element);\n }\n this.setElement(element);\n }\n },\n setElement: function (element) {\n if (this.element) {\n this.element._kendoNode = null;\n }\n this.element = element;\n this.element._kendoNode = this;\n var nodes = this.childNodes;\n for (var i = 0; i < nodes.length; i++) {\n var childElement = element.childNodes[i];\n nodes[i].setElement(childElement);\n }\n },\n clear: function () {\n this.clearDefinitions();\n if (this.element) {\n this.element.innerHTML = '';\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n this.childNodes = [];\n },\n removeSelf: function () {\n if (this.element) {\n var parentNode = this.element.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.element);\n }\n this.element = null;\n }\n BaseNode.fn.removeSelf.call(this);\n },\n template: function () {\n return this.renderChildren();\n },\n render: function () {\n return this.template();\n },\n renderChildren: function () {\n var nodes = this.childNodes;\n var output = '';\n for (var i = 0; i < nodes.length; i++) {\n output += nodes[i].render();\n }\n return output;\n },\n optionsChange: function (e) {\n var field = e.field;\n var value = e.value;\n if (field === 'visible') {\n this.css('display', value ? '' : NONE);\n } else if (DefinitionMap[field] && isDefinition(field, value)) {\n this.updateDefinition(field, value);\n } else if (field === 'opacity') {\n this.attr('opacity', value);\n } else if (field === 'cursor') {\n this.css('cursor', value);\n } else if (field === 'id') {\n if (value) {\n this.attr('id', value);\n } else {\n this.removeAttr('id');\n }\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n attr: function (name, value) {\n if (this.element) {\n this.element.setAttribute(name, value);\n }\n },\n allAttr: function (attrs) {\n var this$1 = this;\n for (var i = 0; i < attrs.length; i++) {\n this$1.attr(attrs[i][0], attrs[i][1]);\n }\n },\n css: function (name, value) {\n if (this.element) {\n this.element.style[name] = value;\n }\n },\n allCss: function (styles) {\n var this$1 = this;\n for (var i = 0; i < styles.length; i++) {\n this$1.css(styles[i][0], styles[i][1]);\n }\n },\n removeAttr: function (name) {\n if (this.element) {\n this.element.removeAttribute(name);\n }\n },\n mapTransform: function (transform) {\n var attrs = [];\n if (transform) {\n attrs.push([\n TRANSFORM,\n 'matrix(' + transform.matrix().toString(6) + ')'\n ]);\n }\n return attrs;\n },\n renderTransform: function () {\n return renderAllAttr(this.mapTransform(this.srcElement.transform()));\n },\n transformChange: function (value) {\n if (value) {\n this.allAttr(this.mapTransform(value));\n } else {\n this.removeAttr(TRANSFORM);\n }\n },\n mapStyle: function () {\n var options = this.srcElement.options;\n var style = [[\n 'cursor',\n options.cursor\n ]];\n if (options.visible === false) {\n style.push([\n 'display',\n NONE\n ]);\n }\n return style;\n },\n renderStyle: function () {\n return renderAttr('style', renderStyle(this.mapStyle(true)));\n },\n renderOpacity: function () {\n return renderAttr('opacity', this.srcElement.options.opacity);\n },\n renderId: function () {\n return renderAttr('id', this.srcElement.options.id);\n },\n createDefinitions: function () {\n var srcElement = this.srcElement;\n var definitions = this.definitions;\n if (srcElement) {\n var options = srcElement.options;\n var hasDefinitions;\n for (var field in DefinitionMap) {\n var definition = options.get(field);\n if (definition && isDefinition(field, definition)) {\n definitions[field] = definition;\n hasDefinitions = true;\n }\n }\n if (hasDefinitions) {\n this.definitionChange({\n action: 'add',\n definitions: definitions\n });\n }\n }\n },\n definitionChange: function (e) {\n if (this.parent) {\n this.parent.definitionChange(e);\n }\n },\n updateDefinition: function (type, value) {\n var definitions = this.definitions;\n var current = definitions[type];\n var attr = DefinitionMap[type];\n var definition = {};\n if (current) {\n definition[type] = current;\n this.definitionChange({\n action: 'remove',\n definitions: definition\n });\n delete definitions[type];\n }\n if (!value) {\n if (current) {\n this.removeAttr(attr);\n }\n } else {\n definition[type] = value;\n this.definitionChange({\n action: 'add',\n definitions: definition\n });\n definitions[type] = value;\n this.attr(attr, this.refUrl(value.id));\n }\n },\n clearDefinitions: function () {\n var definitions = this.definitions;\n this.definitionChange({\n action: 'remove',\n definitions: definitions\n });\n this.definitions = {};\n },\n renderDefinitions: function () {\n return renderAllAttr(this.mapDefinitions());\n },\n mapDefinitions: function () {\n var this$1 = this;\n var definitions = this.definitions;\n var attrs = [];\n for (var field in definitions) {\n attrs.push([\n DefinitionMap[field],\n this$1.refUrl(definitions[field].id)\n ]);\n }\n return attrs;\n },\n refUrl: function (id) {\n var skipBaseHref = (this.options || {}).skipBaseHref;\n var baseHref = this.baseUrl().replace(/'/g, '\\\\\\'');\n var base = skipBaseHref ? '' : baseHref;\n return 'url(' + base + '#' + id + ')';\n },\n baseUrl: function () {\n return baseUrl();\n }\n });\n var GradientStopNode = Node.extend({\n template: function () {\n return '';\n },\n renderOffset: function () {\n return renderAttr('offset', this.srcElement.offset());\n },\n mapStyle: function () {\n var srcElement = this.srcElement;\n return [\n [\n 'stop-color',\n srcElement.color()\n ],\n [\n 'stop-opacity',\n srcElement.opacity()\n ]\n ];\n },\n optionsChange: function (e) {\n if (e.field === 'offset') {\n this.attr(e.field, e.value);\n } else if (e.field === 'color' || e.field === 'opacity') {\n this.css('stop-' + e.field, e.value);\n }\n }\n });\n var GradientNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this, srcElement);\n this.id = srcElement.id;\n this.loadStops();\n },\n loadStops: function () {\n var this$1 = this;\n var stops = this.srcElement.stops;\n var element = this.element;\n for (var idx = 0; idx < stops.length; idx++) {\n var stopNode = new GradientStopNode(stops[idx]);\n this$1.append(stopNode);\n if (element) {\n stopNode.attachTo(element);\n }\n }\n },\n optionsChange: function (e) {\n if (e.field === 'gradient.stops') {\n BaseNode.prototype.clear.call(this);\n this.loadStops();\n } else if (e.field === 'gradient') {\n this.allAttr(this.mapCoordinates());\n }\n },\n renderCoordinates: function () {\n return renderAllAttr(this.mapCoordinates());\n },\n mapSpace: function () {\n return [\n 'gradientUnits',\n this.srcElement.userSpace() ? 'userSpaceOnUse' : 'objectBoundingBox'\n ];\n }\n });\n var LinearGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var start = srcElement.start();\n var end = srcElement.end();\n var attrs = [\n [\n 'x1',\n start.x\n ],\n [\n 'y1',\n start.y\n ],\n [\n 'x2',\n end.x\n ],\n [\n 'y2',\n end.y\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var RadialGradientNode = GradientNode.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n mapCoordinates: function () {\n var srcElement = this.srcElement;\n var center = srcElement.center();\n var radius = srcElement.radius();\n var attrs = [\n [\n 'cx',\n center.x\n ],\n [\n 'cy',\n center.y\n ],\n [\n 'r',\n radius\n ],\n this.mapSpace()\n ];\n return attrs;\n }\n });\n var ClipNode = Node.extend({\n init: function (srcElement) {\n Node.fn.init.call(this);\n this.srcElement = srcElement;\n this.id = srcElement.id;\n this.load([srcElement]);\n },\n template: function () {\n return '' + this.renderChildren() + '';\n }\n });\n var DefinitionNode = Node.extend({\n init: function () {\n Node.fn.init.call(this);\n this.definitionMap = {};\n },\n attachTo: function (domElement) {\n this.element = domElement;\n },\n template: function () {\n return '' + this.renderChildren() + '';\n },\n definitionChange: function (e) {\n var definitions = e.definitions;\n var action = e.action;\n if (action === 'add') {\n this.addDefinitions(definitions);\n } else if (action === 'remove') {\n this.removeDefinitions(definitions);\n }\n },\n createDefinition: function (type, item) {\n var nodeType;\n if (type === 'clip') {\n nodeType = ClipNode;\n } else if (type === 'fill') {\n if (item instanceof LinearGradient) {\n nodeType = LinearGradientNode;\n } else if (item instanceof RadialGradient) {\n nodeType = RadialGradientNode;\n }\n }\n return new nodeType(item);\n },\n addDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.addDefinition(field, definitions[field]);\n }\n },\n addDefinition: function (type, srcElement) {\n var ref = this;\n var element = ref.element;\n var definitionMap = ref.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (!mapItem) {\n var node = this.createDefinition(type, srcElement);\n definitionMap[id] = {\n element: node,\n count: 1\n };\n this.append(node);\n if (element) {\n node.attachTo(this.element);\n }\n } else {\n mapItem.count++;\n }\n },\n removeDefinitions: function (definitions) {\n var this$1 = this;\n for (var field in definitions) {\n this$1.removeDefinition(definitions[field]);\n }\n },\n removeDefinition: function (srcElement) {\n var definitionMap = this.definitionMap;\n var id = srcElement.id;\n var mapItem = definitionMap[id];\n if (mapItem) {\n mapItem.count--;\n if (mapItem.count === 0) {\n this.remove(this.childNodes.indexOf(mapItem.element), 1);\n delete definitionMap[id];\n }\n }\n }\n });\n var RootNode = Node.extend({\n init: function (options) {\n Node.fn.init.call(this);\n this.options = options;\n this.defs = new DefinitionNode();\n },\n attachTo: function (domElement) {\n this.element = domElement;\n this.defs.attachTo(domElement.firstElementChild);\n },\n clear: function () {\n BaseNode.prototype.clear.call(this);\n },\n template: function () {\n return this.defs.render() + this.renderChildren();\n },\n definitionChange: function (e) {\n this.defs.definitionChange(e);\n }\n });\n var RTL = 'rtl';\n function alignToScreen(element) {\n var ctm;\n try {\n ctm = element.getScreenCTM ? element.getScreenCTM() : null;\n } catch (e) {\n }\n if (ctm) {\n var left = -ctm.e % 1;\n var top = -ctm.f % 1;\n var style = element.style;\n if (left !== 0 || top !== 0) {\n style.left = left + 'px';\n style.top = top + 'px';\n }\n }\n }\n var Surface$1 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this._root = new RootNode($.extend({ rtl: elementStyles(element, 'direction').direction === RTL }, this.options));\n renderSVG$1(this.element, this._template());\n this._rootElement = this.element.firstElementChild;\n alignToScreen(this._rootElement);\n this._root.attachTo(this._rootElement);\n bindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n this.resize();\n },\n destroy: function () {\n if (this._root) {\n this._root.destroy();\n this._root = null;\n this._rootElement = null;\n unbindEvents(this.element, {\n click: this._click,\n mouseover: this._mouseenter,\n mouseout: this._mouseleave,\n mousemove: this._mousemove\n });\n }\n Surface.fn.destroy.call(this);\n },\n translate: function (offset) {\n var viewBox = Math.round(offset.x) + ' ' + Math.round(offset.y) + ' ' + this._size.width + ' ' + this._size.height;\n this._offset = offset;\n this._rootElement.setAttribute('viewBox', viewBox);\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element]);\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n },\n svg: function () {\n return '' + this._template();\n },\n exportVisual: function () {\n var ref = this;\n var visual = ref._visual;\n var offset = ref._offset;\n if (offset) {\n var wrap = new Group();\n wrap.children.push(visual);\n wrap.transform(transform().translate(-offset.x, -offset.y));\n visual = wrap;\n }\n return visual;\n },\n _resize: function () {\n if (this._offset) {\n this.translate(this._offset);\n }\n },\n _template: function () {\n return '' + this._root.render() + '';\n }\n });\n Surface$1.prototype.type = 'svg';\n if (typeof document !== 'undefined' && document.implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1')) {\n Surface.support.svg = true;\n SurfaceFactory.current.register('svg', Surface$1, 10);\n }\n var GroupNode = Node.extend({\n template: function () {\n return '' + this.renderChildren() + '';\n },\n optionsChange: function (e) {\n if (e.field === 'transform') {\n this.transformChange(e.value);\n }\n Node.fn.optionsChange.call(this, e);\n }\n });\n NODE_MAP.Group = GroupNode;\n var DASH_ARRAYS = {\n dot: [\n 1.5,\n 3.5\n ],\n dash: [\n 4,\n 3.5\n ],\n longdash: [\n 8,\n 3.5\n ],\n dashdot: [\n 3.5,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdot: [\n 8,\n 3.5,\n 1.5,\n 3.5\n ],\n longdashdotdot: [\n 8,\n 3.5,\n 1.5,\n 3.5,\n 1.5,\n 3.5\n ]\n };\n var SOLID = 'solid';\n var BUTT = 'butt';\n var ATTRIBUTE_MAP = {\n 'fill.opacity': 'fill-opacity',\n 'stroke.color': 'stroke',\n 'stroke.width': 'stroke-width',\n 'stroke.opacity': 'stroke-opacity'\n };\n var SPACE = ' ';\n var PathNode = Node.extend({\n geometryChange: function () {\n this.attr('d', this.renderData());\n this.invalidate();\n },\n optionsChange: function (e) {\n switch (e.field) {\n case 'fill':\n if (e.value) {\n this.allAttr(this.mapFill(e.value));\n } else {\n this.removeAttr('fill');\n }\n break;\n case 'fill.color':\n this.allAttr(this.mapFill({ color: e.value }));\n break;\n case 'stroke':\n if (e.value) {\n this.allAttr(this.mapStroke(e.value));\n } else {\n this.removeAttr('stroke');\n }\n break;\n case 'transform':\n this.transformChange(e.value);\n break;\n default:\n var name = ATTRIBUTE_MAP[e.field];\n if (name) {\n this.attr(name, e.value);\n }\n break;\n }\n Node.fn.optionsChange.call(this, e);\n },\n content: function () {\n if (this.element) {\n this.element.textContent = this.srcElement.content();\n }\n },\n renderData: function () {\n return this.printPath(this.srcElement);\n },\n printPath: function (path) {\n var this$1 = this;\n var segments = path.segments;\n var length = segments.length;\n if (length > 0) {\n var parts = [];\n var output, currentType;\n for (var i = 1; i < length; i++) {\n var segmentType = this$1.segmentType(segments[i - 1], segments[i]);\n if (segmentType !== currentType) {\n currentType = segmentType;\n parts.push(segmentType);\n }\n if (segmentType === 'L') {\n parts.push(this$1.printPoints(segments[i].anchor()));\n } else {\n parts.push(this$1.printPoints(segments[i - 1].controlOut(), segments[i].controlIn(), segments[i].anchor()));\n }\n }\n output = 'M' + this.printPoints(segments[0].anchor()) + SPACE + parts.join(SPACE);\n if (path.options.closed) {\n output += 'Z';\n }\n return output;\n }\n },\n printPoints: function () {\n var points = arguments;\n var length = points.length;\n var result = [];\n for (var i = 0; i < length; i++) {\n result.push(points[i].toString(3));\n }\n return result.join(' ');\n },\n segmentType: function (segmentStart, segmentEnd) {\n return segmentStart.controlOut() && segmentEnd.controlIn() ? 'C' : 'L';\n },\n mapStroke: function (stroke) {\n var attrs = [];\n if (stroke && !isTransparent(stroke.color)) {\n attrs.push([\n 'stroke',\n stroke.color\n ]);\n attrs.push([\n 'stroke-width',\n stroke.width\n ]);\n attrs.push([\n 'stroke-linecap',\n this.renderLinecap(stroke)\n ]);\n attrs.push([\n 'stroke-linejoin',\n stroke.lineJoin\n ]);\n if (defined(stroke.opacity)) {\n attrs.push([\n 'stroke-opacity',\n stroke.opacity\n ]);\n }\n if (defined(stroke.dashType)) {\n attrs.push([\n 'stroke-dasharray',\n this.renderDashType(stroke)\n ]);\n }\n } else {\n attrs.push([\n 'stroke',\n NONE\n ]);\n }\n return attrs;\n },\n renderStroke: function () {\n return renderAllAttr(this.mapStroke(this.srcElement.options.stroke));\n },\n renderDashType: function (stroke) {\n var dashType = stroke.dashType;\n var width = stroke.width;\n if (width === void 0) {\n width = 1;\n }\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType.toLowerCase()];\n var result = [];\n for (var i = 0; i < dashArray.length; i++) {\n result.push(dashArray[i] * width);\n }\n return result.join(' ');\n }\n },\n renderLinecap: function (stroke) {\n var dashType = stroke.dashType;\n var lineCap = stroke.lineCap;\n return dashType && dashType !== 'solid' ? BUTT : lineCap;\n },\n mapFill: function (fill) {\n var attrs = [];\n if (!(fill && fill.nodeType === 'Gradient')) {\n if (fill && !isTransparent(fill.color)) {\n attrs.push([\n 'fill',\n fill.color\n ]);\n if (defined(fill.opacity)) {\n attrs.push([\n 'fill-opacity',\n fill.opacity\n ]);\n }\n } else {\n attrs.push([\n 'fill',\n NONE\n ]);\n }\n }\n return attrs;\n },\n renderFill: function () {\n return renderAllAttr(this.mapFill(this.srcElement.options.fill));\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Path = PathNode;\n var ArcNode = PathNode.extend({\n renderData: function () {\n return this.printPath(this.srcElement.toPath());\n }\n });\n NODE_MAP.Arc = ArcNode;\n var CircleNode = PathNode.extend({\n geometryChange: function () {\n var center = this.center();\n this.attr('cx', center.x);\n this.attr('cy', center.y);\n this.attr('r', this.radius());\n this.invalidate();\n },\n center: function () {\n return this.srcElement.geometry().center;\n },\n radius: function () {\n return this.srcElement.geometry().radius;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Circle = CircleNode;\n var RectNode = PathNode.extend({\n geometryChange: function () {\n var geometry = this.srcElement.geometry();\n this.attr('x', geometry.origin.x);\n this.attr('y', geometry.origin.y);\n this.attr('width', geometry.size.width);\n this.attr('height', geometry.size.height);\n this.invalidate();\n },\n size: function () {\n return this.srcElement.geometry().size;\n },\n origin: function () {\n return this.srcElement.geometry().origin;\n },\n template: function () {\n return '';\n }\n });\n NODE_MAP.Rect = RectNode;\n var ImageNode = PathNode.extend({\n geometryChange: function () {\n this.allAttr(this.mapPosition());\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.allAttr(this.mapSource());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapPosition: function () {\n var rect = this.srcElement.rect();\n var tl = rect.topLeft();\n return [\n [\n 'x',\n tl.x\n ],\n [\n 'y',\n tl.y\n ],\n [\n 'width',\n rect.width() + 'px'\n ],\n [\n 'height',\n rect.height() + 'px'\n ]\n ];\n },\n renderPosition: function () {\n return renderAllAttr(this.mapPosition());\n },\n mapSource: function (encode) {\n var src = this.srcElement.src();\n if (encode) {\n src = kendo.htmlEncode(src);\n }\n return [[\n 'xlink:href',\n src\n ]];\n },\n renderSource: function () {\n return renderAllAttr(this.mapSource(true));\n },\n template: function () {\n return '' + '';\n }\n });\n NODE_MAP.Image = ImageNode;\n var ENTITY_REGEX = /&(?:[a-zA-Z]+|#\\d+);/g;\n function decodeEntities(text) {\n if (!text || typeof text !== 'string' || !ENTITY_REGEX.test(text)) {\n return text;\n }\n var element = decodeEntities._element;\n ENTITY_REGEX.lastIndex = 0;\n return text.replace(ENTITY_REGEX, function (match) {\n element.innerHTML = match;\n return element.textContent || element.innerText;\n });\n }\n if (typeof document !== 'undefined') {\n decodeEntities._element = document.createElement('span');\n }\n var TextNode = PathNode.extend({\n geometryChange: function () {\n var pos = this.pos();\n this.attr('x', pos.x);\n this.attr('y', pos.y);\n this.invalidate();\n },\n optionsChange: function (e) {\n if (e.field === 'font') {\n this.attr('style', renderStyle(this.mapStyle()));\n this.geometryChange();\n } else if (e.field === 'content') {\n PathNode.fn.content.call(this, this.srcElement.content());\n }\n PathNode.fn.optionsChange.call(this, e);\n },\n mapStyle: function (encode) {\n var style = PathNode.fn.mapStyle.call(this, encode);\n var font = this.srcElement.options.font;\n if (encode) {\n font = kendo.htmlEncode(font);\n }\n style.push([\n 'font',\n font\n ], [\n 'white-space',\n 'pre'\n ]);\n return style;\n },\n pos: function () {\n var pos = this.srcElement.position();\n var size = this.srcElement.measure();\n return pos.clone().setY(pos.y + size.baseline);\n },\n renderContent: function () {\n var content = this.srcElement.content();\n content = decodeEntities(content);\n content = kendo.htmlEncode(content);\n return kendoUtil.normalizeText(content);\n },\n renderTextAnchor: function () {\n var anchor;\n if ((this.options || {}).rtl && !(supportBrowser.msie || supportBrowser.edge)) {\n anchor = 'end';\n }\n return renderAttr('text-anchor', anchor);\n },\n template: function () {\n return '' + this.renderContent() + '';\n }\n });\n NODE_MAP.Text = TextNode;\n var MultiPathNode = PathNode.extend({\n renderData: function () {\n var this$1 = this;\n var paths = this.srcElement.paths;\n if (paths.length > 0) {\n var result = [];\n for (var i = 0; i < paths.length; i++) {\n result.push(this$1.printPath(paths[i]));\n }\n return result.join(' ');\n }\n }\n });\n NODE_MAP.MultiPath = MultiPathNode;\n function exportGroup(group) {\n var root = new RootNode({ skipBaseHref: true });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '' + root.render() + '';\n root.destroy();\n return svg;\n }\n var svg = {\n Surface: Surface$1,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n },\n loadElements: function (elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n }\n });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas, size) {\n GroupNode$2.fn.init.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 destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _rescale: function (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 _devicePixelRatio: function () {\n if (window.devicePixelRatio === 'number') {\n return window.devicePixelRatio;\n }\n return 1;\n },\n _invalidate: function (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 });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n },\n insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n }\n });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n },\n pointShape: function (point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n },\n assignZindex: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n },\n optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n },\n add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n },\n _insert: function (elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n },\n remove: function (element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n });\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var SurfaceCursor = Class.extend({\n init: function (surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n },\n clear: function () {\n this._resetCursor();\n },\n destroy: function () {\n this._resetCursor();\n delete this.element;\n },\n _mouseenter: function (e) {\n var cursor = this._shapeCursor(e);\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n this._setCursor(cursor);\n }\n },\n _mouseleave: function () {\n this._resetCursor();\n },\n _shapeCursor: function (e) {\n var shape = e.element;\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n if (shape) {\n return shape.options.cursor;\n }\n },\n _getCursor: function () {\n if (this.element) {\n return this.element.style.cursor;\n }\n },\n _setCursor: function (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n },\n _resetCursor: function () {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n }\n });\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas, size);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n destroy: function () {\n Surface.fn.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n if (this._cursor) {\n this._cursor.clear();\n }\n },\n eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate({ 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 suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n },\n _resize: function () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.size = this._size;\n this._root.invalidate();\n },\n _template: function () {\n return '';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n }\n });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\n }\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n },\n setFill: function (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n },\n setGradientFill: function (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n },\n setStroke: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n },\n dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n },\n setLineCap: function (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n },\n setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n }\n });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n },\n renderTo: function (ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n }\n });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n }\n });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$3(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = supportBrowser || {};\n function slice$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n var inBrowser = typeof window !== 'undefined';\n var microsoft = inBrowser ? browser.msie || browser.edge : false;\n var TextRect = Text.extend({\n init: function (str, rect, options) {\n Text.fn.init.call(this, str, rect.getOrigin(), options);\n this._pdfRect = rect;\n },\n rect: function () {\n return this._pdfRect;\n },\n rawBBox: function () {\n return this._pdfRect;\n }\n });\n function addClass(el, cls) {\n if (el.classList) {\n el.classList.add(cls);\n } else {\n el.className += ' ' + cls;\n }\n }\n function removeClass(el, cls) {\n if (el.classList) {\n el.classList.remove(cls);\n } else {\n el.className = el.className.split(/\\s+/).reduce(function (a, word) {\n if (word != cls) {\n a.push(word);\n }\n return a;\n }, []).join(' ');\n }\n }\n function setCSS(el, styles) {\n Object.keys(styles).forEach(function (key) {\n el.style[key] = styles[key];\n });\n }\n var matches = typeof Element !== 'undefined' && Element.prototype && function (p) {\n if (p.matches) {\n return function (el, selector) {\n return el.matches(selector);\n };\n }\n if (p.webkitMatchesSelector) {\n return function (el, selector) {\n return el.webkitMatchesSelector(selector);\n };\n }\n if (p.mozMatchesSelector) {\n return function (el, selector) {\n return el.mozMatchesSelector(selector);\n };\n }\n if (p.msMatchesSelector) {\n return function (el, selector) {\n return el.msMatchesSelector(selector);\n };\n }\n return function (s) {\n return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n };\n }(Element.prototype);\n function closest(el, selector) {\n if (el.closest) {\n return el.closest(selector);\n }\n while (el && !/^\\[object (?:HTML)?Document\\]$/.test(String(el))) {\n if (el.nodeType == 1 && matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n }\n var cloneNodes = function ($) {\n if ($) {\n return function cloneNodes(el) {\n var clone = el.cloneNode(false);\n if (el.nodeType == 1) {\n var $el = $(el), $clone = $(clone), i;\n var data = $el.data();\n for (i in data) {\n $clone.data(i, data[i]);\n }\n if (/^canvas$/i.test(el.tagName)) {\n clone.getContext('2d').drawImage(el, 0, 0);\n } else if (/^(?:input|select|textarea|option)$/i.test(el.tagName)) {\n clone.removeAttribute('id');\n clone.removeAttribute('name');\n 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(clone.querySelectorAll('canvas')).forEach(function (canvas$$1, i) {\n canvas$$1.getContext('2d').drawImage(canvases[i], 0, 0);\n });\n }\n var orig = el.querySelectorAll('input, select, textarea, option');\n slice$1(clone.querySelectorAll('input, select, textarea, option')).forEach(function (el, i) {\n el.removeAttribute('id');\n el.removeAttribute('name');\n 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(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n -pos.left * scale.x,\n -pos.top * scale.y\n ]);\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = 'a';\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n addClass(element, 'k-pdf-export');\n renderElement(element, group);\n removeClass(element, 'k-pdf-export');\n return group;\n }\n cacheImages(element, function () {\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != 'auto';\n var paperOptions = kendo.pdf.getPaperOptions(function (key, def) {\n if (key == 'paperSize') {\n return hasPaperSize ? options[key] : 'A4';\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n if (pageWidth) {\n pageWidth /= scale.x;\n }\n if (pageHeight) {\n pageHeight /= scale.y;\n }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n var group = new Group({\n pdf: {\n multiPage: true,\n paperSize: hasPaperSize ? paperOptions.paperSize : 'auto',\n _ignoreMargin: hasMargin\n }\n });\n handlePageBreaks(function (x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next() {\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function () {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }());\n } else {\n x.pages.forEach(function (page) {\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }, element, forceBreak, pageWidth ? pageWidth - margin.left - margin.right : null, pageHeight ? pageHeight - margin.top - margin.bottom : null, margin, options);\n } else {\n promise.resolve(doOne(element));\n }\n });\n function makeTemplate(template$$1) {\n if (template$$1 != null) {\n if (typeof template$$1 == 'string') {\n template$$1 = kendo.template(template$$1.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template$$1 == 'function') {\n return function (data) {\n var el = template$$1(data);\n if (el && typeof el == 'string') {\n var div = document.createElement('div');\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n return function () {\n return template$$1.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template$$1 = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement('KENDO-PDF-DOCUMENT');\n var adjust = 0;\n slice$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1(ol.children).forEach(function (li, index) {\n li.setAttribute('kendo-split-index', index);\n });\n });\n setCSS(container, {\n display: 'block',\n position: 'absolute',\n boxSizing: 'content-box',\n left: '-10000px',\n top: '-10000px'\n });\n if (pageWidth) {\n setCSS(container, {\n width: pageWidth + 'px',\n paddingLeft: margin.left + 'px',\n paddingRight: margin.right + 'px'\n });\n setCSS(copy, { overflow: 'hidden' });\n }\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n if (options.beforePageBreak) {\n setTimeout(function () {\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n function doPageBreak() {\n if (forceBreak != '-' || pageHeight) {\n splitElement(copy);\n }\n {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n if (template$$1) {\n pages.forEach(function (page, i) {\n var el = template$$1({\n element: page,\n pageNum: i + 1,\n totalPages: pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n cacheImages(pages, function () {\n whenImagesAreActuallyLoaded(pages, function () {\n callback({\n pages: pages,\n container: container\n });\n });\n });\n }\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n return el.getAttribute('data-kendo-chart') || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName);\n }\n function splitElement(element) {\n if (element.tagName == 'TABLE') {\n setCSS(element, { tableLayout: 'fixed' });\n }\n 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 drawDOM.getFontFaces = getFontFaces;\n drawDOM.drawText = function (element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle$1(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n };\n var parseBackgroundImage = function () {\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn)|0)/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n var cache1 = {}, cache2 = {};\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match = /^#[0-9a-f]+/i.exec(input) || /^rgba?\\(.*?\\)/i.exec(input) || /^..*?\\b/.exec(input);\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return {\n color: color,\n length: length,\n percent: percent\n };\n }\n }\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n if (read(tok_popen)) {\n angle = read(tok_angle);\n if (angle == '0') {\n angle = '0deg';\n }\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n } else {\n to1 = read(tok_keyword);\n if (to1 == 'to') {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == '0%') {\n to1 = 'left';\n } else if (x == '100%') {\n to1 = 'right';\n }\n if (y == '0%') {\n to2 = 'top';\n } else if (y == '100%') {\n to2 = 'bottom';\n }\n read(tok_comma);\n }\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n return {\n type: 'linear',\n angle: angle,\n to: to1 && to2 ? to1 + ' ' + to2 : to1 ? to1 : to2 ? to2 : null,\n stops: stops,\n reverse: reverse\n };\n }\n }\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, '');\n read(tok_pclose);\n return {\n type: 'url',\n url: url\n };\n }\n }\n var tok;\n if (tok = read(tok_linear_gradient)) {\n tok = read_linear_gradient(tok);\n } else if (tok = read(tok_url)) {\n tok = read_url();\n }\n return cache1[orig] = tok || { type: 'none' };\n }\n return function (input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return cache2[input] = splitProperty(input).map(parse);\n };\n }();\n var splitProperty = function () {\n var cache = {};\n return function (input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n var cacheKey = input + separator;\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n var ret = [];\n var last$$1 = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n function looking_at(rx) {\n return m = rx.exec(input.substr(pos));\n }\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n }\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n } else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n } else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n } else if (in_string == '\\'' && looking_at(/^\\\\\\'/)) {\n pos += 2;\n } else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n } else if (in_string == '\\'' && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n } else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n } else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last$$1) {\n ret.push(trim(input.substring(last$$1, pos)));\n last$$1 = pos + m[0].length;\n }\n pos += m[0].length;\n } else {\n pos++;\n }\n }\n if (last$$1 < pos) {\n ret.push(trim(input.substring(last$$1, pos)));\n }\n return cache[cacheKey] = ret;\n };\n }();\n var getFontURL = function (cache) {\n return function (el) {\n var url = cache[el];\n if (!url) {\n var m;\n if (m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el)) {\n url = cache[el] = m[2];\n } else if (m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el)) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n }(Object.create ? Object.create(null) : {});\n var getFontHeight = function (cache) {\n return function (font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = kendoUtil.measureText('Mapq', { font: font }).height;\n }\n return height;\n };\n }(Object.create ? Object.create(null) : {});\n function getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {\n }\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, 'src');\n if (src) {\n return splitProperty(src).reduce(function (a, el) {\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n var font = getFontURL(rule.cssText);\n return font ? [font] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3:\n doStylesheet(r.styleSheet);\n break;\n case 5:\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, 'font-family'));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, 'font-weight'));\n var italic = 'italic' == getPropertyValue(style, 'font-style');\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n if (!/^data:/i.test(url)) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, '') + url;\n }\n }\n names.forEach(function (name) {\n name = name.replace(/^(['\"]?)(.*?)\\1$/, '$2');\n if (bold) {\n name += '|bold';\n }\n if (italic) {\n name += '|italic';\n }\n result[name] = url;\n });\n }\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function getCounter(name) {\n name = '_counter_' + name;\n return nodeInfo[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = '_counter_' + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n }\n function incCounter(name, inc) {\n var p = nodeInfo;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\n function doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n }\n function updateCounters(style) {\n var counterReset = getPropertyValue(style, 'counter-reset');\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, 'counter-increment');\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n }\n function parseColor$1(str, css) {\n var color = kendo.parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n }\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function (el) {\n var images = el.querySelectorAll('img');\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n }\n function cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n function dive(element) {\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(getPropertyValue(getComputedStyle$1(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1(element.children).forEach(dive);\n }\n }\n if (Array.isArray(element)) {\n element.forEach(dive);\n } else {\n dive(element);\n }\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function (url) {\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function () {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n }\n function alphaNumeral(n) {\n var result = '';\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n }\n function pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, 'text-decoration');\n if (decoration && decoration != 'none') {\n var color = getPropertyValue(style, 'color');\n decoration.split(/\\s+/g).forEach(function (name) {\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\n function updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n }\n function createsStackingContext(style) {\n function prop(name) {\n return getPropertyValue(style, name);\n }\n if (prop('transform') != 'none' || prop('position') != 'static' || prop('z-index') != 'auto' || prop('opacity') < 1) {\n return true;\n }\n }\n function getComputedStyle$1(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\n function getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === '') {\n if (browser.webkit) {\n val = style.getPropertyValue('-webkit-' + prop);\n } else if (browser.mozilla) {\n val = style.getPropertyValue('-moz-' + prop);\n } else if (browser.opera) {\n val = style.getPropertyValue('-o-' + prop);\n } else if (microsoft) {\n val = style.getPropertyValue('-ms-' + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === '')) {\n return defa;\n } else {\n return val;\n }\n }\n function pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty('-webkit-' + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty('-moz-' + prop, value, important);\n } else if (browser.opera) {\n style.setProperty('-o-' + prop, value, important);\n } else if (microsoft) {\n style.setProperty('-ms-' + prop, value, important);\n prop = 'ms' + prop.replace(/(^|-)([a-z])/g, function (s, p1, p2) {\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n }\n function getBorder(style, side) {\n side = 'border-' + side;\n return {\n width: parseFloat(getPropertyValue(style, side + '-width')),\n style: getPropertyValue(style, side + '-style'),\n color: parseColor$1(getPropertyValue(style, side + '-color'), true)\n };\n }\n function saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n }\n function getBorderRadius(style, side) {\n var r = getPropertyValue(style, 'border-' + side + '-radius').split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({\n x: r[0],\n y: r[1]\n });\n }\n function getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, 'border-*-width', element);\n box = innerBox(box, 'padding-*', element);\n return box;\n }\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == 'string') {\n style = getComputedStyle$1(element);\n wt = parseFloat(getPropertyValue(style, prop.replace('*', 'top')));\n wr = parseFloat(getPropertyValue(style, prop.replace('*', 'right')));\n wb = parseFloat(getPropertyValue(style, prop.replace('*', 'bottom')));\n wl = parseFloat(getPropertyValue(style, prop.replace('*', 'left')));\n } else if (typeof prop == 'number') {\n wt = wr = wb = wl = prop;\n }\n return {\n top: box.top + wt,\n right: box.right - wr,\n bottom: box.bottom - wb,\n left: box.left + wl,\n width: box.right - box.left - wr - wl,\n height: box.bottom - box.top - wb - wt\n };\n }\n function getTransform(style) {\n var transform$$1 = getPropertyValue(style, 'transform');\n if (transform$$1 == 'none') {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n if (matrix) {\n var origin = getPropertyValue(style, 'transform-origin');\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n }\n function radiansToDegrees(radians) {\n return 180 * radians / Math.PI % 360;\n }\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n } else if (/rad$/.test(angle)) {\n return num;\n } else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n } else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n function setTransform(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([\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(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(boxes).map(function (box) {\n return {\n left: box.left + tableBorderLeft,\n top: box.top + tableBorderTop,\n right: box.right + tableBorderLeft,\n bottom: box.bottom + tableBorderTop,\n height: box.height,\n width: box.width\n };\n });\n }\n }\n }\n return boxes;\n }\n function drawEdge(color, len, Wtop, Wleft, Wright, rl, rr, transform$$1) {\n if (Wtop <= 0) {\n return;\n }\n var path, edge = new Group();\n setTransform(edge, transform$$1);\n group.append(edge);\n sanitizeRadius(rl);\n sanitizeRadius(rr);\n path = new Path({\n fill: { color: color },\n stroke: null\n });\n edge.append(path);\n path.moveTo(rl.x ? Math.max(rl.x, Wleft) : 0, 0).lineTo(len - (rr.x ? Math.max(rr.x, Wright) : 0), 0).lineTo(len - Math.max(rr.x, Wright), Wtop).lineTo(Math.max(rl.x, Wleft), Wtop).close();\n if (rl.x) {\n drawRoundCorner(Wleft, rl, [\n -1,\n 0,\n 0,\n 1,\n rl.x,\n 0\n ]);\n }\n if (rr.x) {\n drawRoundCorner(Wright, rr, [\n 1,\n 0,\n 0,\n 1,\n len - rr.x,\n 0\n ]);\n }\n function drawRoundCorner(Wright, r, transform$$1) {\n var angle = Math.PI / 2 * Wright / (Wright + Wtop);\n var ri = {\n x: r.x - Wright,\n y: r.y - Wtop\n };\n var path = new Path({\n fill: { color: color },\n stroke: null\n }).moveTo(0, 0);\n setTransform(path, transform$$1);\n addArcToPath(path, 0, r.y, {\n startAngle: -90,\n endAngle: -radiansToDegrees(angle),\n radiusX: r.x,\n radiusY: r.y\n });\n if (ri.x > 0 && ri.y > 0) {\n path.lineTo(ri.x * Math.cos(angle), r.y - ri.y * Math.sin(angle));\n addArcToPath(path, 0, r.y, {\n startAngle: -radiansToDegrees(angle),\n endAngle: -90,\n radiusX: ri.x,\n radiusY: ri.y,\n anticlockwise: true\n });\n } else if (ri.x > 0) {\n path.lineTo(ri.x, Wtop).lineTo(0, Wtop);\n } else {\n path.lineTo(ri.x, Wtop).lineTo(ri.x, 0);\n }\n edge.append(path.close());\n }\n }\n function drawBackground(box) {\n var background = new Group();\n setClipping(background, roundBox(box, rTL0, rTR0, rBR0, rBL0));\n group.append(background);\n if (backgroundColor) {\n var path = new Path({\n fill: { color: backgroundColor.toCssRgba() },\n stroke: null\n });\n path.moveTo(box.left, box.top).lineTo(box.right, box.top).lineTo(box.right, box.bottom).lineTo(box.left, box.bottom).close();\n background.append(path);\n }\n for (var i = backgroundImage.length; --i >= 0;) {\n drawOneBackground(background, box, backgroundImage[i], backgroundRepeat[i % backgroundRepeat.length], backgroundPosition[i % backgroundPosition.length], backgroundOrigin[i % backgroundOrigin.length], backgroundSize[i % backgroundSize.length]);\n }\n }\n function drawOneBackground(group, box, background, backgroundRepeat, backgroundPosition, backgroundOrigin, backgroundSize) {\n if (!background || background == 'none') {\n return;\n }\n if (background.type == 'url') {\n if (/^url\\(\\\"data:image\\/svg/i.test(background.url)) {\n return;\n }\n var img = IMAGE_CACHE[background.url];\n if (img && img.width > 0 && img.height > 0) {\n drawBackgroundImage(group, box, img.width, img.height, function (group, rect) {\n group.append(new Image$1(background.url, rect));\n });\n }\n } else if (background.type == 'linear') {\n drawBackgroundImage(group, box, box.width, box.height, gradientRenderer(background));\n } else {\n return;\n }\n function drawBackgroundImage(group, box, img_width, img_height, renderBG) {\n var aspect_ratio = img_width / img_height, f;\n var orgBox = box;\n if (backgroundOrigin == 'content-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n orgBox = innerBox(orgBox, 'padding-*', element);\n } else if (backgroundOrigin == 'padding-box') {\n orgBox = innerBox(orgBox, 'border-*-width', element);\n }\n if (!/^\\s*auto(\\s+auto)?\\s*$/.test(backgroundSize)) {\n if (backgroundSize == 'contain') {\n f = Math.min(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else if (backgroundSize == 'cover') {\n f = Math.max(orgBox.width / img_width, orgBox.height / img_height);\n img_width *= f;\n img_height *= f;\n } else {\n var size = backgroundSize.split(/\\s+/g);\n if (/%$/.test(size[0])) {\n img_width = orgBox.width * parseFloat(size[0]) / 100;\n } else {\n img_width = parseFloat(size[0]);\n }\n if (size.length == 1 || size[1] == 'auto') {\n img_height = img_width / aspect_ratio;\n } else if (/%$/.test(size[1])) {\n img_height = orgBox.height * parseFloat(size[1]) / 100;\n } else {\n img_height = parseFloat(size[1]);\n }\n }\n }\n var pos = String(backgroundPosition);\n switch (pos) {\n case 'bottom':\n pos = '50% 100%';\n break;\n case 'top':\n pos = '50% 0';\n break;\n case 'left':\n pos = '0 50%';\n break;\n case 'right':\n pos = '100% 50%';\n break;\n case 'center':\n pos = '50% 50%';\n break;\n }\n pos = pos.split(/\\s+/);\n if (pos.length == 1) {\n pos[1] = '50%';\n }\n if (/%$/.test(pos[0])) {\n pos[0] = parseFloat(pos[0]) / 100 * (orgBox.width - img_width);\n } else {\n pos[0] = parseFloat(pos[0]);\n }\n if (/%$/.test(pos[1])) {\n pos[1] = parseFloat(pos[1]) / 100 * (orgBox.height - img_height);\n } else {\n pos[1] = parseFloat(pos[1]);\n }\n var rect = new Rect([\n orgBox.left + pos[0],\n orgBox.top + pos[1]\n ], [\n img_width,\n img_height\n ]);\n function rewX() {\n while (rect.origin.x > box.left) {\n rect.origin.x -= img_width;\n }\n }\n function rewY() {\n while (rect.origin.y > box.top) {\n rect.origin.y -= img_height;\n }\n }\n function repeatX() {\n while (rect.origin.x < box.right) {\n renderBG(group, rect.clone());\n rect.origin.x += img_width;\n }\n }\n if (backgroundRepeat == 'no-repeat') {\n renderBG(group, rect);\n } else if (backgroundRepeat == 'repeat-x') {\n rewX();\n repeatX();\n } else if (backgroundRepeat == 'repeat-y') {\n rewY();\n while (rect.origin.y < box.bottom) {\n renderBG(group, rect.clone());\n rect.origin.y += img_height;\n }\n } else if (backgroundRepeat == 'repeat') {\n rewX();\n rewY();\n var origin = rect.origin.clone();\n while (rect.origin.y < box.bottom) {\n rect.origin.x = origin.x;\n repeatX();\n rect.origin.y += img_height;\n }\n }\n }\n }\n function drawBullet() {\n var listStyleType = getPropertyValue(style, 'list-style-type');\n if (listStyleType == 'none') {\n return;\n }\n var listStylePosition = getPropertyValue(style, 'list-style-position');\n function _drawBullet(f) {\n saveStyle(element, function () {\n element.style.position = 'relative';\n var bullet = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n bullet.style.position = 'absolute';\n bullet.style.boxSizing = 'border-box';\n if (listStylePosition == 'outside') {\n bullet.style.width = '6em';\n bullet.style.left = '-6.8em';\n bullet.style.textAlign = 'right';\n } else {\n bullet.style.left = '0px';\n }\n f(bullet);\n element.insertBefore(bullet, element.firstChild);\n renderElement(bullet, group);\n element.removeChild(bullet);\n });\n }\n function elementIndex(f) {\n var a = element.parentNode.children;\n var k = element.getAttribute('kendo-split-index');\n if (k != null) {\n return f(k | 0, a.length);\n }\n for (var i = 0; i < a.length; ++i) {\n if (a[i] === element) {\n return f(i, a.length);\n }\n }\n }\n switch (listStyleType) {\n case 'circle':\n case 'disc':\n case 'square':\n _drawBullet(function (bullet) {\n bullet.style.fontSize = '60%';\n bullet.style.lineHeight = '200%';\n bullet.style.paddingRight = '0.5em';\n bullet.style.fontFamily = 'DejaVu Serif';\n bullet.innerHTML = {\n 'disc': '\\u25CF',\n 'circle': '\\u25EF',\n 'square': '\\u25A0'\n }[listStyleType];\n });\n break;\n case 'decimal':\n case 'decimal-leading-zero':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n ++idx;\n if (listStyleType == 'decimal-leading-zero' && idx < 10) {\n idx = '0' + idx;\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-roman':\n case 'upper-roman':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = arabicToRoman(idx + 1);\n if (listStyleType == 'upper-roman') {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n case 'lower-latin':\n case 'lower-alpha':\n case 'upper-latin':\n case 'upper-alpha':\n _drawBullet(function (bullet) {\n elementIndex(function (idx) {\n idx = alphaNumeral(idx);\n if (/^upper/i.test(listStyleType)) {\n idx = idx.toUpperCase();\n }\n bullet.innerHTML = idx + '.';\n });\n });\n break;\n }\n }\n function drawOneBox(box, isFirst, isLast) {\n if (box.width === 0 || box.height === 0) {\n return;\n }\n drawBackground(box);\n var shouldDrawLeft = left.width > 0 && (isFirst && dir == 'ltr' || isLast && dir == 'rtl');\n var shouldDrawRight = right.width > 0 && (isLast && dir == 'ltr' || isFirst && dir == 'rtl');\n if (top.width === 0 && left.width === 0 && right.width === 0 && bottom.width === 0) {\n return;\n }\n if (top.color == right.color && top.color == bottom.color && top.color == left.color) {\n if (top.width == right.width && top.width == bottom.width && top.width == left.width) {\n if (shouldDrawLeft && shouldDrawRight) {\n box = innerBox(box, top.width / 2);\n var path = elementRoundBox(element, box, top.width / 2);\n path.options.stroke = {\n color: top.color,\n width: top.width\n };\n group.append(path);\n return;\n }\n }\n }\n if (rTL0.x === 0 && rTR0.x === 0 && rBR0.x === 0 && rBL0.x === 0) {\n if (top.width < 2 && left.width < 2 && right.width < 2 && bottom.width < 2) {\n if (top.width > 0) {\n group.append(new Path({\n stroke: {\n width: top.width,\n color: top.color\n }\n }).moveTo(box.left, box.top + top.width / 2).lineTo(box.right, box.top + top.width / 2));\n }\n if (bottom.width > 0) {\n group.append(new Path({\n stroke: {\n width: bottom.width,\n color: bottom.color\n }\n }).moveTo(box.left, box.bottom - bottom.width / 2).lineTo(box.right, box.bottom - bottom.width / 2));\n }\n if (shouldDrawLeft) {\n group.append(new Path({\n stroke: {\n width: left.width,\n color: left.color\n }\n }).moveTo(box.left + left.width / 2, box.top).lineTo(box.left + left.width / 2, box.bottom));\n }\n if (shouldDrawRight) {\n group.append(new Path({\n stroke: {\n width: right.width,\n color: right.color\n }\n }).moveTo(box.right - right.width / 2, box.top).lineTo(box.right - right.width / 2, box.bottom));\n }\n return;\n }\n }\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n drawEdge(top.color, box.width, top.width, left.width, right.width, rTL, rTR, [\n 1,\n 0,\n 0,\n 1,\n box.left,\n box.top\n ]);\n drawEdge(bottom.color, box.width, bottom.width, right.width, left.width, rBR, rBL, [\n -1,\n 0,\n 0,\n -1,\n box.right,\n box.bottom\n ]);\n function inv(p) {\n return {\n x: p.y,\n y: p.x\n };\n }\n drawEdge(left.color, box.height, left.width, bottom.width, top.width, inv(rBL), inv(rTL), [\n 0,\n -1,\n 1,\n 0,\n box.left,\n box.bottom\n ]);\n drawEdge(right.color, box.height, right.width, top.width, bottom.width, inv(rTR), inv(rBR), [\n 0,\n 1,\n -1,\n 0,\n box.right,\n box.top\n ]);\n }\n }\n function gradientRenderer(gradient) {\n return function (group, rect) {\n var width = rect.width(), height = rect.height();\n switch (gradient.type) {\n case 'linear':\n var angle = gradient.angle != null ? gradient.angle : Math.PI;\n switch (gradient.to) {\n case 'top':\n angle = 0;\n break;\n case 'left':\n angle = -Math.PI / 2;\n break;\n case 'bottom':\n angle = Math.PI;\n break;\n case 'right':\n angle = Math.PI / 2;\n break;\n case 'top left':\n case 'left top':\n angle = -Math.atan2(height, width);\n break;\n case 'top right':\n case 'right top':\n angle = Math.atan2(height, width);\n break;\n case 'bottom left':\n case 'left bottom':\n angle = Math.PI + Math.atan2(height, width);\n break;\n case 'bottom right':\n case 'right bottom':\n angle = Math.PI - Math.atan2(height, width);\n break;\n }\n if (gradient.reverse) {\n angle -= Math.PI;\n }\n angle %= 2 * Math.PI;\n if (angle < 0) {\n angle += 2 * Math.PI;\n }\n var pxlen = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n var scaledAngle = Math.atan(width * Math.tan(angle) / height);\n var sin = Math.sin(scaledAngle), cos = Math.cos(scaledAngle);\n var len = Math.abs(sin) + Math.abs(cos);\n var x = len / 2 * sin;\n var y = len / 2 * cos;\n if (angle > Math.PI / 2 && angle <= 3 * Math.PI / 2) {\n x = -x;\n y = -y;\n }\n var implicit = [], right = 0;\n var stops = gradient.stops.map(function (s, i) {\n var offset = s.percent;\n if (offset) {\n offset = parseFloat(offset) / 100;\n } else if (s.length) {\n offset = parseFloat(s.length) / pxlen;\n } else if (i === 0) {\n offset = 0;\n } else if (i == gradient.stops.length - 1) {\n offset = 1;\n }\n var stop = {\n color: s.color.toCssRgba(),\n offset: offset\n };\n if (offset != null) {\n right = offset;\n implicit.forEach(function (s, i) {\n var stop = s.stop;\n stop.offset = s.left + (right - s.left) * (i + 1) / (implicit.length + 1);\n });\n implicit = [];\n } else {\n implicit.push({\n left: right,\n stop: stop\n });\n }\n return stop;\n });\n var start = [\n 0.5 - x,\n 0.5 + y\n ];\n var end = [\n 0.5 + x,\n 0.5 - y\n ];\n group.append(Path.fromRect(rect).stroke(null).fill(new LinearGradient({\n start: start,\n end: end,\n stops: stops,\n userSpace: false\n })));\n break;\n case 'radial':\n if (window.console && window.console.log) {\n window.console.log('Radial gradients are not yet supported in HTML renderer');\n }\n break;\n }\n };\n }\n function maybeRenderWidget(element, group) {\n var visual;\n if (element._kendoExportVisual) {\n visual = element._kendoExportVisual();\n } else if (window.kendo && window.kendo.jQuery && element.getAttribute(window.kendo.attr('role'))) {\n var widget = window.kendo.widgetInstance(window.kendo.jQuery(element));\n if (widget && (widget.exportDOMVisual || widget.exportVisual)) {\n if (widget.exportDOMVisual) {\n visual = widget.exportDOMVisual();\n } else {\n visual = widget.exportVisual();\n }\n }\n }\n if (!visual) {\n return false;\n }\n var wrap$$1 = new Group();\n wrap$$1.children.push(visual);\n var bbox = element.getBoundingClientRect();\n wrap$$1.transform(transform().translate(bbox.left, bbox.top));\n group.append(wrap$$1);\n return true;\n }\n function renderImage(element, url, group) {\n var box = getContentBox(element);\n var rect = new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]);\n var image = new Image$1(url, rect);\n setClipping(image, elementRoundBox(element, box, 'content'));\n group.append(image);\n }\n function zIndexSort(a, b) {\n var sa = getComputedStyle$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$1(new Circle([\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$1(new Circle([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 8, box.height - 8) / 2)).fill(color).stroke(null));\n }\n }\n }\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == 'input' && (element.type == 'checkbox' || element.type == 'radio')) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle$1(element));\n if (tag == 'input') {\n el.style.whiteSpace = 'pre';\n }\n if (tag == 'select' || tag == 'textarea') {\n el.style.overflow = 'auto';\n }\n if (tag == 'select') {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle$1(element.options[i]));\n option.style.display = 'block';\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n element.style.display = 'none';\n renderContents(el, group);\n element.style.display = '';\n p.removeChild(el);\n }\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case 'img':\n renderImage(element, element.src, group);\n break;\n case 'canvas':\n try {\n renderImage(element, element.toDataURL('image/png'), group);\n } catch (ex) {\n }\n break;\n case 'textarea':\n case 'input':\n case 'select':\n renderFormField(element, group);\n break;\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3:\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1:\n var style = getComputedStyle$1(i);\n var floating = getPropertyValue(style, 'float');\n var position = getPropertyValue(style, 'position');\n if (position != 'static') {\n positioned.push(i);\n } else if (floating != 'none') {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n mergeSort(children, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(floats, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(positioned, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n }\n }\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle$1(element);\n if (parseFloat(getPropertyValue(style, 'text-indent')) < -500) {\n return;\n }\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n if (!end) {\n return;\n }\n var fontSize = getPropertyValue(style, 'font-size');\n var lineHeight = getPropertyValue(style, 'line-height');\n var font = [\n getPropertyValue(style, 'font-style'),\n getPropertyValue(style, 'font-variant'),\n getPropertyValue(style, 'font-weight'),\n fontSize,\n getPropertyValue(style, 'font-family')\n ].join(' ');\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n if (fontSize === 0) {\n return;\n }\n var color = getPropertyValue(style, 'color');\n var range = element.ownerDocument.createRange();\n var align$$1 = getPropertyValue(style, 'text-align');\n var isJustified = align$$1 == 'justify';\n var columnCount = getPropertyValue(style, 'column-count', 1);\n var whiteSpace = getPropertyValue(style, 'white-space');\n var textTransform = getPropertyValue(style, 'text-transform');\n var estimateLineLength = element.getBoundingClientRect().width / fontSize * 5;\n if (estimateLineLength === 0) {\n estimateLineLength = 500;\n }\n var prevLineBottom = null;\n var underline = nodeInfo['underline'];\n var lineThrough = nodeInfo['line-through'];\n var overline = nodeInfo['overline'];\n var hasDecoration = underline || lineThrough || overline;\n while (!doChunk()) {\n }\n if (hasDecoration) {\n range.selectNode(node);\n slice$1(range.getClientRects()).forEach(decorate);\n }\n return;\n function actuallyGetRangeBoundingRect(range) {\n if (microsoft || browser.chrome) {\n var rectangles = range.getClientRects(), box = {\n top: Infinity,\n right: -Infinity,\n bottom: -Infinity,\n left: Infinity\n }, done = false;\n for (var i = 0; i < rectangles.length; ++i) {\n var b = rectangles[i];\n if (b.width <= 1 || b.bottom === prevLineBottom) {\n continue;\n }\n box.left = Math.min(b.left, box.left);\n box.top = Math.min(b.top, box.top);\n box.right = Math.max(b.right, box.right);\n box.bottom = Math.max(b.bottom, box.bottom);\n done = true;\n }\n if (!done) {\n return range.getBoundingClientRect();\n }\n box.width = box.right - box.left;\n box.height = box.bottom - box.top;\n return box;\n }\n return range.getBoundingClientRect();\n }\n function doChunk() {\n var origStart = start;\n var box, pos = text.substr(start).search(/\\S/);\n start += pos;\n if (pos < 0 || start >= end) {\n return true;\n }\n range.setStart(node, start);\n range.setEnd(node, start + 1);\n box = actuallyGetRangeBoundingRect(range);\n var found = false;\n if (isJustified || columnCount > 1) {\n pos = text.substr(start).search(/\\s/);\n if (pos >= 0) {\n range.setEnd(node, start + pos);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom == box.bottom) {\n box = r;\n found = true;\n start += pos;\n }\n }\n }\n if (!found) {\n pos = function findEOL(min, eol, max) {\n range.setEnd(node, eol);\n var r = actuallyGetRangeBoundingRect(range);\n if (r.bottom != box.bottom && min < eol) {\n return findEOL(min, min + eol >> 1, eol);\n } else if (r.right != box.right) {\n box = r;\n if (eol < max) {\n return findEOL(eol, eol + max >> 1, max);\n } else {\n return eol;\n }\n } else {\n return eol;\n }\n }(start, Math.min(end, start + estimateLineLength), end);\n if (pos == start) {\n return true;\n }\n start = pos;\n pos = range.toString().search(/\\s+$/);\n if (pos === 0) {\n return false;\n }\n if (pos > 0) {\n range.setEnd(node, range.startOffset + pos);\n box = actuallyGetRangeBoundingRect(range);\n }\n }\n if (microsoft) {\n box = range.getClientRects()[0];\n }\n var str = range.toString();\n if (!/^(?:pre|pre-wrap)$/i.test(whiteSpace)) {\n str = str.replace(/\\s+/g, ' ');\n } else if (/\\t/.test(str)) {\n var cc = 0;\n for (pos = origStart; pos < range.startOffset; ++pos) {\n var code = text.charCodeAt(pos);\n if (code == 9) {\n cc += 8 - cc % 8;\n } else if (code == 10 || code == 13) {\n cc = 0;\n } else {\n cc++;\n }\n }\n while ((pos = str.search('\\t')) >= 0) {\n var indent = ' '.substr(0, 8 - (cc + pos) % 8);\n str = str.substr(0, pos) + indent + str.substr(pos + 1);\n }\n }\n if (!found) {\n prevLineBottom = box.bottom;\n }\n drawText(str, box);\n }\n function drawText(str, box) {\n if (microsoft && !isNaN(lineHeight)) {\n var height = getFontHeight(font);\n var top = (box.top + box.bottom - height) / 2;\n box = {\n top: top,\n right: box.right,\n bottom: top + height,\n left: box.left,\n height: height,\n width: box.right - box.left\n };\n }\n switch (textTransform) {\n case 'uppercase':\n str = str.toUpperCase();\n break;\n case 'lowercase':\n str = str.toLowerCase();\n break;\n case 'capitalize':\n str = str.replace(/(?:^|\\s)\\S/g, function (l) {\n return l.toUpperCase();\n });\n break;\n }\n var text = new TextRect(str, new Rect([\n box.left,\n box.top\n ], [\n box.width,\n box.height\n ]), {\n font: font,\n fill: { color: color }\n });\n group.append(text);\n }\n function decorate(box) {\n line(underline, box.bottom);\n line(lineThrough, box.bottom - box.height / 2.7);\n line(overline, box.top);\n function line(color, ypos) {\n if (color) {\n var width = fontSize / 12;\n var path = new Path({\n stroke: {\n width: width,\n color: color\n }\n });\n ypos -= width;\n path.moveTo(box.left, ypos).lineTo(box.right, ypos);\n group.append(path);\n }\n }\n }\n }\n function groupInStackingContext(element, group, zIndex) {\n var main;\n if (zIndex != 'auto') {\n main = nodeInfo._stackingContext.group;\n zIndex = parseFloat(zIndex);\n } else {\n main = group;\n zIndex = 0;\n }\n var a = main.children;\n for (var i = 0; i < a.length; ++i) {\n if (a[i]._dom_zIndex != null && a[i]._dom_zIndex > zIndex) {\n break;\n }\n }\n var tmp = new Group();\n main.insert(i, tmp);\n tmp._dom_zIndex = zIndex;\n if (main !== group) {\n if (nodeInfo._clipbox) {\n var m = nodeInfo._matrix.invert();\n var r = nodeInfo._clipbox.transformCopy(m);\n setClipping(tmp, Path.fromRect(r));\n }\n }\n return tmp;\n }\n function renderElement(element, container) {\n var style = getComputedStyle$1(element);\n updateCounters(style);\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n if (nodeInfo._clipbox == null) {\n return;\n }\n var opacity = parseFloat(getPropertyValue(style, 'opacity'));\n var visibility = getPropertyValue(style, 'visibility');\n var display = getPropertyValue(style, 'display');\n if (opacity === 0 || visibility == 'hidden' || display == 'none') {\n return;\n }\n var tr = getTransform(style);\n var group;\n var zIndex = getPropertyValue(style, 'z-index');\n if ((tr || opacity < 1) && zIndex == 'auto') {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n pushNodeInfo(element, style, group);\n if (!tr) {\n _renderWithPseudoElements(element, group);\n } else {\n saveStyle(element, function () {\n pleaseSetPropertyValue(element.style, 'transform', 'none', 'important');\n pleaseSetPropertyValue(element.style, 'transition', 'none', 'important');\n if (getPropertyValue(style, 'position') == 'static') {\n pleaseSetPropertyValue(element.style, 'position', 'relative', 'important');\n }\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [\n 1,\n 0,\n 0,\n 1,\n -x,\n -y\n ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [\n 1,\n 0,\n 0,\n 1,\n x,\n y\n ]);\n m = setTransform(group, m);\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfo();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle$1,\n Arc: Arc$2,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '
    ' + '
    ' + '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = '';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n 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 = drawDOM.drawText;\n drawing.drawDOM.getFontFaces = drawDOM.getFontFaces;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.drawing', [\n 'drawing/util',\n 'drawing/kendo-drawing',\n 'drawing/surface-tooltip',\n 'drawing/surface',\n 'drawing/html'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'drawing',\n name: 'Drawing API',\n category: 'framework',\n description: 'The Kendo UI low-level drawing API',\n depends: [\n 'core',\n 'color',\n 'popup'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/kendo-core', [\n 'kendo.core',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var drawing = kendo.drawing;\n var util = drawing.util;\n var Path = drawing.Path;\n var Group = drawing.Group;\n var Class = kendo.Class;\n var geometry = kendo.geometry;\n var Rect = geometry.Rect;\n var Circle = geometry.Circle;\n var geometryTransform = geometry.transform;\n var Segment = geometry.Segment;\n var dataviz = kendo.dataviz;\n var deepExtend = kendo.deepExtend;\n var isFunction = kendo.isFunction;\n var __common_getter_js = kendo.getter;\n var ARC = 'arc';\n var AXIS_LABEL_CLICK = 'axisLabelClick';\n var BLACK = '#000';\n var BOTTOM = 'bottom';\n var CENTER = 'center';\n var CIRCLE = 'circle';\n var COORD_PRECISION = 3;\n var CROSS = 'cross';\n var DATE = 'date';\n var DEFAULT_FONT = '12px sans-serif';\n var DEFAULT_HEIGHT = 400;\n var DEFAULT_PRECISION = 10;\n var DEFAULT_WIDTH = 600;\n var END = 'end';\n var FORMAT_REGEX = /\\{\\d+:?/;\n var HEIGHT = 'height';\n var HIGHLIGHT_ZINDEX = 100;\n var INSIDE = 'inside';\n var LEFT = 'left';\n var MAX_VALUE = Number.MAX_VALUE;\n var MIN_VALUE = -Number.MAX_VALUE;\n var NONE = 'none';\n var NOTE_CLICK = 'noteClick';\n var NOTE_HOVER = 'noteHover';\n var NOTE_LEAVE = 'noteLeave';\n var OBJECT = 'object';\n var OUTSIDE = 'outside';\n var RIGHT = 'right';\n var START = 'start';\n var STRING = 'string';\n var TOP = 'top';\n var TRIANGLE = 'triangle';\n var VALUE = 'value';\n var WHITE = '#fff';\n var WIDTH = 'width';\n var X = 'x';\n var Y = 'y';\n var constants = {\n ARC: ARC,\n AXIS_LABEL_CLICK: AXIS_LABEL_CLICK,\n BLACK: BLACK,\n BOTTOM: BOTTOM,\n CENTER: CENTER,\n CIRCLE: CIRCLE,\n COORD_PRECISION: COORD_PRECISION,\n CROSS: CROSS,\n DATE: DATE,\n DEFAULT_FONT: DEFAULT_FONT,\n DEFAULT_HEIGHT: DEFAULT_HEIGHT,\n DEFAULT_PRECISION: DEFAULT_PRECISION,\n DEFAULT_WIDTH: DEFAULT_WIDTH,\n END: END,\n FORMAT_REGEX: FORMAT_REGEX,\n HEIGHT: HEIGHT,\n HIGHLIGHT_ZINDEX: HIGHLIGHT_ZINDEX,\n INSIDE: INSIDE,\n LEFT: LEFT,\n MAX_VALUE: MAX_VALUE,\n MIN_VALUE: MIN_VALUE,\n NONE: NONE,\n NOTE_CLICK: NOTE_CLICK,\n NOTE_HOVER: NOTE_HOVER,\n NOTE_LEAVE: NOTE_LEAVE,\n OBJECT: OBJECT,\n OUTSIDE: OUTSIDE,\n RIGHT: RIGHT,\n START: START,\n STRING: STRING,\n TOP: TOP,\n TRIANGLE: TRIANGLE,\n VALUE: VALUE,\n WHITE: WHITE,\n WIDTH: WIDTH,\n X: X,\n Y: Y\n };\n function isArray(value) {\n return Array.isArray(value);\n }\n function addClass(element, classes) {\n var classArray = isArray(classes) ? classes : [classes];\n for (var idx = 0; idx < classArray.length; idx++) {\n var className = classArray[idx];\n if (element.className.indexOf(className) === -1) {\n element.className += ' ' + className;\n }\n }\n }\n var SPACE_REGEX = /\\s+/g;\n function removeClass(element, className) {\n if (element && element.className) {\n element.className = element.className.replace(className, '').replace(SPACE_REGEX, ' ');\n }\n }\n function alignPathToPixel(path) {\n var offset = 0.5;\n if (path.options.stroke && kendo.drawing.util.defined(path.options.stroke.width)) {\n if (path.options.stroke.width % 2 === 0) {\n offset = 0;\n }\n }\n for (var i = 0; i < path.segments.length; i++) {\n path.segments[i].anchor().round(0).translate(offset, offset);\n }\n return path;\n }\n function clockwise(angle1, angle2) {\n return -angle1.x * angle2.y + angle1.y * angle2.x < 0;\n }\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n function isString(value) {\n return typeof value === STRING;\n }\n function convertableToNumber(value) {\n return isNumber(value) || isString(value) && isFinite(value);\n }\n function isObject(value) {\n return typeof value === 'object';\n }\n function styleValue(value) {\n if (isNumber(value)) {\n return value + 'px';\n }\n return value;\n }\n var SIZE_STYLES_REGEX = /width|height|top|left|bottom|right/i;\n function isSizeField(field) {\n return SIZE_STYLES_REGEX.test(field);\n }\n function elementStyles(element, styles) {\n var stylesArray = isString(styles) ? [styles] : styles;\n if (isArray(stylesArray)) {\n var result = {};\n var style = window.getComputedStyle(element);\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = isSizeField(field) ? parseFloat(style[field]) : style[field];\n }\n return result;\n } else if (isObject(styles)) {\n for (var field$1 in styles) {\n element.style[field$1] = styleValue(styles[field$1]);\n }\n }\n }\n function getSpacing(value, defaultSpacing) {\n if (defaultSpacing === void 0) {\n defaultSpacing = 0;\n }\n var spacing = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n if (typeof value === 'number') {\n spacing[TOP] = spacing[RIGHT] = spacing[BOTTOM] = spacing[LEFT] = value;\n } else {\n spacing[TOP] = value[TOP] || defaultSpacing;\n spacing[RIGHT] = value[RIGHT] || defaultSpacing;\n spacing[BOTTOM] = value[BOTTOM] || defaultSpacing;\n spacing[LEFT] = value[LEFT] || defaultSpacing;\n }\n return spacing;\n }\n var defaultImplementation = {\n format: function (format, value) {\n return value;\n },\n toString: function (value) {\n return value;\n },\n parseDate: function (value) {\n return new Date(value);\n },\n firstDay: function () {\n return 0;\n }\n };\n var current = defaultImplementation;\n var IntlService = Class.extend({});\n IntlService.register = function (userImplementation) {\n current = userImplementation;\n };\n if (Object.defineProperties) {\n Object.defineProperties(IntlService, {\n implementation: {\n get: function () {\n return current;\n }\n }\n });\n }\n var FORMAT_REPLACE_REGEX = /\\{(\\d+)(:[^\\}]+)?\\}/g;\n var FormatService = Class.extend({\n init: function (intlService) {\n this._intlService = intlService;\n },\n auto: function (formatString) {\n var values = [], len = arguments.length - 1;\n while (len-- > 0)\n values[len] = arguments[len + 1];\n var intl = this.intl;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n return intl.format.apply(intl, [formatString].concat(values));\n }\n return intl.toString(values[0], formatString);\n },\n localeAuto: function (formatString, values, locale) {\n var intl = this.intl;\n var result;\n if (isString(formatString) && formatString.match(FORMAT_REGEX)) {\n result = formatString.replace(FORMAT_REPLACE_REGEX, function (match, index, placeholderFormat) {\n var value = values[parseInt(index, 10)];\n return intl.toString(value, placeholderFormat ? placeholderFormat.substring(1) : '', locale);\n });\n } else {\n result = intl.toString(values[0], formatString, locale);\n }\n return result;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(FormatService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\n }\n }\n });\n }\n var ChartService = Class.extend({\n init: function (chart, context) {\n if (context === void 0) {\n context = {};\n }\n this._intlService = context.intlService;\n this.sender = context.sender || chart;\n this.format = new FormatService(context.intlService);\n this.chart = chart;\n this.rtl = Boolean(context.rtl);\n },\n notify: function (name, args) {\n if (this.chart) {\n this.chart.trigger(name, args);\n }\n },\n isPannable: function (axis) {\n var pannable = ((this.chart || {}).options || {}).pannable;\n return pannable && pannable.lock !== axis;\n }\n });\n if (Object.defineProperties) {\n Object.defineProperties(ChartService.fn, {\n intl: {\n get: function () {\n return this._intlService || IntlService.implementation;\n },\n set: function (value) {\n this._intlService = value;\n this.format.intl = value;\n }\n }\n });\n }\n var current$1;\n var DomEventsBuilder = Class.extend({});\n DomEventsBuilder.register = function (userImplementation) {\n current$1 = userImplementation;\n };\n DomEventsBuilder.create = function (element, events) {\n if (current$1) {\n return current$1.create(element, events);\n }\n };\n var current$2 = {\n compile: function (template) {\n return template;\n }\n };\n var TemplateService = Class.extend({});\n TemplateService.register = function (userImplementation) {\n current$2 = userImplementation;\n };\n TemplateService.compile = function (template) {\n return current$2.compile(template);\n };\n var services = {\n ChartService: ChartService,\n DomEventsBuilder: DomEventsBuilder,\n FormatService: FormatService,\n IntlService: IntlService,\n TemplateService: TemplateService\n };\n function getTemplate(options) {\n if (options === void 0) {\n options = {};\n }\n var template;\n if (options.template) {\n options.template = template = TemplateService.compile(options.template);\n } else if (isFunction(options.content)) {\n template = options.content;\n }\n return template;\n }\n function grep(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (callback(array[idx])) {\n result.push(array[idx]);\n }\n }\n return result;\n }\n function hasClasses(element, classNames) {\n if (element.className) {\n var names = classNames.split(' ');\n for (var idx = 0; idx < names.length; idx++) {\n if (element.className.indexOf(names[idx]) !== -1) {\n return true;\n }\n }\n }\n }\n var HashMap = function HashMap() {\n this._map = {};\n };\n HashMap.prototype.get = function get(name) {\n return this._map[this._key(name)];\n };\n HashMap.prototype.set = function set(name, value) {\n this._map[this._key(name)] = value;\n };\n HashMap.prototype._key = function _key(name) {\n return name instanceof Date ? name.getTime() : name;\n };\n function inArray(value, array) {\n if (array) {\n return array.indexOf(value) !== -1;\n }\n }\n function interpolateValue(start, end, progress) {\n return kendo.drawing.util.round(start + (end - start) * progress, COORD_PRECISION);\n }\n var TRIGGER = 'trigger';\n var InstanceObserver = Class.extend({\n init: function (observer, handlers) {\n this.observer = observer;\n this.handlerMap = deepExtend({}, this.handlerMap, handlers);\n },\n trigger: function (name, args) {\n var ref = this;\n var observer = ref.observer;\n var handlerMap = ref.handlerMap;\n var isDefaultPrevented;\n if (handlerMap[name]) {\n isDefaultPrevented = this.callObserver(handlerMap[name], args);\n } else if (observer[TRIGGER]) {\n isDefaultPrevented = this.callObserver(TRIGGER, name, args);\n }\n return isDefaultPrevented;\n },\n callObserver: function (fnName) {\n var args = [], len = arguments.length - 1;\n while (len-- > 0)\n args[len] = arguments[len + 1];\n return this.observer[fnName].apply(this.observer, args);\n },\n requiresHandlers: function (names) {\n var this$1 = this;\n if (this.observer.requiresHandlers) {\n return this.observer.requiresHandlers(names);\n }\n for (var idx = 0; idx < names.length; idx++) {\n if (this$1.handlerMap[names[idx]]) {\n return true;\n }\n }\n }\n });\n function map(array, callback) {\n var length = array.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n var value = callback(array[idx]);\n if (kendo.drawing.util.defined(value)) {\n result.push(value);\n }\n }\n return result;\n }\n function mousewheelDelta(e) {\n var delta = 0;\n if (e.wheelDelta) {\n delta = -e.wheelDelta / 120;\n delta = delta > 0 ? Math.ceil(delta) : Math.floor(delta);\n }\n if (e.detail) {\n delta = kendo.drawing.util.round(e.detail / 3);\n }\n return delta;\n }\n var ref = kendo.drawing.util;\n var append = ref.append;\n var bindEvents = ref.bindEvents;\n var defined = ref.defined;\n var deg = ref.deg;\n var elementOffset = ref.elementOffset;\n var elementSize = ref.elementSize;\n var eventElement = ref.eventElement;\n var eventCoordinates = ref.eventCoordinates;\n var last = ref.last;\n var limitValue = ref.limitValue;\n var objectKey = ref.objectKey;\n var rad = ref.rad;\n var round = ref.round;\n var unbindEvents = ref.unbindEvents;\n var valueOrDefault = ref.valueOrDefault;\n var FontLoader = Class.extend({});\n FontLoader.fetchFonts = function (options, fonts, state) {\n if (state === void 0) {\n state = { depth: 0 };\n }\n var MAX_DEPTH = 5;\n if (!options || state.depth > MAX_DEPTH || !document.fonts) {\n return;\n }\n Object.keys(options).forEach(function (key) {\n var value = options[key];\n if (key === 'dataSource' || key[0] === '$' || !value) {\n return;\n }\n if (key === 'font') {\n fonts.push(value);\n } else if (typeof value === 'object') {\n state.depth++;\n FontLoader.fetchFonts(value, fonts, state);\n state.depth--;\n }\n });\n };\n FontLoader.loadFonts = function (fonts, callback) {\n var promises = [];\n if (fonts.length > 0 && document.fonts) {\n try {\n promises = fonts.map(function (font) {\n return document.fonts.load(font);\n });\n } catch (e) {\n kendo.logToConsole(e);\n }\n Promise.all(promises).then(callback, callback);\n } else {\n callback();\n }\n };\n FontLoader.preloadFonts = function (options, callback) {\n var fonts = [];\n FontLoader.fetchFonts(options, fonts);\n FontLoader.loadFonts(fonts, callback);\n };\n function setDefaultOptions(type, options) {\n var proto = type.prototype;\n if (proto.options) {\n proto.options = deepExtend({}, proto.options, options);\n } else {\n proto.options = options;\n }\n }\n function sparseArrayLimits(arr) {\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var idx = 0, length = arr.length; idx < length; idx++) {\n var value = arr[idx];\n if (value !== null && isFinite(value)) {\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n return {\n min: min === MAX_VALUE ? undefined : min,\n max: max === MIN_VALUE ? undefined : max\n };\n }\n function find(array, predicate) {\n for (var i = 0; i < array.length; i++) {\n var item = array[i];\n if (predicate(item, i, array)) {\n return item;\n }\n }\n }\n var Matrix = geometry.Matrix;\n var matrixRegexp = /matrix\\((.*)\\)/;\n function parseMatrix(matrixString) {\n var match = matrixString.match(matrixRegexp);\n if (match === null || match.length !== 2) {\n return Matrix.unit();\n }\n var members = match[1].split(',').map(function (x) {\n return parseFloat(x);\n });\n return new (Function.prototype.bind.apply(Matrix, [null].concat(members)))();\n }\n function transformMatrix(element) {\n var transform = getComputedStyle(element).transform;\n if (transform === 'none') {\n return Matrix.unit();\n }\n return parseMatrix(transform);\n }\n function elementScale(element) {\n if (!element) {\n return Matrix.unit();\n }\n var matrix = transformMatrix(element);\n var parent = element.parentElement;\n while (parent) {\n var parentMatrix = transformMatrix(parent);\n matrix = matrix.multiplyCopy(parentMatrix);\n parent = parent.parentElement;\n }\n matrix.b = matrix.c = matrix.e = matrix.f = 0;\n return matrix;\n }\n function autoMajorUnit(min, max) {\n var diff = round(max - min, DEFAULT_PRECISION - 1);\n if (diff === 0) {\n if (max === 0) {\n return 0.1;\n }\n diff = Math.abs(max);\n }\n var scale = Math.pow(10, Math.floor(Math.log(diff) / Math.log(10)));\n var relativeValue = round(diff / scale, DEFAULT_PRECISION);\n var scaleMultiplier = 1;\n if (relativeValue < 1.904762) {\n scaleMultiplier = 0.2;\n } else if (relativeValue < 4.761904) {\n scaleMultiplier = 0.5;\n } else if (relativeValue < 9.523809) {\n scaleMultiplier = 1;\n } else {\n scaleMultiplier = 2;\n }\n return round(scale * scaleMultiplier, DEFAULT_PRECISION);\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n equals: function (point) {\n return point && this.x === point.x && this.y === point.y;\n },\n rotate: function (center, degrees) {\n var theta = rad(degrees);\n var cosT = Math.cos(theta);\n var sinT = Math.sin(theta);\n var cx = center.x;\n var cy = center.y;\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = round(cx + (x - cx) * cosT + (y - cy) * sinT, COORD_PRECISION);\n this.y = round(cy + (y - cy) * cosT - (x - cx) * sinT, COORD_PRECISION);\n return this;\n },\n multiply: function (a) {\n this.x *= a;\n this.y *= a;\n return this;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n });\n Point.onCircle = function (center, angle, radius) {\n var radians = rad(angle);\n return new Point(center.x - radius * Math.cos(radians), center.y - radius * Math.sin(radians));\n };\n var Box = Class.extend({\n init: function (x1, y1, x2, y2) {\n this.x1 = x1 || 0;\n this.y1 = y1 || 0;\n this.x2 = x2 || 0;\n this.y2 = y2 || 0;\n },\n equals: function (box) {\n return this.x1 === box.x1 && this.x2 === box.x2 && this.y1 === box.y1 && this.y2 === box.y2;\n },\n width: function () {\n return this.x2 - this.x1;\n },\n height: function () {\n return this.y2 - this.y1;\n },\n translate: function (dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n },\n move: function (x, y) {\n var height = this.height();\n var width = this.width();\n if (defined(x)) {\n this.x1 = x;\n this.x2 = this.x1 + width;\n }\n if (defined(y)) {\n this.y1 = y;\n this.y2 = this.y1 + height;\n }\n return this;\n },\n wrap: function (targetBox) {\n this.x1 = Math.min(this.x1, targetBox.x1);\n this.y1 = Math.min(this.y1, targetBox.y1);\n this.x2 = Math.max(this.x2, targetBox.x2);\n this.y2 = Math.max(this.y2, targetBox.y2);\n return this;\n },\n wrapPoint: function (point) {\n var arrayPoint = isArray(point);\n var x = arrayPoint ? point[0] : point.x;\n var y = arrayPoint ? point[1] : point.y;\n this.wrap(new Box(x, y, x, y));\n return this;\n },\n snapTo: function (targetBox, axis) {\n if (axis === X || !axis) {\n this.x1 = targetBox.x1;\n this.x2 = targetBox.x2;\n }\n if (axis === Y || !axis) {\n this.y1 = targetBox.y1;\n this.y2 = targetBox.y2;\n }\n return this;\n },\n alignTo: function (targetBox, anchor) {\n var height = this.height();\n var width = this.width();\n var axis = anchor === TOP || anchor === BOTTOM ? Y : X;\n var offset = axis === Y ? height : width;\n if (anchor === CENTER) {\n var targetCenter = targetBox.center();\n var center = this.center();\n this.x1 += targetCenter.x - center.x;\n this.y1 += targetCenter.y - center.y;\n } else if (anchor === TOP || anchor === LEFT) {\n this[axis + 1] = targetBox[axis + 1] - offset;\n } else {\n this[axis + 1] = targetBox[axis + 2];\n }\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n shrink: function (dw, dh) {\n this.x2 -= dw;\n this.y2 -= dh;\n return this;\n },\n expand: function (dw, dh) {\n this.shrink(-dw, -dh);\n return this;\n },\n pad: function (padding) {\n var spacing = getSpacing(padding);\n this.x1 -= spacing.left;\n this.x2 += spacing.right;\n this.y1 -= spacing.top;\n this.y2 += spacing.bottom;\n return this;\n },\n unpad: function (padding) {\n var spacing = getSpacing(padding);\n spacing.left = -spacing.left;\n spacing.top = -spacing.top;\n spacing.right = -spacing.right;\n spacing.bottom = -spacing.bottom;\n return this.pad(spacing);\n },\n clone: function () {\n return new Box(this.x1, this.y1, this.x2, this.y2);\n },\n center: function () {\n return new Point(this.x1 + this.width() / 2, this.y1 + this.height() / 2);\n },\n containsPoint: function (point) {\n return point.x >= this.x1 && point.x <= this.x2 && point.y >= this.y1 && point.y <= this.y2;\n },\n points: function () {\n return [\n new Point(this.x1, this.y1),\n new Point(this.x2, this.y1),\n new Point(this.x2, this.y2),\n new Point(this.x1, this.y2)\n ];\n },\n getHash: function () {\n return [\n this.x1,\n this.y1,\n this.x2,\n this.y2\n ].join(',');\n },\n overlaps: function (box) {\n return !(box.y2 < this.y1 || this.y2 < box.y1 || box.x2 < this.x1 || this.x2 < box.x1);\n },\n rotate: function (rotation) {\n var width = this.width();\n var height = this.height();\n var ref = this.center();\n var cx = ref.x;\n var cy = ref.y;\n var r1 = rotatePoint(0, 0, cx, cy, rotation);\n var r2 = rotatePoint(width, 0, cx, cy, rotation);\n var r3 = rotatePoint(width, height, cx, cy, rotation);\n var r4 = rotatePoint(0, height, cx, cy, rotation);\n width = Math.max(r1.x, r2.x, r3.x, r4.x) - Math.min(r1.x, r2.x, r3.x, r4.x);\n height = Math.max(r1.y, r2.y, r3.y, r4.y) - Math.min(r1.y, r2.y, r3.y, r4.y);\n this.x2 = this.x1 + width;\n this.y2 = this.y1 + height;\n return this;\n },\n toRect: function () {\n return new Rect([\n this.x1,\n this.y1\n ], [\n this.width(),\n this.height()\n ]);\n },\n hasSize: function () {\n return this.width() !== 0 && this.height() !== 0;\n },\n align: function (targetBox, axis, alignment) {\n var c1 = axis + 1;\n var c2 = axis + 2;\n var sizeFunc = axis === X ? WIDTH : HEIGHT;\n var size = this[sizeFunc]();\n if (inArray(alignment, [\n LEFT,\n TOP\n ])) {\n this[c1] = targetBox[c1];\n this[c2] = this[c1] + size;\n } else if (inArray(alignment, [\n RIGHT,\n BOTTOM\n ])) {\n this[c2] = targetBox[c2];\n this[c1] = this[c2] - size;\n } else if (alignment === CENTER) {\n this[c1] = targetBox[c1] + (targetBox[sizeFunc]() - size) / 2;\n this[c2] = this[c1] + size;\n }\n }\n });\n function rotatePoint(x, y, cx, cy, angle) {\n var theta = rad(angle);\n return new Point(cx + (x - cx) * Math.cos(theta) + (y - cy) * Math.sin(theta), cy - (x - cx) * Math.sin(theta) + (y - cy) * Math.cos(theta));\n }\n var Ring = Class.extend({\n init: function (center, innerRadius, radius, startAngle, angle) {\n this.center = center;\n this.innerRadius = innerRadius;\n this.radius = radius;\n this.startAngle = startAngle;\n this.angle = angle;\n },\n clone: function () {\n return new Ring(this.center, this.innerRadius, this.radius, this.startAngle, this.angle);\n },\n middle: function () {\n return this.startAngle + this.angle / 2;\n },\n setRadius: function (newRadius, innerRadius) {\n if (innerRadius) {\n this.innerRadius = newRadius;\n } else {\n this.radius = newRadius;\n }\n return this;\n },\n point: function (angle, innerRadius) {\n var radianAngle = rad(angle);\n var ax = Math.cos(radianAngle);\n var ay = Math.sin(radianAngle);\n var radius = innerRadius ? this.innerRadius : this.radius;\n var x = round(this.center.x - ax * radius, COORD_PRECISION);\n var y = round(this.center.y - ay * radius, COORD_PRECISION);\n return new Point(x, y);\n },\n adjacentBox: function (distance, width, height) {\n var sector = this.clone().expand(distance);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n var hw = width / 2;\n var hh = height / 2;\n var sa = Math.sin(rad(midAndle));\n var ca = Math.cos(rad(midAndle));\n var x = midPoint.x - hw;\n var y = midPoint.y - hh;\n if (Math.abs(sa) < 0.9) {\n x += hw * -ca / Math.abs(ca);\n }\n if (Math.abs(ca) < 0.9) {\n y += hh * -sa / Math.abs(sa);\n }\n return new Box(x, y, x + width, y + height);\n },\n containsPoint: function (p) {\n var center = this.center;\n var innerRadius = this.innerRadius;\n var radius = this.radius;\n var startAngle = this.startAngle;\n var endAngle = this.startAngle + this.angle;\n var dx = p.x - center.x;\n var dy = p.y - center.y;\n var vector = new Point(dx, dy);\n var startPoint = this.point(startAngle);\n var startVector = new Point(startPoint.x - center.x, startPoint.y - center.y);\n var endPoint = this.point(endAngle);\n var endVector = new Point(endPoint.x - center.x, endPoint.y - center.y);\n var dist = round(dx * dx + dy * dy, COORD_PRECISION);\n return (startVector.equals(vector) || clockwise(startVector, vector)) && !clockwise(endVector, vector) && dist >= innerRadius * innerRadius && dist <= radius * radius;\n },\n getBBox: function () {\n var this$1 = this;\n var box = new Box(MAX_VALUE, MAX_VALUE, MIN_VALUE, MIN_VALUE);\n var startAngle = round(this.startAngle % 360);\n var endAngle = round((startAngle + this.angle) % 360);\n var innerRadius = this.innerRadius;\n var allAngles = [\n 0,\n 90,\n 180,\n 270,\n startAngle,\n endAngle\n ].sort(numericComparer);\n var startAngleIndex = allAngles.indexOf(startAngle);\n var endAngleIndex = allAngles.indexOf(endAngle);\n var angles;\n if (startAngle === endAngle) {\n angles = allAngles;\n } else {\n if (startAngleIndex < endAngleIndex) {\n angles = allAngles.slice(startAngleIndex, endAngleIndex + 1);\n } else {\n angles = [].concat(allAngles.slice(0, endAngleIndex + 1), allAngles.slice(startAngleIndex, allAngles.length));\n }\n }\n for (var i = 0; i < angles.length; i++) {\n var point = this$1.point(angles[i]);\n box.wrapPoint(point);\n box.wrapPoint(point, innerRadius);\n }\n if (!innerRadius) {\n box.wrapPoint(this.center);\n }\n return box;\n },\n expand: function (value) {\n this.radius += value;\n return this;\n }\n });\n function numericComparer(a, b) {\n return a - b;\n }\n var Sector = Ring.extend({\n init: function (center, radius, startAngle, angle) {\n Ring.fn.init.call(this, center, 0, radius, startAngle, angle);\n },\n expand: function (value) {\n return Ring.fn.expand.call(this, value);\n },\n clone: function () {\n return new Sector(this.center, this.radius, this.startAngle, this.angle);\n },\n setRadius: function (newRadius) {\n this.radius = newRadius;\n return this;\n }\n });\n var DIRECTION_ANGLE = 0.001;\n var ShapeBuilder = Class.extend({\n createRing: function (sector, options) {\n var startAngle = sector.startAngle + 180;\n var endAngle = sector.angle + startAngle;\n if (sector.angle > 0 && startAngle === endAngle) {\n endAngle += DIRECTION_ANGLE;\n }\n var center = new geometry.Point(sector.center.x, sector.center.y);\n var radius = Math.max(sector.radius, 0);\n var innerRadius = Math.max(sector.innerRadius, 0);\n var arc = new geometry.Arc(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radius,\n radiusY: radius\n });\n var path = Path.fromArc(arc, options).close();\n if (innerRadius) {\n arc.radiusX = arc.radiusY = innerRadius;\n var innerEnd = arc.pointAt(endAngle);\n path.lineTo(innerEnd.x, innerEnd.y);\n path.arc(endAngle, startAngle, innerRadius, innerRadius, true);\n } else {\n path.lineTo(center.x, center.y);\n }\n return path;\n }\n });\n ShapeBuilder.current = new ShapeBuilder();\n var ChartElement = Class.extend({\n init: function (options) {\n this.children = [];\n this.options = deepExtend({}, this.options, this.initUserOptions(options));\n },\n initUserOptions: function (options) {\n return options;\n },\n reflow: function (targetBox) {\n var children = this.children;\n var box;\n for (var i = 0; i < children.length; i++) {\n var currentChild = children[i];\n currentChild.reflow(targetBox);\n box = box ? box.wrap(currentChild.box) : currentChild.box.clone();\n }\n this.box = box || targetBox;\n },\n destroy: function () {\n var children = this.children;\n if (this.animation) {\n this.animation.destroy();\n }\n for (var i = 0; i < children.length; i++) {\n children[i].destroy();\n }\n },\n getRoot: function () {\n var parent = this.parent;\n return parent ? parent.getRoot() : null;\n },\n getSender: function () {\n var service = this.getService();\n if (service) {\n return service.sender;\n }\n },\n getService: function () {\n var element = this;\n while (element) {\n if (element.chartService) {\n return element.chartService;\n }\n element = element.parent;\n }\n },\n translateChildren: function (dx, dy) {\n var children = this.children;\n var childrenCount = children.length;\n for (var i = 0; i < childrenCount; i++) {\n children[i].box.translate(dx, dy);\n }\n },\n append: function () {\n var arguments$1 = arguments;\n var this$1 = this;\n for (var i = 0; i < arguments.length; i++) {\n var item = arguments$1[i];\n this$1.children.push(item);\n item.parent = this$1;\n }\n },\n renderVisual: function () {\n if (this.options.visible === false) {\n return;\n }\n this.createVisual();\n this.addVisual();\n this.renderChildren();\n this.createAnimation();\n this.renderComplete();\n },\n addVisual: function () {\n if (this.visual) {\n this.visual.chartElement = this;\n if (this.parent) {\n this.parent.appendVisual(this.visual);\n }\n }\n },\n renderChildren: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n children[i].renderVisual();\n }\n },\n createVisual: function () {\n this.visual = new Group({\n zIndex: this.options.zIndex,\n visible: valueOrDefault(this.options.visible, true)\n });\n },\n createAnimation: function () {\n if (this.visual && this.options.animation) {\n this.animation = drawing.Animation.create(this.visual, this.options.animation);\n }\n },\n appendVisual: function (childVisual) {\n if (!childVisual.chartElement) {\n childVisual.chartElement = this;\n }\n if (childVisual.options.noclip) {\n this.clipRoot().visual.append(childVisual);\n } else if (defined(childVisual.options.zIndex)) {\n this.stackRoot().stackVisual(childVisual);\n } else if (this.isStackRoot) {\n this.stackVisual(childVisual);\n } else if (this.visual) {\n this.visual.append(childVisual);\n } else {\n this.parent.appendVisual(childVisual);\n }\n },\n clipRoot: function () {\n if (this.parent) {\n return this.parent.clipRoot();\n }\n return this;\n },\n stackRoot: function () {\n if (this.parent) {\n return this.parent.stackRoot();\n }\n return this;\n },\n stackVisual: function (childVisual) {\n var zIndex = childVisual.options.zIndex || 0;\n var visuals = this.visual.children;\n var length = visuals.length;\n var pos;\n for (pos = 0; pos < length; pos++) {\n var sibling = visuals[pos];\n var here = valueOrDefault(sibling.options.zIndex, 0);\n if (here > zIndex) {\n break;\n }\n }\n this.visual.insert(pos, childVisual);\n },\n traverse: function (callback) {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n var child = children[i];\n callback(child);\n if (child.traverse) {\n child.traverse(callback);\n }\n }\n },\n closest: function (match) {\n var element = this;\n var matched = false;\n while (element && !matched) {\n matched = match(element);\n if (!matched) {\n element = element.parent;\n }\n }\n if (matched) {\n return element;\n }\n },\n renderComplete: function () {\n },\n hasHighlight: function () {\n var options = (this.options || {}).highlight;\n return !(!this.createHighlight || options && options.visible === false);\n },\n toggleHighlight: function (show) {\n var this$1 = this;\n var options = (this.options || {}).highlight || {};\n var customVisual = options.visual;\n var highlight = this._highlight;\n if (!highlight) {\n var highlightOptions = {\n fill: {\n color: WHITE,\n opacity: 0.2\n },\n stroke: {\n color: WHITE,\n width: 1,\n opacity: 0.2\n }\n };\n if (customVisual) {\n highlight = this._highlight = customVisual($.extend(this.highlightVisualArgs(), {\n createVisual: function () {\n return this$1.createHighlight(highlightOptions);\n },\n sender: this.getSender(),\n series: this.series,\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n runningTotal: this.runningTotal,\n total: this.total\n }));\n if (!highlight) {\n return;\n }\n } else {\n highlight = this._highlight = this.createHighlight(highlightOptions);\n }\n if (!defined(highlight.options.zIndex)) {\n highlight.options.zIndex = valueOrDefault(options.zIndex, this.options.zIndex);\n }\n this.appendVisual(highlight);\n }\n highlight.visible(show);\n },\n createGradientOverlay: function (element, options, gradientOptions) {\n var overlay = new Path($.extend({\n stroke: { color: 'none' },\n fill: this.createGradient(gradientOptions),\n closed: element.options.closed\n }, options));\n overlay.segments.elements(element.segments.elements());\n return overlay;\n },\n createGradient: function (options) {\n if (this.parent) {\n return this.parent.createGradient(options);\n }\n }\n });\n ChartElement.prototype.options = {};\n var BoxElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.options.margin = getSpacing(this.options.margin);\n this.options.padding = getSpacing(this.options.padding);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var shrinkToFit = options.shrinkToFit;\n var hasSetSize = width && height;\n var margin = options.margin;\n var padding = options.padding;\n var borderWidth = options.border.width;\n var box;\n var reflowPaddingBox = function () {\n this$1.align(targetBox, X, options.align);\n this$1.align(targetBox, Y, options.vAlign);\n this$1.paddingBox = box.clone().unpad(margin).unpad(borderWidth);\n };\n var contentBox = targetBox.clone();\n if (hasSetSize) {\n contentBox.x2 = contentBox.x1 + width;\n contentBox.y2 = contentBox.y1 + height;\n }\n if (shrinkToFit) {\n contentBox.unpad(margin).unpad(borderWidth).unpad(padding);\n }\n ChartElement.fn.reflow.call(this, contentBox);\n if (hasSetSize) {\n box = this.box = new Box(0, 0, width, height);\n } else {\n box = this.box;\n }\n if (shrinkToFit && hasSetSize) {\n reflowPaddingBox();\n contentBox = this.contentBox = this.paddingBox.clone().unpad(padding);\n } else {\n contentBox = this.contentBox = box.clone();\n box.pad(padding).pad(borderWidth).pad(margin);\n reflowPaddingBox();\n }\n this.translateChildren(box.x1 - contentBox.x1 + margin.left + borderWidth + padding.left, box.y1 - contentBox.y1 + margin.top + borderWidth + padding.top);\n var children = this.children;\n for (var i = 0; i < children.length; i++) {\n var item = children[i];\n item.reflow(item.box);\n }\n },\n align: function (targetBox, axis, alignment) {\n this.box.align(targetBox, axis, alignment);\n },\n hasBox: function () {\n var options = this.options;\n return options.border.width || options.background;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n if (options.visible && this.hasBox()) {\n this.visual.append(Path.fromRect(this.paddingBox.toRect(), this.visualStyle()));\n }\n },\n visualStyle: function () {\n var options = this.options;\n var border = options.border || {};\n return {\n stroke: {\n width: border.width,\n color: border.color,\n opacity: valueOrDefault(border.opacity, options.opacity),\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n cursor: options.cursor\n };\n }\n });\n setDefaultOptions(BoxElement, {\n align: LEFT,\n vAlign: TOP,\n margin: {},\n padding: {},\n border: {\n color: BLACK,\n width: 0\n },\n background: '',\n shrinkToFit: false,\n width: 0,\n height: 0,\n visible: true\n });\n var ShapeElement = BoxElement.extend({\n init: function (options, pointData) {\n BoxElement.fn.init.call(this, options);\n this.pointData = pointData;\n },\n getElement: function () {\n var ref = this;\n var options = ref.options;\n var box = ref.paddingBox;\n var type = options.type;\n var rotation = options.rotation;\n var center = box.center();\n var halfWidth = box.width() / 2;\n if (!options.visible || !this.hasBox()) {\n return null;\n }\n var style = this.visualStyle();\n var element;\n if (type === CIRCLE) {\n element = new drawing.Circle(new Circle([\n round(box.x1 + halfWidth, COORD_PRECISION),\n round(box.y1 + box.height() / 2, COORD_PRECISION)\n ], halfWidth), style);\n } else if (type === TRIANGLE) {\n element = Path.fromPoints([\n [\n box.x1 + halfWidth,\n box.y1\n ],\n [\n box.x1,\n box.y2\n ],\n [\n box.x2,\n box.y2\n ]\n ], style).close();\n } else if (type === CROSS) {\n element = new drawing.MultiPath(style);\n element.moveTo(box.x1, box.y1).lineTo(box.x2, box.y2);\n element.moveTo(box.x1, box.y2).lineTo(box.x2, box.y1);\n } else {\n element = Path.fromRect(box.toRect(), style);\n }\n if (rotation) {\n element.transform(geometryTransform().rotate(-rotation, [\n center.x,\n center.y\n ]));\n }\n element.options.zIndex = options.zIndex;\n return element;\n },\n createElement: function () {\n var this$1 = this;\n var customVisual = this.options.visual;\n var pointData = this.pointData || {};\n var visual;\n if (customVisual) {\n visual = customVisual({\n value: pointData.value,\n dataItem: pointData.dataItem,\n sender: this.getSender(),\n series: pointData.series,\n category: pointData.category,\n rect: this.paddingBox.toRect(),\n options: this.visualOptions(),\n createVisual: function () {\n return this$1.getElement();\n }\n });\n } else {\n visual = this.getElement();\n }\n return visual;\n },\n visualOptions: function () {\n var options = this.options;\n return {\n background: options.background,\n border: options.border,\n margin: options.margin,\n padding: options.padding,\n type: options.type,\n size: options.width,\n visible: options.visible\n };\n },\n createVisual: function () {\n this.visual = this.createElement();\n }\n });\n setDefaultOptions(ShapeElement, {\n type: CIRCLE,\n align: CENTER,\n vAlign: CENTER\n });\n var LINEAR = 'linear';\n var RADIAL = 'radial';\n var GRADIENTS = {\n glass: {\n type: LINEAR,\n rotation: 0,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.25,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 1,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.55\n },\n {\n offset: 0.65,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0.25\n }\n ]\n },\n roundedBevel: {\n type: RADIAL,\n stops: [\n {\n offset: 0.33,\n color: WHITE,\n opacity: 0.06\n },\n {\n offset: 0.83,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.95,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n roundedGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0\n },\n {\n offset: 0.5,\n color: WHITE,\n opacity: 0.3\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n sharpGlass: {\n type: RADIAL,\n supportVML: false,\n stops: [\n {\n offset: 0,\n color: WHITE,\n opacity: 0.2\n },\n {\n offset: 0.15,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.17,\n color: WHITE,\n opacity: 0.35\n },\n {\n offset: 0.85,\n color: WHITE,\n opacity: 0.05\n },\n {\n offset: 0.87,\n color: WHITE,\n opacity: 0.15\n },\n {\n offset: 0.99,\n color: WHITE,\n opacity: 0\n }\n ]\n },\n bubbleShadow: {\n type: RADIAL,\n center: [\n 0.5,\n 0.5\n ],\n radius: 0.5\n }\n };\n function boxDiff(r, s) {\n if (r.x1 === s.x1 && r.y1 === s.y1 && r.x2 === s.x2 && r.y2 === s.y2) {\n return s;\n }\n var a = Math.min(r.x1, s.x1);\n var b = Math.max(r.x1, s.x1);\n var c = Math.min(r.x2, s.x2);\n var d = Math.max(r.x2, s.x2);\n var e = Math.min(r.y1, s.y1);\n var f = Math.max(r.y1, s.y1);\n var g = Math.min(r.y2, s.y2);\n var h = Math.max(r.y2, s.y2);\n var boxes = [];\n boxes[0] = new Box(b, e, c, f);\n boxes[1] = new Box(a, f, b, g);\n boxes[2] = new Box(c, f, d, g);\n boxes[3] = new Box(b, g, c, h);\n if (r.x1 === a && r.y1 === e || s.x1 === a && s.y1 === e) {\n boxes[4] = new Box(a, e, b, f);\n boxes[5] = new Box(c, g, d, h);\n } else {\n boxes[4] = new Box(c, e, d, f);\n boxes[5] = new Box(a, g, b, h);\n }\n return grep(boxes, function (box) {\n return box.height() > 0 && box.width() > 0;\n })[0];\n }\n var RootElement = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n var rootOptions = this.options;\n rootOptions.width = parseInt(rootOptions.width, 10);\n rootOptions.height = parseInt(rootOptions.height, 10);\n this.gradients = {};\n },\n reflow: function () {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var currentBox = new Box(0, 0, options.width, options.height);\n this.box = currentBox.unpad(options.margin);\n for (var i = 0; i < children.length; i++) {\n children[i].reflow(currentBox);\n currentBox = boxDiff(currentBox, children[i].box) || new Box();\n }\n },\n createVisual: function () {\n this.visual = new Group();\n this.createBackground();\n },\n createBackground: function () {\n var options = this.options;\n var border = options.border || {};\n var box = this.box.clone().pad(options.margin).unpad(border.width);\n var background = Path.fromRect(box.toRect(), {\n stroke: {\n color: border.width ? border.color : '',\n width: border.width,\n dashType: border.dashType\n },\n fill: {\n color: options.background,\n opacity: options.opacity\n },\n zIndex: -10\n });\n this.visual.append(background);\n },\n getRoot: function () {\n return this;\n },\n createGradient: function (options) {\n var gradients = this.gradients;\n var hashCode = objectKey(options);\n var gradient = GRADIENTS[options.gradient];\n var drawingGradient;\n if (gradients[hashCode]) {\n drawingGradient = gradients[hashCode];\n } else {\n var gradientOptions = $.extend({}, gradient, options);\n if (gradient.type === 'linear') {\n drawingGradient = new drawing.LinearGradient(gradientOptions);\n } else {\n if (options.innerRadius) {\n gradientOptions.stops = innerRadialStops(gradientOptions);\n }\n drawingGradient = new drawing.RadialGradient(gradientOptions);\n drawingGradient.supportVML = gradient.supportVML !== false;\n }\n gradients[hashCode] = drawingGradient;\n }\n return drawingGradient;\n },\n 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 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 var range = this.labelsRange();\n var rotation = labelOptions.rotation;\n if (isObject(rotation)) {\n labelOptions.alignRotation = rotation.align;\n labelOptions.rotation = rotation.angle;\n }\n if (labelOptions.rotation === 'auto') {\n labelOptions.rotation = 0;\n options.autoRotateLabels = true;\n }\n for (var idx = range.min; idx < range.max; idx += step) {\n var label = this$1.createAxisLabel(idx, labelOptions);\n if (label) {\n this$1.append(label);\n this$1.labels.push(label);\n }\n }\n }\n },\n 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 lineBox = this.lineBox();\n var mirror = options.labels.mirror;\n var tickPositions = this.getLabelsTickPositions();\n var labelOffset = this.getActualTickSize() + options.margin;\n for (var idx = 0; idx < labels.length; idx++) {\n var label = labels[idx];\n var tickIx = this$1.labelTickIndex(label);\n var labelSize = vertical ? label.box.height() : label.box.width();\n var labelPos = tickPositions[tickIx] - labelSize / 2;\n var labelBox = void 0, firstTickPosition = void 0, nextTickPosition = void 0;\n if (vertical) {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n var middle = firstTickPosition + (nextTickPosition - firstTickPosition) / 2;\n labelPos = middle - labelSize / 2;\n }\n var labelX = lineBox.x2;\n if (mirror) {\n labelX += labelOffset;\n label.options.rotationOrigin = LEFT;\n } else {\n labelX -= labelOffset + label.box.width();\n label.options.rotationOrigin = RIGHT;\n }\n labelBox = label.box.move(labelX, labelPos);\n } else {\n if (labelsBetweenTicks) {\n firstTickPosition = tickPositions[tickIx];\n nextTickPosition = tickPositions[tickIx + 1];\n } else {\n firstTickPosition = labelPos;\n nextTickPosition = labelPos + labelSize;\n }\n var labelY = lineBox.y1;\n if (mirror) {\n labelY -= labelOffset + label.box.height();\n label.options.rotationOrigin = BOTTOM;\n } else {\n labelY += labelOffset;\n label.options.rotationOrigin = TOP;\n }\n labelBox = new Box(firstTickPosition, labelY, nextTickPosition, labelY + label.box.height());\n }\n label.reflow(labelBox);\n }\n },\n autoRotateLabels: function () {\n if (this.options.autoRotateLabels && !this.options.vertical) {\n var tickPositions = this.getMajorTickPositions();\n var labels = this.labels;\n var angle;\n for (var idx = 0; idx < labels.length; idx++) {\n var width = Math.abs(tickPositions[idx + 1] - tickPositions[idx]);\n var labelBox = labels[idx].box;\n if (labelBox.width() > width) {\n if (labelBox.height() > width) {\n angle = -90;\n break;\n }\n angle = -45;\n }\n }\n if (angle) {\n for (var idx$1 = 0; idx$1 < labels.length; idx$1++) {\n labels[idx$1].options.rotation = angle;\n labels[idx$1].reflow(new Box());\n }\n return true;\n }\n }\n },\n arrangeTitle: function () {\n var ref = this;\n var options = ref.options;\n var title = ref.title;\n var mirror = options.labels.mirror;\n var vertical = options.vertical;\n if (title) {\n if (vertical) {\n title.options.align = mirror ? RIGHT : LEFT;\n title.options.vAlign = title.options.position;\n } else {\n title.options.align = title.options.position;\n title.options.vAlign = mirror ? TOP : BOTTOM;\n }\n title.reflow(this.box);\n }\n },\n arrangeNotes: function () {\n var this$1 = this;\n for (var idx = 0; idx < this.notes.length; idx++) {\n var item = this$1.notes[idx];\n var value = item.options.value;\n var slot = void 0;\n if (defined(value)) {\n if (this$1.shouldRenderNote(value)) {\n item.show();\n } else {\n item.hide();\n }\n slot = this$1.noteSlot(value);\n } else {\n item.hide();\n }\n item.reflow(slot || this$1.lineBox());\n }\n },\n noteSlot: function (value) {\n return this.getSlot(value);\n },\n alignTo: function (secondAxis) {\n var lineBox = secondAxis.lineBox();\n var vertical = this.options.vertical;\n var pos = vertical ? Y : X;\n this.box.snapTo(lineBox, pos);\n if (vertical) {\n this.box.shrink(0, this.lineBox().height() - lineBox.height());\n } else {\n this.box.shrink(this.lineBox().width() - lineBox.width(), 0);\n }\n this.box[pos + 1] -= this.lineBox()[pos + 1] - lineBox[pos + 1];\n this.box[pos + 2] -= this.lineBox()[pos + 2] - lineBox[pos + 2];\n },\n axisLabelText: function (value, dataItem, options) {\n var tmpl = getTemplate(options);\n var text = value;\n if (tmpl) {\n text = tmpl({\n value: value,\n dataItem: dataItem,\n format: options.format,\n culture: options.culture\n });\n } else if (options.format) {\n text = this.chartService.format.localeAuto(options.format, [value], options.culture);\n }\n return text;\n },\n slot: function (from, to, limit) {\n var slot = this.getSlot(from, to, limit);\n if (slot) {\n return slot.toRect();\n }\n },\n contentBox: function () {\n var box = this.box.clone();\n var labels = this.labels;\n if (labels.length) {\n 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) {\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) {\n var options = this.options;\n var dataItem = options.dataItems ? options.dataItems[index] : null;\n var category = valueOrDefault(options.categories[index], '');\n var text = this.axisLabelText(category, dataItem, labelOptions);\n return new AxisLabel(category, text, index, dataItem, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.totalRangeIndices();\n return Math.floor(range.min) <= value && value <= Math.ceil(range.max);\n },\n noteSlot: function (value) {\n var options = this.options;\n var index = value - Math.floor(options.min || 0);\n return this.getSlot(index);\n },\n arrangeNotes: function () {\n Axis.fn.arrangeNotes.call(this);\n this.hideOutOfRangeNotes();\n },\n hideOutOfRangeNotes: function () {\n var ref = this;\n var notes = ref.notes;\n var box = ref.box;\n if (notes && notes.length) {\n var valueAxis = this.options.vertical ? Y : X;\n var start = box[valueAxis + 1];\n var end = box[valueAxis + 2];\n for (var idx = 0; idx < notes.length; idx++) {\n var note = notes[idx];\n if (note.box && (end < note.box[valueAxis + 1] || note.box[valueAxis + 2] < start)) {\n note.hide();\n }\n }\n }\n },\n pan: function (delta) {\n var range = this.totalRangeIndices(true);\n var 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 this.valueEnd = this.roundToTotalStep(max, false, !justified && dateEquals(max, this.roundToTotalStep(max)) ? -1 : 0);\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 },\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 createAxisLabel: function (index, labelOptions) {\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 var text = this.axisLabelText(date, dataItem, labelOptions);\n if (text) {\n return new AxisLabel(date, text, index, dataItem, labelOptions);\n }\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 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) {\n var options = this.options;\n var value = round(options.min + index * options.majorUnit, DEFAULT_PRECISION);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, 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) {\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, null, labelOptions);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay || 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) {\n var power = Math.ceil(this.logMin + index);\n var value = Math.pow(this.options.majorUnit, power);\n var text = this.axisLabelText(value, null, labelOptions);\n return new AxisLabel(value, text, index, null, labelOptions);\n },\n shouldRenderNote: function (value) {\n var range = this.range();\n return range.min <= value && value <= range.max;\n },\n pan: function (delta) {\n var range = this.translateRange(delta);\n return this.limitRange(range.min, range.max, this.totalMin, this.totalMax, range.offset);\n },\n pointsRange: function (start, end) {\n var startValue = this.getValue(start);\n var endValue = this.getValue(end);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n return {\n min: min,\n max: max\n };\n },\n zoomRange: function (delta) {\n var ref = this;\n var options = ref.options;\n var totalMin = ref.totalMin;\n var totalMax = ref.totalMax;\n var newRange = this.scaleRange(delta);\n var min = limitValue(newRange.min, totalMin, totalMax);\n var max = limitValue(newRange.max, totalMin, totalMax);\n var base = options.majorUnit;\n var acceptOptionsRange = max > min && options.min && options.max && round(log(options.max, base) - log(options.min, base), DEFAULT_PRECISION) < 1;\n var acceptNewRange = !(options.min === totalMin && options.max === totalMax) && round(log(max, base) - log(min, base), DEFAULT_PRECISION) >= 1;\n if (acceptOptionsRange || acceptNewRange) {\n return {\n min: min,\n max: max\n };\n }\n },\n _minorIntervalOptions: function (power) {\n var ref = this.options;\n var minorUnit = ref.minorUnit;\n var base = ref.majorUnit;\n var value = Math.pow(base, power);\n var nextValue = Math.pow(base, power + 1);\n var difference = nextValue - value;\n var minorStep = difference / minorUnit;\n return {\n value: value,\n minorStep: minorStep\n };\n },\n _lineOptions: function () {\n var ref = this.options;\n var reverse = ref.reverse;\n var vertical = ref.vertical;\n var valueAxis = vertical ? Y : X;\n var lineBox = this.lineBox();\n var dir = vertical === reverse ? 1 : -1;\n var startEdge = dir === 1 ? 1 : 2;\n var lineSize = vertical ? lineBox.height() : lineBox.width();\n var step = dir * (lineSize / (this.logMax - this.logMin));\n var lineStart = lineBox[valueAxis + startEdge];\n return {\n step: step,\n lineStart: lineStart,\n lineBox: lineBox\n };\n }\n });\n function initRange(autoMin, autoMax, axisOptions, options) {\n var min = axisOptions.min;\n var max = axisOptions.max;\n if (defined(axisOptions.axisCrossingValue) && axisOptions.axisCrossingValue <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.max)) {\n max = autoMax;\n } else if (options.max <= 0) {\n throwNegativeValuesError();\n }\n if (!defined(options.min)) {\n min = autoMin;\n } else if (options.min <= 0) {\n throwNegativeValuesError();\n }\n return {\n min: min,\n max: max\n };\n }\n function autoAxisMin$1(min, max, options) {\n var base = options.majorUnit;\n var autoMin = min;\n if (min <= 0) {\n autoMin = max <= 1 ? Math.pow(base, -2) : 1;\n } else if (!options.narrowRange) {\n autoMin = Math.pow(base, Math.floor(log(min, base)));\n }\n return autoMin;\n }\n function autoAxisMax$1(max, base) {\n var logMaxRemainder = round(log(max, base), DEFAULT_PRECISION) % 1;\n var autoMax;\n if (max <= 0) {\n autoMax = base;\n } else if (logMaxRemainder !== 0 && (logMaxRemainder < 0.3 || logMaxRemainder > 0.9)) {\n autoMax = Math.pow(base, log(max, base) + 0.2);\n } else {\n autoMax = Math.pow(base, Math.ceil(log(max, base)));\n }\n return autoMax;\n }\n function throwNegativeValuesError() {\n throw new Error('Non positive values cannot be used for a logarithmic axis');\n }\n function log(y, x) {\n return Math.log(y) / Math.log(x);\n }\n setDefaultOptions(LogarithmicAxis, {\n type: 'log',\n majorUnit: DEFAULT_MAJOR_UNIT,\n minorUnit: 1,\n axisCrossingValue: 1,\n vertical: true,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n zIndex: 1,\n _deferLabels: true\n });\n var GridLinesMixin = {\n createGridLines: function (altAxis) {\n var options = this.options;\n var radius = Math.abs(this.box.center().y - altAxis.lineBox().y1);\n var gridLines = [];\n var skipMajor = false;\n var majorAngles, minorAngles;\n if (options.majorGridLines.visible) {\n majorAngles = this.majorGridLineAngles(altAxis);\n skipMajor = true;\n gridLines = this.renderMajorGridLines(majorAngles, radius, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n minorAngles = this.minorGridLineAngles(altAxis, skipMajor);\n append(gridLines, this.renderMinorGridLines(minorAngles, radius, options.minorGridLines, altAxis, skipMajor));\n }\n return gridLines;\n },\n renderMajorGridLines: function (angles, radius, options) {\n return this.renderGridLines(angles, radius, options);\n },\n renderMinorGridLines: function (angles, radius, options, altAxis, skipMajor) {\n var radiusCallback = this.radiusCallback && this.radiusCallback(radius, altAxis, skipMajor);\n return this.renderGridLines(angles, radius, options, radiusCallback);\n },\n renderGridLines: function (angles, radius, options, radiusCallback) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var center = this.box.center();\n var circle = new Circle([\n center.x,\n center.y\n ], radius);\n var container = this.gridLinesVisual();\n for (var i = 0; i < angles.length; i++) {\n var line = new Path(style);\n if (radiusCallback) {\n circle.radius = radiusCallback(angles[i]);\n }\n line.moveTo(circle.center).lineTo(circle.pointAt(angles[i] + 180));\n container.append(line);\n }\n return container.children;\n },\n gridLineAngles: function (altAxis, size, skip, step, skipAngles) {\n var this$1 = this;\n var divs = this.intervals(size, skip, step, skipAngles);\n var options = altAxis.options;\n var altAxisVisible = options.visible && (options.line || {}).visible !== false;\n return map(divs, function (d) {\n var alpha = this$1.intervalAngle(d);\n if (!altAxisVisible || alpha !== 90) {\n return alpha;\n }\n });\n }\n };\n var RadarCategoryAxis = CategoryAxis.extend({\n range: function () {\n return {\n min: 0,\n max: this.options.categories.length\n };\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n lineBox: function () {\n return this.box;\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(skip + i * step).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var options = this.options;\n var categories = options.categories.length;\n var divCount = categories / size || 1;\n var divAngle = 360 / divCount;\n var skip = skipOption || 0;\n var step = stepOption || 1;\n var divs = [];\n var angle = 0;\n for (var i = skip; i < divCount; i += step) {\n if (options.reverse) {\n angle = 360 - i * divAngle;\n } else {\n angle = i * divAngle;\n }\n angle = round(angle, COORD_PRECISION) % 360;\n if (!(skipAngles && inArray(angle, skipAngles))) {\n divs.push(angle);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(1);\n },\n minorIntervals: function () {\n return this.intervals(0.5);\n },\n intervalAngle: function (interval) {\n return (360 + interval + this.options.startAngle) % 360;\n },\n majorAngles: function () {\n var this$1 = this;\n return map(this.majorIntervals(), function (interval) {\n return this$1.intervalAngle(interval);\n });\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, 1, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var ref = this.options;\n var minorGridLines = ref.minorGridLines;\n var majorGridLines = ref.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(1, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, 0.5, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n radiusCallback: function (radius, altAxis, skipMajor) {\n if (altAxis.options.type !== ARC) {\n var minorAngle = rad(360 / (this.options.categories.length * 2));\n var minorRadius = Math.cos(minorAngle) * radius;\n var majorAngles = this.majorAngles();\n var radiusCallback = function (angle) {\n if (!skipMajor && inArray(angle, majorAngles)) {\n return radius;\n }\n return minorRadius;\n };\n return radiusCallback;\n }\n },\n createPlotBands: function () {\n var this$1 = this;\n var plotBands = this.options.plotBands || [];\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var slot = this$1.plotBandSlot(band);\n var singleSlot = this$1.getSlot(band.from);\n var head = band.from - Math.floor(band.from);\n slot.startAngle += head * singleSlot.angle;\n var tail = Math.ceil(band.to) - band.to;\n slot.angle -= (tail + head) * singleSlot.angle;\n var ring = ShapeBuilder.current.createRing(slot, {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n });\n group.append(ring);\n }\n this.appendVisual(group);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to - 1);\n },\n getSlot: function (from, to) {\n var options = this.options;\n var justified = options.justified;\n var box = this.box;\n var divs = this.majorAngles();\n var totalDivs = divs.length;\n var slotAngle = 360 / totalDivs;\n var fromValue = from;\n if (options.reverse && !justified) {\n fromValue = (fromValue + 1) % totalDivs;\n }\n fromValue = limitValue(Math.floor(fromValue), 0, totalDivs - 1);\n var slotStart = divs[fromValue];\n if (justified) {\n slotStart = slotStart - slotAngle / 2;\n if (slotStart < 0) {\n slotStart += 360;\n }\n }\n var toValue = limitValue(Math.ceil(to || fromValue), fromValue, totalDivs - 1);\n var slots = toValue - fromValue + 1;\n var angle = slotAngle * slots;\n return new Ring(box.center(), 0, box.height() / 2, slotStart, angle);\n },\n slot: function (from, to) {\n var slot = this.getSlot(from, to);\n var startAngle = slot.startAngle + 180;\n var endAngle = startAngle + slot.angle;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n pointCategoryIndex: function (point) {\n var this$1 = this;\n var length = this.options.categories.length;\n var index = null;\n for (var i = 0; i < length; i++) {\n var slot = this$1.getSlot(i);\n if (slot.containsPoint(point)) {\n index = i;\n break;\n }\n }\n return index;\n }\n });\n setDefaultOptions(RadarCategoryAxis, {\n startAngle: 90,\n labels: { margin: getSpacing(10) },\n majorGridLines: { visible: true },\n justified: true\n });\n deepExtend(RadarCategoryAxis.prototype, GridLinesMixin);\n var PolarAxis = Axis.extend({\n init: function (options, chartService) {\n Axis.fn.init.call(this, options, chartService);\n var instanceOptions = this.options;\n instanceOptions.minorUnit = instanceOptions.minorUnit || instanceOptions.majorUnit / 2;\n },\n getDivisions: function (stepValue) {\n return NumericAxis.prototype.getDivisions.call(this, stepValue) - 1;\n },\n reflow: function (box) {\n this.box = box;\n this.reflowLabels();\n },\n reflowLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelOptions = ref.options.labels;\n var skip = labelOptions.skip || 0;\n var step = labelOptions.step || 1;\n var measureBox = new Box();\n var divs = this.intervals(options.majorUnit, skip, step);\n for (var i = 0; i < labels.length; i++) {\n labels[i].reflow(measureBox);\n var labelBox = labels[i].box;\n labels[i].reflow(this$1.getSlot(divs[i]).adjacentBox(0, labelBox.width(), labelBox.height()));\n }\n },\n lineBox: function () {\n return this.box;\n },\n intervals: function (size, skipOption, stepOption, skipAngles) {\n if (skipAngles === void 0) {\n skipAngles = false;\n }\n var min = this.options.min;\n var divisions = this.getDivisions(size);\n var divs = [];\n var skip = skipOption || 0;\n var step = stepOption || 1;\n for (var i = skip; i < divisions; i += step) {\n var current = (360 + min + i * size) % 360;\n if (!(skipAngles && inArray(current, skipAngles))) {\n divs.push(current);\n }\n }\n return divs;\n },\n majorIntervals: function () {\n return this.intervals(this.options.majorUnit);\n },\n minorIntervals: function () {\n return this.intervals(this.options.minorUnit);\n },\n intervalAngle: function (i) {\n return (540 - i - this.options.startAngle) % 360;\n },\n createLine: function () {\n return [];\n },\n majorGridLineAngles: function (altAxis) {\n var majorGridLines = this.options.majorGridLines;\n return this.gridLineAngles(altAxis, this.options.majorUnit, majorGridLines.skip, majorGridLines.step);\n },\n minorGridLineAngles: function (altAxis, skipMajor) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var majorGridLineAngles = skipMajor ? this.intervals(options.majorUnit, majorGridLines.skip, majorGridLines.step) : null;\n return this.gridLineAngles(altAxis, options.minorUnit, minorGridLines.skip, minorGridLines.step, majorGridLineAngles);\n },\n plotBandSlot: function (band) {\n return this.getSlot(band.from, band.to);\n },\n getSlot: function (a, b) {\n var ref = this;\n var options = ref.options;\n var box = ref.box;\n var startAngle = options.startAngle;\n var start = limitValue(a, options.min, options.max);\n var end = limitValue(b || start, start, options.max);\n if (options.reverse) {\n start *= -1;\n end *= -1;\n }\n start = (540 - start - startAngle) % 360;\n end = (540 - end - startAngle) % 360;\n if (end < start) {\n var tmp = start;\n start = end;\n end = tmp;\n }\n return new Ring(box.center(), 0, box.height() / 2, start, end - start);\n },\n slot: function (from, to) {\n if (to === void 0) {\n to = from;\n }\n var options = this.options;\n var start = 360 - options.startAngle;\n var slot = this.getSlot(from, to);\n var min = Math.min(from, to);\n var max = Math.max(from, to);\n var startAngle, endAngle;\n if (options.reverse) {\n startAngle = min;\n endAngle = max;\n } else {\n startAngle = 360 - max;\n endAngle = 360 - min;\n }\n startAngle = (startAngle + start) % 360;\n endAngle = (endAngle + start) % 360;\n return new geometry.Arc([\n slot.center.x,\n slot.center.y\n ], {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: slot.radius,\n radiusY: slot.radius\n });\n },\n getValue: function (point) {\n var options = this.options;\n var center = this.box.center();\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = Math.round(deg(Math.atan2(dy, dx)));\n var start = options.startAngle;\n if (!options.reverse) {\n theta *= -1;\n start *= -1;\n }\n return (theta + start + 360) % 360;\n },\n valueRange: function () {\n return {\n min: 0,\n max: Math.PI * 2\n };\n }\n });\n setDefaultOptions(PolarAxis, {\n type: 'polar',\n startAngle: 0,\n reverse: false,\n majorUnit: 60,\n min: 0,\n max: 360,\n labels: { margin: getSpacing(10) },\n majorGridLines: {\n color: BLACK,\n visible: true,\n width: 1\n },\n minorGridLines: { color: '#aaa' }\n });\n deepExtend(PolarAxis.prototype, GridLinesMixin, {\n createPlotBands: RadarCategoryAxis.prototype.createPlotBands,\n majorAngles: RadarCategoryAxis.prototype.majorAngles,\n range: NumericAxis.prototype.range,\n labelsCount: NumericAxis.prototype.labelsCount,\n createAxisLabel: NumericAxis.prototype.createAxisLabel\n });\n var RadarNumericAxisMixin = {\n options: { majorGridLines: { visible: true } },\n createPlotBands: function () {\n var this$1 = this;\n var ref = this.options;\n var type = ref.majorGridLines.type;\n var plotBands = ref.plotBands;\n if (plotBands === void 0) {\n plotBands = [];\n }\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var group = this._plotbandGroup = new Group({ zIndex: -1 });\n for (var i = 0; i < plotBands.length; i++) {\n var band = plotBands[i];\n var bandStyle = {\n fill: {\n color: band.color,\n opacity: band.opacity\n },\n stroke: { opacity: band.opacity }\n };\n var slot = this$1.getSlot(band.from, band.to, true);\n var ring = new Ring(center, center.y - slot.y2, center.y - slot.y1, 0, 360);\n var shape = void 0;\n if (type === ARC) {\n shape = ShapeBuilder.current.createRing(ring, bandStyle);\n } else {\n shape = Path.fromPoints(this$1.plotBandPoints(ring, majorAngles), bandStyle).close();\n }\n group.append(shape);\n }\n this.appendVisual(group);\n },\n plotBandPoints: function (ring, angles) {\n var innerPoints = [];\n var outerPoints = [];\n var center = [\n ring.center.x,\n ring.center.y\n ];\n var innerCircle = new Circle(center, ring.innerRadius);\n var outerCircle = new Circle(center, ring.radius);\n for (var i = 0; i < angles.length; i++) {\n innerPoints.push(innerCircle.pointAt(angles[i] + 180));\n outerPoints.push(outerCircle.pointAt(angles[i] + 180));\n }\n innerPoints.reverse();\n innerPoints.push(innerPoints[0]);\n outerPoints.push(outerPoints[0]);\n return outerPoints.concat(innerPoints);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var majorTicks = this.radarMajorGridLinePositions();\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var gridLines = [];\n if (options.majorGridLines.visible) {\n gridLines = this.renderGridLines(center, majorTicks, majorAngles, options.majorGridLines);\n }\n if (options.minorGridLines.visible) {\n var minorTicks = this.radarMinorGridLinePositions();\n append(gridLines, this.renderGridLines(center, minorTicks, majorAngles, options.minorGridLines));\n }\n return gridLines;\n },\n renderGridLines: function (center, ticks, angles, options) {\n var style = {\n stroke: {\n width: options.width,\n color: options.color,\n dashType: options.dashType\n }\n };\n var skip = options.skip;\n if (skip === void 0) {\n skip = 0;\n }\n var step = options.step;\n if (step === void 0) {\n step = 0;\n }\n var container = this.gridLinesVisual();\n for (var tickIx = skip; tickIx < ticks.length; tickIx += step) {\n var tickRadius = center.y - ticks[tickIx];\n if (tickRadius > 0) {\n var circle = new Circle([\n center.x,\n center.y\n ], tickRadius);\n if (options.type === ARC) {\n container.append(new drawing.Circle(circle, style));\n } else {\n var line = new Path(style);\n for (var angleIx = 0; angleIx < angles.length; angleIx++) {\n line.lineTo(circle.pointAt(angles[angleIx] + 180));\n }\n line.close();\n container.append(line);\n }\n }\n }\n return container.children;\n },\n getValue: function (point) {\n var lineBox = this.lineBox();\n var altAxis = this.plotArea.polarAxis;\n var majorAngles = altAxis.majorAngles();\n var center = altAxis.box.center();\n var radius = point.distanceTo(center);\n var distance = radius;\n if (this.options.majorGridLines.type !== ARC && majorAngles.length > 1) {\n var dx = point.x - center.x;\n var dy = point.y - center.y;\n var theta = (deg(Math.atan2(dy, dx)) + 540) % 360;\n majorAngles.sort(function (a, b) {\n return angularDistance(a, theta) - angularDistance(b, theta);\n });\n var midAngle = angularDistance(majorAngles[0], majorAngles[1]) / 2;\n var alpha = angularDistance(theta, majorAngles[0]);\n var gamma = 90 - midAngle;\n var beta = 180 - alpha - gamma;\n distance = radius * (Math.sin(rad(beta)) / Math.sin(rad(gamma)));\n }\n return this.axisType().prototype.getValue.call(this, new Point(lineBox.x1, lineBox.y2 - distance));\n }\n };\n function angularDistance(a, b) {\n return 180 - Math.abs(Math.abs(a - b) - 180);\n }\n var RadarNumericAxis = NumericAxis.extend({\n radarMajorGridLinePositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n radarMinorGridLinePositions: function () {\n var options = this.options;\n var minorSkipStep = 0;\n if (options.majorGridLines.visible) {\n minorSkipStep = options.majorUnit;\n }\n return this.getTickPositions(options.minorUnit, minorSkipStep);\n },\n axisType: function () {\n return NumericAxis;\n }\n });\n deepExtend(RadarNumericAxis.prototype, RadarNumericAxisMixin);\n var RadarLogarithmicAxis = LogarithmicAxis.extend({\n radarMajorGridLinePositions: function () {\n var positions = [];\n this.traverseMajorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.majorGridLines);\n return positions;\n },\n radarMinorGridLinePositions: function () {\n var positions = [];\n this.traverseMinorTicksPositions(function (position) {\n positions.push(position);\n }, this.options.minorGridLines);\n return positions;\n },\n axisType: function () {\n return LogarithmicAxis;\n }\n });\n deepExtend(RadarLogarithmicAxis.prototype, RadarNumericAxisMixin);\n var WEIGHT = 0.333;\n var EXTREMUM_ALLOWED_DEVIATION = 0.01;\n var CurveProcessor = Class.extend({\n init: function (closed) {\n this.closed = closed;\n },\n process: function (dataPoints) {\n var this$1 = this;\n var points = dataPoints.slice(0);\n var segments = [];\n var closed = this.closed;\n var length = points.length;\n if (length > 2) {\n this.removeDuplicates(0, points);\n length = points.length;\n }\n if (length < 2 || length === 2 && points[0].equals(points[1])) {\n return segments;\n }\n var p0 = points[0];\n var p1 = points[1];\n var p2 = points[2];\n segments.push(new Segment(p0));\n while (p0.equals(points[length - 1])) {\n closed = true;\n points.pop();\n length--;\n }\n if (length === 2) {\n var tangent = this.tangent(p0, p1, X, Y);\n last(segments).controlOut(this.firstControlPoint(tangent, p0, p1, X, Y));\n segments.push(new Segment(p1, this.secondControlPoint(tangent, p0, p1, X, Y)));\n return segments;\n }\n var initialControlPoint, lastControlPoint;\n if (closed) {\n p0 = points[length - 1];\n p1 = points[0];\n p2 = points[1];\n var controlPoints = this.controlPoints(p0, p1, p2);\n initialControlPoint = controlPoints[1];\n lastControlPoint = controlPoints[0];\n } else {\n var tangent$1 = this.tangent(p0, p1, X, Y);\n initialControlPoint = this.firstControlPoint(tangent$1, p0, p1, X, Y);\n }\n var cp0 = initialControlPoint;\n for (var idx = 0; idx <= length - 3; idx++) {\n this$1.removeDuplicates(idx, points);\n length = points.length;\n if (idx + 3 <= length) {\n p0 = points[idx];\n p1 = points[idx + 1];\n p2 = points[idx + 2];\n var controlPoints$1 = this$1.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n cp0 = controlPoints$1[1];\n var cp1 = controlPoints$1[0];\n segments.push(new Segment(p1, cp1));\n }\n }\n if (closed) {\n p0 = points[length - 2];\n p1 = points[length - 1];\n p2 = points[0];\n var controlPoints$2 = this.controlPoints(p0, p1, p2);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p1, controlPoints$2[0]));\n last(segments).controlOut(controlPoints$2[1]);\n segments.push(new Segment(p2, lastControlPoint));\n } else {\n var tangent$2 = this.tangent(p1, p2, X, Y);\n last(segments).controlOut(cp0);\n segments.push(new Segment(p2, this.secondControlPoint(tangent$2, p1, p2, X, Y)));\n }\n return segments;\n },\n removeDuplicates: function (idx, points) {\n while (points[idx + 1] && (points[idx].equals(points[idx + 1]) || points[idx + 1].equals(points[idx + 2]))) {\n points.splice(idx + 1, 1);\n }\n },\n invertAxis: function (p0, p1, p2) {\n var invertAxis = false;\n if (p0.x === p1.x) {\n invertAxis = true;\n } else if (p1.x === p2.x) {\n if (p1.y < p2.y && p0.y <= p1.y || p2.y < p1.y && p1.y <= p0.y) {\n invertAxis = true;\n }\n } else {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n if (!(p0.y <= p1.y && p2.y <= y2) && !(p1.y <= p0.y && p2.y >= y2)) {\n invertAxis = true;\n }\n }\n return invertAxis;\n },\n isLine: function (p0, p1, p2) {\n var fn = this.lineFunction(p0, p1);\n var y2 = this.calculateFunction(fn, p2.x);\n return p0.x === p1.x && p1.x === p2.x || round(y2, 1) === round(p2.y, 1);\n },\n lineFunction: function (p1, p2) {\n var a = (p2.y - p1.y) / (p2.x - p1.x);\n var b = p1.y - a * p1.x;\n return [\n b,\n a\n ];\n },\n controlPoints: function (p0, p1, p2) {\n var xField = X;\n var yField = Y;\n var restrict = false;\n var switchOrientation = false;\n var tangent;\n if (this.isLine(p0, p1, p2)) {\n tangent = this.tangent(p0, p1, X, Y);\n } else {\n var monotonic = {\n x: this.isMonotonicByField(p0, p1, p2, X),\n y: this.isMonotonicByField(p0, p1, p2, Y)\n };\n if (monotonic.x && monotonic.y) {\n tangent = this.tangent(p0, p2, X, Y);\n restrict = true;\n } else {\n if (this.invertAxis(p0, p1, p2)) {\n xField = Y;\n yField = X;\n }\n if (monotonic[xField]) {\n tangent = 0;\n } else {\n var sign;\n if (p2[yField] < p0[yField] && p0[yField] <= p1[yField] || p0[yField] < p2[yField] && p1[yField] <= p0[yField]) {\n sign = numberSign((p2[yField] - p0[yField]) * (p1[xField] - p0[xField]));\n } else {\n sign = -numberSign((p2[xField] - p0[xField]) * (p1[yField] - p0[yField]));\n }\n tangent = EXTREMUM_ALLOWED_DEVIATION * sign;\n switchOrientation = true;\n }\n }\n }\n var secondControlPoint = this.secondControlPoint(tangent, p0, p1, xField, yField);\n if (switchOrientation) {\n var oldXField = xField;\n xField = yField;\n yField = oldXField;\n }\n var firstControlPoint = this.firstControlPoint(tangent, p1, p2, xField, yField);\n if (restrict) {\n this.restrictControlPoint(p0, p1, secondControlPoint, tangent);\n this.restrictControlPoint(p1, p2, firstControlPoint, tangent);\n }\n return [\n secondControlPoint,\n firstControlPoint\n ];\n },\n restrictControlPoint: function (p1, p2, cp, tangent) {\n if (p1.y < p2.y) {\n if (p2.y < cp.y) {\n cp.x = p1.x + (p2.y - p1.y) / tangent;\n cp.y = p2.y;\n } else if (cp.y < p1.y) {\n cp.x = p2.x - (p2.y - p1.y) / tangent;\n cp.y = p1.y;\n }\n } else {\n if (cp.y < p2.y) {\n cp.x = p1.x - (p1.y - p2.y) / tangent;\n cp.y = p2.y;\n } else if (p1.y < cp.y) {\n cp.x = p2.x + (p1.y - p2.y) / tangent;\n cp.y = p1.y;\n }\n }\n },\n tangent: function (p0, p1, xField, yField) {\n var x = p1[xField] - p0[xField];\n var y = p1[yField] - p0[yField];\n var tangent;\n if (x === 0) {\n tangent = 0;\n } else {\n tangent = y / x;\n }\n return tangent;\n },\n isMonotonicByField: function (p0, p1, p2, field) {\n return p2[field] > p1[field] && p1[field] > p0[field] || p2[field] < p1[field] && p1[field] < p0[field];\n },\n firstControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t1 + distance, p0[yField] + distance * tangent, xField, yField);\n },\n secondControlPoint: function (tangent, p0, p3, xField, yField) {\n var t1 = p0[xField];\n var t2 = p3[xField];\n var distance = (t2 - t1) * WEIGHT;\n return this.point(t2 - distance, p3[yField] - distance * tangent, xField, yField);\n },\n point: function (xValue, yValue, xField, yField) {\n var controlPoint = new geometry.Point();\n controlPoint[xField] = xValue;\n controlPoint[yField] = yValue;\n return controlPoint;\n },\n calculateFunction: function (fn, x) {\n var length = fn.length;\n var result = 0;\n for (var i = 0; i < length; i++) {\n result += Math.pow(x, i) * fn[i];\n }\n return result;\n }\n });\n function numberSign(value) {\n return value <= 0 ? -1 : 1;\n }\n dataviz.Gradients = GRADIENTS;\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n services: services,\n autoMajorUnit: autoMajorUnit,\n Point: Point,\n Box: Box,\n Ring: Ring,\n Sector: Sector,\n ShapeBuilder: ShapeBuilder,\n ShapeElement: ShapeElement,\n ChartElement: ChartElement,\n BoxElement: BoxElement,\n RootElement: RootElement,\n FloatElement: FloatElement,\n Text: Text,\n TextBox: TextBox,\n Title: Title,\n AxisLabel: AxisLabel,\n Axis: Axis,\n Note: Note,\n CategoryAxis: CategoryAxis,\n DateCategoryAxis: DateCategoryAxis,\n DateValueAxis: DateValueAxis,\n NumericAxis: NumericAxis,\n LogarithmicAxis: LogarithmicAxis,\n PolarAxis: PolarAxis,\n RadarCategoryAxis: RadarCategoryAxis,\n RadarNumericAxis: RadarNumericAxis,\n RadarLogarithmicAxis: RadarLogarithmicAxis,\n CurveProcessor: CurveProcessor,\n rectToBox: rectToBox,\n addClass: addClass,\n removeClass: removeClass,\n alignPathToPixel: alignPathToPixel,\n clockwise: clockwise,\n convertableToNumber: convertableToNumber,\n deepExtend: deepExtend,\n elementStyles: elementStyles,\n getSpacing: getSpacing,\n getTemplate: getTemplate,\n getter: __common_getter_js,\n grep: grep,\n hasClasses: hasClasses,\n HashMap: HashMap,\n inArray: inArray,\n interpolateValue: interpolateValue,\n InstanceObserver: InstanceObserver,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n map: map,\n mousewheelDelta: mousewheelDelta,\n FontLoader: FontLoader,\n setDefaultOptions: setDefaultOptions,\n sparseArrayLimits: sparseArrayLimits,\n styleValue: styleValue,\n find: find,\n elementScale: elementScale,\n append: append,\n bindEvents: bindEvents,\n Class: Class,\n defined: defined,\n deg: deg,\n elementOffset: elementOffset,\n elementSize: elementSize,\n eventElement: eventElement,\n eventCoordinates: eventCoordinates,\n last: last,\n limitValue: limitValue,\n logToConsole: kendo.logToConsole,\n objectKey: objectKey,\n rad: rad,\n round: round,\n unbindEvents: unbindEvents,\n valueOrDefault: valueOrDefault,\n absoluteDateDiff: absoluteDateDiff,\n addDuration: addDuration,\n addTicks: addTicks,\n ceilDate: ceilDate,\n dateComparer: dateComparer,\n dateDiff: dateDiff,\n dateEquals: dateEquals,\n dateIndex: dateIndex,\n duration: duration,\n floorDate: floorDate,\n lteDateIndex: lteDateIndex,\n startOfWeek: startOfWeek,\n toDate: toDate,\n parseDate: parseDate,\n parseDates: parseDates,\n toTime: toTime,\n firstDay: firstDay\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/core', ['dataviz/core/kendo-core'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var services = dataviz.services;\n var draw = kendo.drawing;\n dataviz.SASS_THEMES = [\n 'sass',\n 'default-v2',\n 'bootstrap-v4',\n 'material-v2'\n ];\n dataviz.ExportMixin = {\n extend: function (proto, skipLegacy) {\n if (!proto.exportVisual) {\n throw new Error('Mixin target has no exportVisual method defined.');\n }\n proto.exportSVG = this.exportSVG;\n proto.exportImage = this.exportImage;\n proto.exportPDF = this.exportPDF;\n if (!skipLegacy) {\n proto.svg = this.svg;\n proto.imageDataURL = this.imageDataURL;\n }\n },\n exportSVG: function (options) {\n return draw.exportSVG(this.exportVisual(), options);\n },\n exportImage: function (options) {\n return draw.exportImage(this.exportVisual(options), options);\n },\n exportPDF: function (options) {\n return draw.exportPDF(this.exportVisual(), options);\n },\n svg: function () {\n if (draw.svg.Surface) {\n return draw.svg.exportGroup(this.exportVisual());\n } else {\n throw new Error('SVG Export failed. Unable to export instantiate kendo.drawing.svg.Surface');\n }\n },\n imageDataURL: function () {\n if (!kendo.support.canvas) {\n return null;\n }\n if (draw.canvas.Surface) {\n var container = $('
    ').css({\n display: 'none',\n width: this.element.width(),\n height: this.element.height()\n }).appendTo(document.body);\n var surface = new draw.canvas.Surface(container[0]);\n surface.draw(this.exportVisual());\n var image = surface._rootElement.toDataURL();\n surface.destroy();\n container.remove();\n return image;\n } else {\n throw new Error('Image Export failed. Unable to export instantiate kendo.drawing.canvas.Surface');\n }\n }\n };\n services.IntlService.register({\n format: function (format) {\n return kendo.format.apply(null, [format].concat(Array.prototype.slice.call(arguments, 1)));\n },\n toString: kendo.toString,\n parseDate: kendo.parseDate,\n firstDay: function () {\n return kendo.culture().calendars.standard.firstDay;\n }\n });\n services.TemplateService.register({ compile: kendo.template });\n dataviz.Point2D = dataviz.Point;\n dataviz.Box2D = dataviz.Box;\n dataviz.mwDelta = function (e) {\n return dataviz.mousewheelDelta(e.originalEvent);\n };\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.core', [\n 'dataviz/core/kendo-core',\n 'dataviz/core/core'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.core',\n name: 'Core',\n description: 'The DataViz core functions',\n category: 'dataviz',\n depends: [\n 'core',\n 'drawing'\n ],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/chart-base-theme', ['kendo.dataviz.core'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var BAR_GAP = 1.5;\n var BAR_SPACING = 0.4;\n var BLACK = '#000';\n var SANS = 'Arial, Helvetica, sans-serif';\n var SANS11 = '11px ' + SANS;\n var SANS12 = '12px ' + SANS;\n var SANS16 = '16px ' + SANS;\n var TRANSPARENT = 'transparent';\n var WHITE = '#fff';\n var notes = function () {\n return {\n icon: { border: { width: 1 } },\n label: {\n font: SANS12,\n padding: 3\n },\n line: {\n length: 10,\n width: 2\n },\n visible: true\n };\n };\n var axisDefaults = function () {\n return {\n labels: { font: SANS12 },\n notes: notes(),\n title: {\n font: SANS16,\n margin: 5\n }\n };\n };\n var areaSeries = function () {\n return {\n highlight: { markers: { border: {} } },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n };\n };\n var rangeAreaSeries = function () {\n return {\n highlight: { markers: { border: {} } },\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.4\n };\n };\n var barSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var boxPlotSeries = function () {\n return {\n outliersField: '',\n meanField: '',\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n whiskers: { width: 3 },\n mean: { width: 2 },\n median: { width: 2 }\n },\n mean: { width: 2 },\n median: { width: 2 },\n spacing: 0.3,\n whiskers: { width: 2 }\n };\n };\n var bubbleSeries = function () {\n return {\n border: { width: 0 },\n labels: { background: TRANSPARENT },\n opacity: 0.6\n };\n };\n var bulletSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING,\n target: { color: '#ff0000' }\n };\n };\n var candlestickSeries = function () {\n return {\n border: {\n _brightness: 0.8,\n width: 1\n },\n downColor: WHITE,\n gap: 1,\n highlight: {\n border: {\n opacity: 1,\n width: 2\n },\n line: { width: 2 }\n },\n line: {\n color: BLACK,\n width: 1\n },\n spacing: 0.3\n };\n };\n var columnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var donutSeries = function () {\n return { margin: 1 };\n };\n var lineSeries = function () {\n return { width: 2 };\n };\n var ohlcSeries = function () {\n return {\n gap: 1,\n highlight: {\n line: {\n opacity: 1,\n width: 3\n }\n },\n line: { width: 1 },\n spacing: 0.3\n };\n };\n var radarAreaSeries = function () {\n return {\n line: {\n opacity: 1,\n width: 0\n },\n markers: {\n size: 6,\n visible: false\n },\n opacity: 0.5\n };\n };\n var radarLineSeries = function () {\n return {\n markers: { visible: false },\n width: 2\n };\n };\n var rangeBarSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var rangeColumnSeries = function () {\n return {\n gap: BAR_GAP,\n spacing: BAR_SPACING\n };\n };\n var scatterLineSeries = function () {\n return { width: 1 };\n };\n var waterfallSeries = function () {\n return {\n gap: 0.5,\n line: {\n color: BLACK,\n width: 1\n },\n spacing: BAR_SPACING\n };\n };\n var pieSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var funnelSeries = function () {\n return {\n labels: {\n background: '',\n color: '',\n padding: {\n top: 5,\n bottom: 5,\n left: 7,\n right: 7\n }\n }\n };\n };\n var seriesDefaults = function (options) {\n return {\n visible: true,\n labels: { font: SANS11 },\n overlay: options.gradients ? {} : { gradient: 'none' },\n area: areaSeries(),\n rangeArea: rangeAreaSeries(),\n verticalRangeArea: rangeAreaSeries(),\n bar: barSeries(),\n boxPlot: boxPlotSeries(),\n bubble: bubbleSeries(),\n bullet: bulletSeries(),\n candlestick: candlestickSeries(),\n column: columnSeries(),\n pie: pieSeries(),\n donut: donutSeries(),\n funnel: funnelSeries(),\n horizontalWaterfall: waterfallSeries(),\n line: lineSeries(),\n notes: notes(),\n ohlc: ohlcSeries(),\n radarArea: radarAreaSeries(),\n radarLine: radarLineSeries(),\n polarArea: radarAreaSeries(),\n polarLine: radarLineSeries(),\n rangeBar: rangeBarSeries(),\n rangeColumn: rangeColumnSeries(),\n scatterLine: scatterLineSeries(),\n verticalArea: areaSeries(),\n verticalBoxPlot: boxPlotSeries(),\n verticalBullet: bulletSeries(),\n verticalLine: lineSeries(),\n waterfall: waterfallSeries()\n };\n };\n var title = function () {\n return { font: SANS16 };\n };\n var legend = function () {\n return { labels: { font: SANS12 } };\n };\n var baseTheme = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n axisDefaults: axisDefaults(),\n categoryAxis: { majorGridLines: { visible: true } },\n navigator: {\n pane: {\n height: 90,\n margin: { top: 10 }\n }\n },\n seriesDefaults: seriesDefaults(options),\n title: title(),\n legend: legend()\n };\n };\n kendo.deepExtend(kendo.dataviz, { chartBaseTheme: baseTheme });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/auto-theme', ['kendo.dataviz.core'], f);\n}(function () {\n (function ($) {\n var cache;\n function autoTheme(force) {\n if (!force && cache) {\n return cache;\n }\n var theme = { chart: kendo.dataviz.chartBaseTheme() };\n var hook = $('
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ').appendTo(document.body);\n function mapColor(key, varName) {\n set(key, queryStyle(varName, 'backgroundColor'));\n }\n function queryStyle(varName, prop) {\n return hook.find('.k-var--' + varName).css(prop);\n }\n function set(path, value) {\n var store = theme;\n var parts = path.split('.');\n var key = parts.shift();\n while (parts.length > 0) {\n store = store[key] = store[key] || {};\n key = parts.shift();\n }\n store[key] = value;\n }\n (function setColors() {\n mapColor('chart.axisDefaults.crosshair.color', 'chart-crosshair-background');\n mapColor('chart.axisDefaults.labels.color', 'normal-text-color');\n mapColor('chart.axisDefaults.line.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.majorGridLines.color', 'chart-major-lines');\n mapColor('chart.axisDefaults.minorGridLines.color', 'chart-minor-lines');\n mapColor('chart.axisDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.axisDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.axisDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.axisDefaults.title.color', 'normal-text-color');\n mapColor('chart.chartArea.background', 'background');\n mapColor('chart.legend.inactiveItems.labels.color', 'chart-inactive');\n mapColor('chart.legend.inactiveItems.markers.color', 'chart-inactive');\n mapColor('chart.legend.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.boxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.boxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.boxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.bullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.candlestick.downColor', 'normal-text-color');\n mapColor('chart.seriesDefaults.candlestick.line.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.errorBars.color', 'chart-error-bars-background');\n mapColor('chart.seriesDefaults.horizontalWaterfall.line.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.icon.border.color', 'chart-major-lines');\n mapColor('chart.seriesDefaults.labels.background', 'background');\n mapColor('chart.seriesDefaults.labels.color', 'normal-text-color');\n mapColor('chart.seriesDefaults.notes.icon.background', 'chart-notes-background');\n mapColor('chart.seriesDefaults.notes.icon.border.color', 'chart-notes-border');\n mapColor('chart.seriesDefaults.notes.line.color', 'chart-notes-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.downColor', 'chart-major-lines');\n mapColor('chart.seriesDefaults.verticalBoxPlot.mean.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.median.color', 'base');\n mapColor('chart.seriesDefaults.verticalBoxPlot.whiskers.color', 'accent');\n mapColor('chart.seriesDefaults.verticalBullet.target.color', 'accent');\n mapColor('chart.seriesDefaults.waterfall.line.color', 'chart-major-lines');\n mapColor('chart.title.color', 'normal-text-color');\n set('chart.seriesDefaults.labels.opacity', queryStyle('chart-area-opacity', 'opacity'));\n mapColor('diagram.shapeDefaults.fill.color', 'accent');\n mapColor('diagram.shapeDefaults.content.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.fill.color', 'normal-text-color');\n mapColor('diagram.shapeDefaults.connectorDefaults.stroke.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.fill.color', 'accent-contrast');\n mapColor('diagram.shapeDefaults.connectorDefaults.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.fill.color', 'normal-background');\n mapColor('diagram.editable.resize.handles.hover.stroke.color', 'normal-text-color');\n mapColor('diagram.editable.resize.handles.hover.fill.color', 'normal-text-color');\n mapColor('diagram.selectable.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.content.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.handles.fill.color', 'accent-contrast');\n mapColor('diagram.connectionDefaults.selection.handles.stroke.color', 'normal-text-color');\n mapColor('diagram.connectionDefaults.selection.stroke.color', 'normal-text-color');\n 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 }());\n (function setFonts() {\n function font(varName) {\n return queryStyle(varName, 'fontSize') + ' ' + queryStyle(varName, 'fontFamily');\n }\n var defaultFont = font('chart-font');\n var titleFont = font('chart-title-font');\n var labelFont = font('chart-label-font');\n set('chart.axisDefaults.labels.font', labelFont);\n set('chart.axisDefaults.notes.label.font', defaultFont);\n set('chart.axisDefaults.title.font', defaultFont);\n set('chart.legend.labels.font', defaultFont);\n set('chart.seriesDefaults.labels.font', labelFont);\n set('chart.seriesDefaults.notes.label.font', defaultFont);\n set('chart.title.font', titleFont);\n }());\n (function setSeriesColors() {\n function letterPos(letter) {\n return letter.toLowerCase().charCodeAt(0) - 'a'.charCodeAt(0);\n }\n function seriesPos(name) {\n return letterPos(name.match(/series-([a-z])$/)[1]);\n }\n var series = $('.k-var--series div').toArray();\n var seriesColors = series.reduce(function (arr, el) {\n var pos = seriesPos(el.className);\n arr[pos] = $(el).css('backgroundColor');\n return arr;\n }, []);\n set('chart.seriesColors', seriesColors);\n }());\n hook.remove();\n cache = theme;\n return theme;\n }\n kendo.dataviz.autoTheme = autoTheme;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/themes/themes', ['dataviz/themes/chart-base-theme'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo, ui = kendo.dataviz.ui, deepExtend = kendo.deepExtend;\n var BLACK = '#000', SANS = 'Arial,Helvetica,sans-serif', SANS12 = '12px ' + SANS, WHITE = '#fff';\n var chartBaseTheme = kendo.dataviz.chartBaseTheme({ gradients: true });\n var gaugeBaseTheme = { scale: { labels: { font: SANS12 } } };\n var diagramBaseTheme = {\n shapeDefaults: {\n hover: { opacity: 0.2 },\n stroke: { width: 0 }\n },\n editable: {\n resize: {\n handles: {\n width: 7,\n height: 7\n }\n }\n },\n selectable: {\n stroke: {\n width: 1,\n dashType: 'dot'\n }\n },\n connectionDefaults: {\n stroke: { width: 2 },\n selection: {\n handles: {\n width: 8,\n height: 8\n }\n },\n editable: {\n tools: [\n 'edit',\n 'delete'\n ]\n }\n }\n };\n var themes = ui.themes, registerTheme = ui.registerTheme = function (themeName, options) {\n var result = {};\n result.chart = deepExtend({}, chartBaseTheme, options.chart);\n result.gauge = deepExtend({}, gaugeBaseTheme, options.gauge);\n result.diagram = deepExtend({}, diagramBaseTheme, options.diagram);\n result.treeMap = deepExtend({}, options.treeMap);\n var defaults = result.chart.seriesDefaults;\n defaults.verticalLine = deepExtend({}, defaults.line);\n defaults.verticalArea = deepExtend({}, defaults.area);\n defaults.rangeArea = deepExtend({}, defaults.area);\n defaults.verticalRangeArea = deepExtend({}, defaults.rangeArea);\n defaults.verticalBoxPlot = deepExtend({}, defaults.boxPlot);\n defaults.polarArea = deepExtend({}, defaults.radarArea);\n defaults.polarLine = deepExtend({}, defaults.radarLine);\n themes[themeName] = result;\n };\n registerTheme('black', {\n chart: {\n title: { color: WHITE },\n legend: {\n labels: { color: WHITE },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: { color: WHITE },\n errorBars: { color: WHITE },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#3d3d3d' } },\n scatter: { markers: { background: '#3d3d3d' } },\n scatterLine: { markers: { background: '#3d3d3d' } },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n candlestick: {\n downColor: '#555',\n line: { color: WHITE },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n ohlc: { line: { color: WHITE } }\n },\n chartArea: { background: '#3d3d3d' },\n seriesColors: [\n '#0081da',\n '#3aafff',\n '#99c900',\n '#ffeb3d',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: WHITE },\n majorGridLines: { color: '#545454' },\n minorGridLines: { color: '#454545' },\n title: { color: WHITE },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: '#3b3b3b',\n border: { color: '#8e8e8e' }\n },\n label: { color: WHITE },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0070e4' },\n scale: {\n rangePlaceholderColor: '#1d1d1d',\n labels: { color: WHITE },\n minorTicks: { color: WHITE },\n majorTicks: { color: WHITE },\n line: { color: WHITE }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#0066cc' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#384049' },\n hover: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0081da',\n '#314b5c'\n ],\n [\n '#3aafff',\n '#3c5464'\n ],\n [\n '#99c900',\n '#4f5931'\n ],\n [\n '#ffeb3d',\n '#64603d'\n ],\n [\n '#b20753',\n '#543241'\n ],\n [\n '#ff4195',\n '#643e4f'\n ]\n ]\n }\n });\n registerTheme('blueopal', {\n chart: {\n title: { color: '#293135' },\n legend: {\n labels: { color: '#293135' },\n inactiveItems: {\n labels: { color: '#27A5BA' },\n markers: { color: '#27A5BA' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#293135' },\n candlestick: {\n downColor: '#c4d0d5',\n line: { color: '#9aabb2' }\n },\n waterfall: { line: { color: '#9aabb2' } },\n horizontalWaterfall: { line: { color: '#9aabb2' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n },\n seriesColors: [\n '#0069a5',\n '#0098ee',\n '#7bd2f6',\n '#ffb800',\n '#ff8517',\n '#e34a00'\n ],\n axisDefaults: {\n line: { color: '#9aabb2' },\n labels: { color: '#293135' },\n majorGridLines: { color: '#c4d0d5' },\n minorGridLines: { color: '#edf1f2' },\n title: { color: '#293135' },\n crosshair: { color: '#9aabb2' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9aabb2' }\n },\n label: { color: '#293135' },\n line: { color: '#9aabb2' }\n }\n }\n },\n gauge: {\n pointer: { color: '#005c83' },\n scale: {\n rangePlaceholderColor: '#daecf4',\n labels: { color: '#293135' },\n minorTicks: { color: '#293135' },\n majorTicks: { color: '#293135' },\n line: { color: '#293135' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#7ec6e3' },\n connectorDefaults: {\n fill: { color: '#003f59' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' }\n }\n },\n content: { color: '#293135' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#003f59' },\n hover: {\n fill: { color: '#003f59' },\n stroke: { color: '#003f59' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#003f59' },\n fill: { color: '#003f59' }\n }\n }\n },\n selectable: { stroke: { color: '#003f59' } },\n connectionDefaults: {\n stroke: { color: '#003f59' },\n content: { color: '#293135' },\n selection: {\n handles: {\n fill: { color: '#3d3d3d' },\n stroke: { color: '#efefef' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#0069a5',\n '#bad7e7'\n ],\n [\n '#0098ee',\n '#b9e0f5'\n ],\n [\n '#7bd2f6',\n '#ceeaf6'\n ],\n [\n '#ffb800',\n '#e6e3c4'\n ],\n [\n '#ff8517',\n '#e4d8c8'\n ],\n [\n '#e34a00',\n '#ddccc2'\n ]\n ]\n }\n });\n registerTheme('highcontrast', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#66465B' },\n markers: { color: '#66465B' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n },\n pie: { overlay: { gradient: 'sharpGlass' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#2c232b' } },\n scatter: { markers: { background: '#2c232b' } },\n scatterLine: { markers: { background: '#2c232b' } },\n area: { opacity: 0.5 },\n waterfall: { line: { color: '#ffffff' } },\n horizontalWaterfall: { line: { color: '#ffffff' } },\n candlestick: {\n downColor: '#664e62',\n line: { color: '#ffffff' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#ffffff',\n opacity: 1\n }\n }\n },\n ohlc: { line: { color: '#ffffff' } }\n },\n chartArea: { background: '#2c232b' },\n seriesColors: [\n '#a7008f',\n '#ffb800',\n '#3aafff',\n '#99c900',\n '#b20753',\n '#ff4195'\n ],\n axisDefaults: {\n line: { color: '#ffffff' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#664e62' },\n minorGridLines: { color: '#4f394b' },\n title: { color: '#ffffff' },\n crosshair: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#ffffff' }\n },\n label: { color: '#ffffff' },\n line: { color: '#ffffff' }\n }\n }\n },\n gauge: {\n pointer: { color: '#a7008f' },\n scale: {\n rangePlaceholderColor: '#2c232b',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#2c232b' },\n majorTicks: { color: '#664e62' },\n line: { color: '#ffffff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#a7018f' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#2c232b' },\n hover: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#2c232b' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#a7008f',\n '#451c3f'\n ],\n [\n '#ffb800',\n '#564122'\n ],\n [\n '#3aafff',\n '#2f3f55'\n ],\n [\n '#99c900',\n '#424422'\n ],\n [\n '#b20753',\n '#471d33'\n ],\n [\n '#ff4195',\n '#562940'\n ]\n ]\n }\n });\n registerTheme('default', {\n chart: {\n title: { color: '#8e8e8e' },\n legend: {\n labels: { color: '#232323' },\n inactiveItems: {\n labels: { color: '#919191' },\n markers: { color: '#919191' }\n }\n },\n seriesDefaults: {\n labels: {\n color: BLACK,\n background: WHITE,\n opacity: 0.5\n },\n errorBars: { color: '#232323' },\n candlestick: {\n downColor: '#dedede',\n line: { color: '#8d8d8d' }\n },\n waterfall: { line: { color: '#8e8e8e' } },\n horizontalWaterfall: { line: { color: '#8e8e8e' } },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n },\n seriesColors: [\n '#ff6800',\n '#a0a700',\n '#ff8d00',\n '#678900',\n '#ffb53c',\n '#396000'\n ],\n axisDefaults: {\n line: { color: '#8e8e8e' },\n labels: { color: '#232323' },\n minorGridLines: { color: '#f0f0f0' },\n majorGridLines: { color: '#dfdfdf' },\n title: { color: '#232323' },\n crosshair: { color: '#8e8e8e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8e8e8e' }\n },\n label: { color: '#232323' },\n line: { color: '#8e8e8e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#ea7001' },\n scale: {\n rangePlaceholderColor: '#dedede',\n labels: { color: '#2e2e2e' },\n minorTicks: { color: '#2e2e2e' },\n majorTicks: { color: '#2e2e2e' },\n line: { color: '#2e2e2e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#e15613' },\n connectorDefaults: {\n fill: { color: '#282828' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#2e2e2e' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' },\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#282828' },\n fill: { color: '#282828' }\n }\n }\n },\n selectable: { stroke: { color: '#a7018f' } },\n connectionDefaults: {\n stroke: { color: '#282828' },\n content: { color: '#2e2e2e' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ff6800',\n '#edcfba'\n ],\n [\n '#a0a700',\n '#dadcba'\n ],\n [\n '#ff8d00',\n '#edd7ba'\n ],\n [\n '#678900',\n '#cfd6ba'\n ],\n [\n '#ffb53c',\n '#eddfc6'\n ],\n [\n '#396000',\n '#c6ceba'\n ]\n ]\n }\n });\n registerTheme('silver', {\n chart: {\n title: { color: '#4e5968' },\n legend: {\n labels: { color: '#4e5968' },\n inactiveItems: {\n labels: { color: '#B1BCC8' },\n markers: { color: '#B1BCC8' }\n }\n },\n seriesDefaults: {\n labels: {\n color: '#293135',\n background: '#eaeaec',\n opacity: 0.5\n },\n errorBars: { color: '#4e5968' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n },\n line: { markers: { background: '#eaeaec' } },\n scatter: { markers: { background: '#eaeaec' } },\n scatterLine: { markers: { background: '#eaeaec' } },\n pie: { connectors: { color: '#A6B1C0' } },\n donut: { connectors: { color: '#A6B1C0' } },\n waterfall: { line: { color: '#a6b1c0' } },\n horizontalWaterfall: { line: { color: '#a6b1c0' } },\n candlestick: { downColor: '#a6afbe' }\n },\n chartArea: { background: '#eaeaec' },\n seriesColors: [\n '#007bc3',\n '#76b800',\n '#ffae00',\n '#ef4c00',\n '#a419b7',\n '#430B62'\n ],\n axisDefaults: {\n line: { color: '#a6b1c0' },\n labels: { color: '#4e5968' },\n majorGridLines: { color: '#dcdcdf' },\n minorGridLines: { color: '#eeeeef' },\n title: { color: '#4e5968' },\n crosshair: { color: '#a6b1c0' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4e5968' }\n },\n label: { color: '#4e5968' },\n line: { color: '#4e5968' }\n }\n }\n },\n gauge: {\n pointer: { color: '#0879c0' },\n scale: {\n rangePlaceholderColor: '#f3f3f4',\n labels: { color: '#515967' },\n minorTicks: { color: '#515967' },\n majorTicks: { color: '#515967' },\n line: { color: '#515967' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#1c82c2' },\n connectorDefaults: {\n fill: { color: '#515967' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#282828' }\n }\n },\n content: { color: '#515967' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' },\n hover: {\n fill: { color: '#515967' },\n stroke: { color: '#515967' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#515967' },\n fill: { color: '#515967' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#515967' },\n content: { color: '#515967' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#515967' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#007bc3',\n '#c2dbea'\n ],\n [\n '#76b800',\n '#dae7c3'\n ],\n [\n '#ffae00',\n '#f5e5c3'\n ],\n [\n '#ef4c00',\n '#f2d2c3'\n ],\n [\n '#a419b7',\n '#e3c7e8'\n ],\n [\n '#430b62',\n '#d0c5d7'\n ]\n ]\n }\n });\n registerTheme('metro', {\n chart: {\n title: { color: '#777777' },\n legend: {\n labels: { color: '#777777' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: BLACK },\n errorBars: { color: '#777777' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n waterfall: { line: { color: '#c7c7c7' } },\n horizontalWaterfall: { line: { color: '#c7c7c7' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#8ebc00',\n '#309b46',\n '#25a0da',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#16aba9',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#c7c7c7' },\n labels: { color: '#777777' },\n minorGridLines: { color: '#c7c7c7' },\n majorGridLines: { color: '#c7c7c7' },\n title: { color: '#777777' },\n crosshair: { color: '#c7c7c7' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#777777' }\n },\n label: { color: '#777777' },\n line: { color: '#777777' }\n }\n }\n },\n gauge: {\n pointer: { color: '#8ebc00' },\n scale: {\n rangePlaceholderColor: '#e6e6e6',\n labels: { color: '#777' },\n minorTicks: { color: '#777' },\n majorTicks: { color: '#777' },\n line: { color: '#777' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#8ebc00' },\n connectorDefaults: {\n fill: { color: BLACK },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: BLACK }\n }\n },\n content: { color: '#777' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#787878' },\n fill: { color: '#787878' }\n }\n }\n },\n selectable: { stroke: { color: '#515967' } },\n connectionDefaults: {\n stroke: { color: '#787878' },\n content: { color: '#777' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#787878' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#8ebc00',\n '#e8f2cc'\n ],\n [\n '#309b46',\n '#d6ebda'\n ],\n [\n '#25a0da',\n '#d3ecf8'\n ],\n [\n '#ff6900',\n '#ffe1cc'\n ],\n [\n '#e61e26',\n '#fad2d4'\n ],\n [\n '#d8e404',\n '#f7facd'\n ],\n [\n '#16aba9',\n '#d0eeee'\n ],\n [\n '#7e51a1',\n '#e5dcec'\n ],\n [\n '#313131',\n '#d6d6d6'\n ],\n [\n '#ed1691',\n '#fbd0e9'\n ]\n ]\n }\n });\n registerTheme('metroblack', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#797979' },\n markers: { color: '#797979' }\n }\n },\n seriesDefaults: {\n border: { _brightness: 1 },\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n },\n line: { markers: { background: '#0e0e0e' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#0e0e0e' } },\n scatterLine: { markers: { background: '#0e0e0e' } },\n candlestick: {\n downColor: '#828282',\n line: { color: '#ffffff' }\n },\n waterfall: { line: { color: '#cecece' } },\n horizontalWaterfall: { line: { color: '#cecece' } },\n overlay: { gradient: 'none' }\n },\n chartArea: { background: '#0e0e0e' },\n seriesColors: [\n '#00aba9',\n '#309b46',\n '#8ebc00',\n '#ff6900',\n '#e61e26',\n '#d8e404',\n '#25a0da',\n '#7e51a1',\n '#313131',\n '#ed1691'\n ],\n axisDefaults: {\n line: { color: '#cecece' },\n labels: { color: '#ffffff' },\n minorGridLines: { color: '#2d2d2d' },\n majorGridLines: { color: '#333333' },\n title: { color: '#ffffff' },\n crosshair: { color: '#cecece' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cecece' }\n },\n label: { color: '#ffffff' },\n line: { color: '#cecece' }\n }\n }\n },\n gauge: {\n pointer: { color: '#00aba9' },\n scale: {\n rangePlaceholderColor: '#2d2d2d',\n labels: { color: '#ffffff' },\n minorTicks: { color: '#333333' },\n majorTicks: { color: '#cecece' },\n line: { color: '#cecece' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#00aba9' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#0e0e0e' },\n hover: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: '#787878' },\n hover: {\n fill: { color: '#787878' },\n stroke: { color: '#787878' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: '#787878' } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#0e0e0e' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#00aba9',\n '#0b2d2d'\n ],\n [\n '#309b46',\n '#152a19'\n ],\n [\n '#8ebc00',\n '#28310b'\n ],\n [\n '#ff6900',\n '#3e200b'\n ],\n [\n '#e61e26',\n '#391113'\n ],\n [\n '#d8e404',\n '#36390c'\n ],\n [\n '#25a0da',\n '#132b37'\n ],\n [\n '#7e51a1',\n '#241b2b'\n ],\n [\n '#313131',\n '#151515'\n ],\n [\n '#ed1691',\n '#3b1028'\n ]\n ]\n }\n });\n registerTheme('moonlight', {\n chart: {\n title: { color: '#ffffff' },\n legend: {\n labels: { color: '#ffffff' },\n inactiveItems: {\n labels: { color: '#A1A7AB' },\n markers: { color: '#A1A7AB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#ffffff' },\n errorBars: { color: '#ffffff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#212a33' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#212a33' } },\n scatterLine: { markers: { background: '#212a33' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#757d87',\n line: { color: '#ea9d06' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: WHITE,\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#8c909e' } },\n horizontalWaterfall: { line: { color: '#8c909e' } },\n ohlc: { line: { color: '#ea9d06' } }\n },\n chartArea: { background: '#212a33' },\n seriesColors: [\n '#ffca08',\n '#ff710f',\n '#ed2e24',\n '#ff9f03',\n '#e13c02',\n '#a00201'\n ],\n axisDefaults: {\n line: { color: '#8c909e' },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n labels: { color: '#ffffff' },\n majorGridLines: { color: '#3e424d' },\n minorGridLines: { color: '#2f3640' },\n title: { color: '#ffffff' },\n crosshair: { color: '#8c909e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#8c909e' }\n },\n label: { color: '#ffffff' },\n line: { color: '#8c909e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#f4af03' },\n scale: {\n rangePlaceholderColor: '#2f3640',\n labels: { color: WHITE },\n minorTicks: { color: '#8c909e' },\n majorTicks: { color: '#8c909e' },\n line: { color: '#8c909e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#f3ae03' },\n connectorDefaults: {\n fill: { color: WHITE },\n stroke: { color: '#414550' },\n hover: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n },\n content: { color: WHITE }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: WHITE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: WHITE },\n fill: { color: WHITE }\n }\n }\n },\n selectable: { stroke: { color: WHITE } },\n connectionDefaults: {\n stroke: { color: WHITE },\n content: { color: WHITE },\n selection: {\n handles: {\n fill: { color: '#414550' },\n stroke: { color: WHITE }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#ffca08',\n '#4e4b2b'\n ],\n [\n '#ff710f',\n '#4e392d'\n ],\n [\n '#ed2e24',\n '#4b2c31'\n ],\n [\n '#ff9f03',\n '#4e422a'\n ],\n [\n '#e13c02',\n '#482e2a'\n ],\n [\n '#a00201',\n '#3b232a'\n ]\n ]\n }\n });\n registerTheme('uniform', {\n chart: {\n title: { color: '#686868' },\n legend: {\n labels: { color: '#686868' },\n inactiveItems: {\n labels: { color: '#B6B6B6' },\n markers: { color: '#B6B6B6' }\n }\n },\n seriesDefaults: {\n labels: { color: '#686868' },\n errorBars: { color: '#686868' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n },\n pie: { overlay: { gradient: 'sharpBevel' } },\n donut: { overlay: { gradient: 'sharpGlass' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.3 },\n candlestick: {\n downColor: '#cccccc',\n line: { color: '#cccccc' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#cccccc',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#9e9e9e' } },\n horizontalWaterfall: { line: { color: '#9e9e9e' } },\n ohlc: { line: { color: '#cccccc' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#527aa3',\n '#6f91b3',\n '#8ca7c2',\n '#a8bdd1',\n '#c5d3e0',\n '#e2e9f0'\n ],\n axisDefaults: {\n line: { color: '#9e9e9e' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n labels: { color: '#686868' },\n majorGridLines: { color: '#dadada' },\n minorGridLines: { color: '#e7e7e7' },\n title: { color: '#686868' },\n crosshair: { color: '#9e9e9e' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#9e9e9e' }\n },\n label: { color: '#686868' },\n line: { color: '#9e9e9e' }\n }\n }\n },\n gauge: {\n pointer: { color: '#527aa3' },\n scale: {\n rangePlaceholderColor: '#e7e7e7',\n labels: { color: '#686868' },\n minorTicks: { color: '#aaaaaa' },\n majorTicks: { color: '#888888' },\n line: { color: '#9e9e9e' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#d1d1d1' },\n connectorDefaults: {\n fill: { color: '#686868' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n },\n content: { color: '#686868' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' },\n hover: {\n fill: { color: '#686868' },\n stroke: { color: '#686868' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#686868' },\n fill: { color: '#686868' }\n }\n }\n },\n selectable: { stroke: { color: '#686868' } },\n connectionDefaults: {\n stroke: { color: '#686868' },\n content: { color: '#686868' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#686868' }\n }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#527aa3',\n '#d0d8e1'\n ],\n [\n '#6f91b3',\n '#d6dde4'\n ],\n [\n '#8ca7c2',\n '#dce1e7'\n ],\n [\n '#a8bdd1',\n '#e2e6ea'\n ],\n [\n '#c5d3e0',\n '#e7eaed'\n ],\n [\n '#e2e9f0',\n '#edeff0'\n ]\n ]\n }\n });\n registerTheme('bootstrap', {\n chart: {\n title: { color: '#333333' },\n legend: {\n labels: { color: '#333333' },\n inactiveItems: {\n labels: { color: '#999999' },\n markers: { color: '#9A9A9A' }\n }\n },\n seriesDefaults: {\n labels: { color: '#333333' },\n overlay: { gradient: 'none' },\n errorBars: { color: '#343434' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#333333' },\n line: { color: '#000000' }\n },\n pie: { overlay: { gradient: 'none' } },\n donut: { overlay: { gradient: 'none' } },\n line: { markers: { background: '#ffffff' } },\n bubble: { opacity: 0.6 },\n scatter: { markers: { background: '#ffffff' } },\n scatterLine: { markers: { background: '#ffffff' } },\n area: { opacity: 0.8 },\n candlestick: {\n downColor: '#d0d0d0',\n line: { color: '#333333' },\n border: {\n _brightness: 1.5,\n opacity: 1\n },\n highlight: {\n border: {\n color: '#b8b8b8',\n opacity: 0.2\n }\n }\n },\n waterfall: { line: { color: '#cccccc' } },\n horizontalWaterfall: { line: { color: '#cccccc' } },\n ohlc: { line: { color: '#333333' } }\n },\n chartArea: { background: '#ffffff' },\n seriesColors: [\n '#428bca',\n '#5bc0de',\n '#5cb85c',\n '#f2b661',\n '#e67d4a',\n '#da3b36'\n ],\n axisDefaults: {\n line: { color: '#cccccc' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n labels: { color: '#333333' },\n majorGridLines: { color: '#cccccc' },\n minorGridLines: { color: '#ebebeb' },\n title: { color: '#333333' },\n crosshair: { color: '#000000' },\n notes: {\n icon: {\n background: '#000000',\n border: { color: '#000000' }\n },\n label: { color: '#ffffff' },\n line: { color: '#000000' }\n }\n }\n },\n gauge: {\n pointer: { color: '#428bca' },\n scale: {\n rangePlaceholderColor: '#cccccc',\n labels: { color: '#333333' },\n minorTicks: { color: '#ebebeb' },\n majorTicks: { color: '#cccccc' },\n line: { color: '#cccccc' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#428bca' },\n connectorDefaults: {\n fill: { color: '#333333' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n }\n },\n content: { color: '#333333' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' },\n hover: {\n fill: { color: '#333333' },\n stroke: { color: '#333333' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#333333' },\n fill: { color: '#333333' }\n }\n }\n },\n selectable: { stroke: { color: '#333333' } },\n connectionDefaults: {\n stroke: { color: '#c4c4c4' },\n content: { color: '#333333' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#333333' }\n },\n stroke: { color: '#333333' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#428bca',\n '#d1e0ec'\n ],\n [\n '#5bc0de',\n '#d6eaf0'\n ],\n [\n '#5cb85c',\n '#d6e9d6'\n ],\n [\n '#5cb85c',\n '#f4e8d7'\n ],\n [\n '#e67d4a',\n '#f2ddd3'\n ],\n [\n '#da3b36',\n '#f0d0cf'\n ]\n ]\n }\n });\n registerTheme('flat', {\n chart: {\n title: { color: '#4c5356' },\n legend: {\n labels: { color: '#4c5356' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#4c5356' },\n errorBars: { color: '#4c5356' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#cdcdcd' } },\n horizontalWaterfall: { line: { color: '#cdcdcd' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#10c4b2',\n '#ff7663',\n '#ffb74f',\n '#a2df53',\n '#1c9ec4',\n '#ff63a5',\n '#1cc47b'\n ],\n axisDefaults: {\n line: { color: '#cdcdcd' },\n labels: { color: '#4c5356' },\n minorGridLines: { color: '#cdcdcd' },\n majorGridLines: { color: '#cdcdcd' },\n title: { color: '#4c5356' },\n crosshair: { color: '#cdcdcd' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#cdcdcd' }\n },\n label: { color: '#4c5356' },\n line: { color: '#cdcdcd' }\n }\n }\n },\n gauge: {\n pointer: { color: '#10c4b2' },\n scale: {\n rangePlaceholderColor: '#cdcdcd',\n labels: { color: '#4c5356' },\n minorTicks: { color: '#4c5356' },\n majorTicks: { color: '#4c5356' },\n line: { color: '#4c5356' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#10c4b2' },\n connectorDefaults: {\n fill: { color: '#363940' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n }\n },\n content: { color: '#4c5356' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' },\n hover: {\n fill: { color: '#363940' },\n stroke: { color: '#363940' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#363940' },\n fill: { color: '#363940' }\n }\n }\n },\n selectable: { stroke: { color: '#363940' } },\n connectionDefaults: {\n stroke: { color: '#cdcdcd' },\n content: { color: '#4c5356' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#363940' }\n },\n stroke: { color: '#363940' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#10c4b2',\n '#cff3f0'\n ],\n [\n '#ff7663',\n '#ffe4e0'\n ],\n [\n '#ffb74f',\n '#fff1dc'\n ],\n [\n '#a2df53',\n '#ecf9dd'\n ],\n [\n '#1c9ec4',\n '#d2ecf3'\n ],\n [\n '#ff63a5',\n '#ffe0ed'\n ],\n [\n '#1cc47b',\n '#d2f3e5'\n ]\n ]\n }\n });\n registerTheme('material', {\n chart: {\n title: { color: '#444444' },\n legend: {\n labels: { color: '#444444' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#444444' },\n errorBars: { color: '#444444' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#e5e5e5' } },\n horizontalWaterfall: { line: { color: '#e5e5e5' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#e5e5e5' },\n labels: { color: '#444444' },\n minorGridLines: { color: '#e5e5e5' },\n majorGridLines: { color: '#e5e5e5' },\n title: { color: '#444444' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#444444' },\n line: { color: '#e5e5e5' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#e5e5e5',\n labels: { color: '#444444' },\n minorTicks: { color: '#444444' },\n majorTicks: { color: '#444444' },\n line: { color: '#444444' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#444444' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' },\n hover: {\n fill: { color: '#444444' },\n stroke: { color: '#444444' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#444444' },\n fill: { color: '#444444' }\n }\n }\n },\n selectable: { stroke: { color: '#444444' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#444444' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#444444' }\n },\n stroke: { color: '#444444' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n registerTheme('materialblack', {\n chart: {\n title: { color: '#fff' },\n legend: {\n labels: { color: '#fff' },\n inactiveItems: {\n labels: { color: '#CBCBCB' },\n markers: { color: '#CBCBCB' }\n }\n },\n seriesDefaults: {\n labels: { color: '#fff' },\n errorBars: { color: '#fff' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#e5e5e5' }\n },\n label: { color: '#fff' },\n line: { color: '#e5e5e5' }\n },\n candlestick: {\n downColor: '#c7c7c7',\n line: { color: '#787878' }\n },\n area: { opacity: 0.9 },\n waterfall: { line: { color: '#4d4d4d' } },\n horizontalWaterfall: { line: { color: '#4d4d4d' } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n chartArea: { background: '#1c1c1c' },\n seriesColors: [\n '#3f51b5',\n '#03a9f4',\n '#4caf50',\n '#f9ce1d',\n '#ff9800',\n '#ff5722'\n ],\n axisDefaults: {\n line: { color: '#4d4d4d' },\n labels: { color: '#fff' },\n minorGridLines: { color: '#4d4d4d' },\n majorGridLines: { color: '#4d4d4d' },\n title: { color: '#fff' },\n crosshair: { color: '#7f7f7f' },\n notes: {\n icon: {\n background: 'transparent',\n border: { color: '#4d4d4d' }\n },\n label: { color: '#fff' },\n line: { color: '#4d4d4d' }\n }\n }\n },\n gauge: {\n pointer: { color: '#3f51b5' },\n scale: {\n rangePlaceholderColor: '#4d4d4d',\n labels: { color: '#fff' },\n minorTicks: { color: '#fff' },\n majorTicks: { color: '#fff' },\n line: { color: '#fff' }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: '#3f51b5' },\n connectorDefaults: {\n fill: { color: '#7f7f7f' },\n stroke: { color: WHITE },\n hover: {\n fill: { color: WHITE },\n stroke: { color: '#7f7f7f' }\n }\n },\n content: { color: '#fff' }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' },\n hover: {\n fill: { color: '#fff' },\n stroke: { color: '#fff' }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: '#fff' },\n fill: { color: '#fff' }\n }\n }\n },\n selectable: { stroke: { color: '#fff' } },\n connectionDefaults: {\n stroke: { color: '#7f7f7f' },\n content: { color: '#fff' },\n selection: {\n handles: {\n fill: { color: WHITE },\n stroke: { color: '#fff' }\n },\n stroke: { color: '#fff' }\n }\n }\n },\n treeMap: {\n colors: [\n [\n '#3f51b5',\n '#cff3f0'\n ],\n [\n '#03a9f4',\n '#e5f6fe'\n ],\n [\n '#4caf50',\n '#edf7ed'\n ],\n [\n '#f9ce1d',\n '#fefae8'\n ],\n [\n '#ff9800',\n '#fff4e5'\n ],\n [\n '#ff5722',\n '#ffeee8'\n ]\n ]\n }\n });\n (function () {\n var TEXT = '#333333';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#dddddd';\n var SERIES = [\n '#008fd3',\n '#99d101',\n '#f39b02',\n '#f05662',\n '#c03c53',\n '#acacac'\n ];\n var SERIES_LIGHT = [\n '#cbe8f5',\n '#eaf5cb',\n '#fceacc',\n '#fbdcdf',\n '#f2d7dc',\n '#eeeeee'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('fiori', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#4e4e4e';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#c8c8c8';\n var AXIS_MINOR = '#e5e5e5';\n var SERIES = [\n '#0072c6',\n '#5db2ff',\n '#008a17',\n '#82ba00',\n '#ff8f32',\n '#ac193d'\n ];\n var SERIES_LIGHT = [\n '#cbe2f3',\n '#deeffe',\n '#cbe7d0',\n '#e5f0cb',\n '#fee8d5',\n '#eed0d7'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#00b0ff',\n border: { color: '#00b0ff' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('office365', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: INACTIVE },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var TEXT = '#32364c';\n var INACTIVE = '#7f7f7f';\n var INACTIVE_SHAPE = '#bdbdbd';\n var AXIS = '#dfe0e1';\n var AXIS_MINOR = '#dfe0e1';\n var SERIES = [\n '#ff4350',\n '#ff9ea5',\n '#00acc1',\n '#80deea',\n '#ffbf46',\n '#ffd78c'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n var DIAGRAM_HOVER = WHITE;\n function noteStyle() {\n return {\n icon: {\n background: '#007cc0',\n border: { color: '#007cc0' }\n },\n label: { color: '#ffffff' },\n line: { color: AXIS }\n };\n }\n registerTheme('nova', {\n chart: {\n title: { color: TEXT },\n legend: {\n labels: { color: TEXT },\n inactiveItems: {\n labels: { color: INACTIVE },\n markers: { color: INACTIVE }\n }\n },\n seriesDefaults: {\n labels: { color: TEXT },\n errorBars: { color: TEXT },\n notes: noteStyle(),\n candlestick: {\n downColor: AXIS,\n line: { color: INACTIVE_SHAPE }\n },\n area: { opacity: 0.8 },\n waterfall: { line: { color: AXIS } },\n horizontalWaterfall: { line: { color: AXIS } },\n overlay: { gradient: 'none' },\n border: { _brightness: 1 }\n },\n seriesColors: SERIES,\n axisDefaults: {\n line: { color: AXIS },\n labels: { color: TEXT },\n minorGridLines: { color: AXIS_MINOR },\n majorGridLines: { color: AXIS },\n title: { color: TEXT },\n crosshair: { color: TEXT },\n notes: noteStyle()\n }\n },\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {\n shapeDefaults: {\n fill: { color: PRIMARY },\n connectorDefaults: {\n fill: { color: TEXT },\n stroke: { color: DIAGRAM_HOVER },\n hover: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: TEXT }\n }\n },\n content: { color: TEXT }\n },\n editable: {\n resize: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE },\n hover: {\n fill: { color: INACTIVE_SHAPE },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n rotate: {\n thumb: {\n stroke: { color: INACTIVE_SHAPE },\n fill: { color: INACTIVE_SHAPE }\n }\n }\n },\n selectable: { stroke: { color: INACTIVE_SHAPE } },\n connectionDefaults: {\n stroke: { color: INACTIVE_SHAPE },\n content: { color: INACTIVE_SHAPE },\n selection: {\n handles: {\n fill: { color: DIAGRAM_HOVER },\n stroke: { color: INACTIVE_SHAPE }\n },\n stroke: { color: INACTIVE_SHAPE }\n }\n }\n },\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n (function () {\n var SERIES = [\n '#ff6358',\n '#ffd246',\n '#78d237',\n '#28b4c8',\n '#2d73f5',\n '#aa46be'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n registerTheme('default-v2', {\n chart: {},\n gauge: {},\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n themes.sass = themes['default-v2'];\n }());\n (function () {\n var TEXT = '#292b2c';\n var AXIS = 'rgba(0, 0, 0, .04)';\n var SERIES = [\n '#0275d8',\n '#5bc0de',\n '#5cb85c',\n '#f0ad4e',\n '#e67d4a',\n '#d9534f'\n ];\n var SERIES_LIGHT = [\n '#ffd9dc',\n '#ffeced',\n '#cceef3',\n '#e6f8fb',\n '#fff2da',\n '#fff7e8'\n ];\n var PRIMARY = SERIES[0];\n registerTheme('bootstrap-v4', {\n chart: {},\n gauge: {\n pointer: { color: PRIMARY },\n scale: {\n rangePlaceholderColor: AXIS,\n labels: { color: TEXT },\n minorTicks: { color: TEXT },\n majorTicks: { color: TEXT },\n line: { color: TEXT }\n }\n },\n diagram: {},\n treeMap: { colors: fuse(SERIES, SERIES_LIGHT) }\n });\n }());\n function fuse(arr1, arr2) {\n return $.map(arr1, function (item, index) {\n return [[\n item,\n arr2[index]\n ]];\n });\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.themes', [\n 'kendo.dataviz.core',\n 'dataviz/themes/chart-base-theme',\n 'dataviz/themes/auto-theme',\n 'dataviz/themes/themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.themes',\n name: 'Themes',\n description: 'Built-in themes for the DataViz widgets',\n category: 'dataviz',\n depends: ['dataviz.core'],\n hidden: true\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/kendo-chart', [\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($) {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var Class = dataviz.Class;\n var isNumber = dataviz.isNumber;\n var datavizConstants = dataviz.constants;\n var MAX_VALUE = datavizConstants.MAX_VALUE;\n var MIN_VALUE = datavizConstants.MIN_VALUE;\n var VALUE = datavizConstants.VALUE;\n var CENTER = datavizConstants.CENTER;\n var TOP = datavizConstants.TOP;\n var BOTTOM = datavizConstants.BOTTOM;\n var LEFT = datavizConstants.LEFT;\n var WHITE = datavizConstants.WHITE;\n var CIRCLE = datavizConstants.CIRCLE;\n var X = datavizConstants.X;\n var Y = datavizConstants.Y;\n var RIGHT = datavizConstants.RIGHT;\n var BLACK = datavizConstants.BLACK;\n var DATE = datavizConstants.DATE;\n var DEFAULT_PRECISION = datavizConstants.DEFAULT_PRECISION;\n var ARC = datavizConstants.ARC;\n var defined = dataviz.defined;\n var getter = dataviz.getter;\n var isArray = dataviz.isArray;\n var ChartElement = dataviz.ChartElement;\n var Point = dataviz.Point;\n var Box = dataviz.Box;\n var alignPathToPixel = dataviz.alignPathToPixel;\n var setDefaultOptions = dataviz.setDefaultOptions;\n var inArray = dataviz.inArray;\n var isFunction = dataviz.isFunction;\n var valueOrDefault = dataviz.valueOrDefault;\n var isObject = dataviz.isObject;\n var deepExtend = dataviz.deepExtend;\n var last = dataviz.last;\n var eventElement = dataviz.eventElement;\n var getTemplate = dataviz.getTemplate;\n var TextBox = dataviz.TextBox;\n var ShapeElement = dataviz.ShapeElement;\n var getSpacing = dataviz.getSpacing;\n var CurveProcessor = dataviz.CurveProcessor;\n var append = dataviz.append;\n var isString = dataviz.isString;\n var parseDate = dataviz.parseDate;\n var styleValue = dataviz.styleValue;\n var CategoryAxis = dataviz.CategoryAxis;\n var BoxElement = dataviz.BoxElement;\n var round = dataviz.round;\n var limitValue = dataviz.limitValue;\n var grep = dataviz.grep;\n var elementStyles = dataviz.elementStyles;\n var hasClasses = dataviz.hasClasses;\n var bindEvents = dataviz.bindEvents;\n var services = dataviz.services;\n var unbindEvents = dataviz.unbindEvents;\n var support = kendo.support;\n var drawing = kendo.drawing;\n var Path = drawing.Path;\n var Animation = drawing.Animation;\n var AnimationFactory = drawing.AnimationFactory;\n var Group = drawing.Group;\n var Color = kendo.Color;\n var geometry = kendo.geometry;\n var GeometryPoint = geometry.Point;\n var transform = geometry.transform;\n var ChartAxis = Class.extend({\n init: function (axis) {\n this._axis = axis;\n this.options = axis.options;\n },\n value: function (point) {\n var axis = this._axis;\n var value = axis.getCategory ? axis.getCategory(point) : axis.getValue(point);\n return value;\n },\n slot: function (from, to, limit) {\n if (limit === void 0) {\n limit = true;\n }\n return this._axis.slot(from, to, limit);\n },\n range: function () {\n return this._axis.range();\n },\n valueRange: function () {\n return this._axis.valueRange();\n }\n });\n function findAxisByName(name, axes) {\n for (var idx = 0; idx < axes.length; idx++) {\n if (axes[idx].options.name === name) {\n axes[idx].prepareUserOptions();\n return new ChartAxis(axes[idx]);\n }\n }\n }\n var ChartPane = kendo.Class.extend({\n init: function (pane) {\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this._pane = pane;\n },\n findAxisByName: function (name) {\n return findAxisByName(name, this._pane.axes);\n }\n });\n var ChartPlotArea = Class.extend({\n init: function (plotArea) {\n this._plotArea = plotArea;\n this.visual = plotArea.visual;\n this.backgroundVisual = plotArea._bgVisual;\n }\n });\n function countNumbers(values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var num = values[i];\n if (isNumber(num)) {\n count++;\n }\n }\n return count;\n }\n var Aggregates = {\n min: function (values) {\n var length = values.length;\n var min = MAX_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n min = Math.min(min, value);\n }\n }\n return min === MAX_VALUE ? values[0] : min;\n },\n max: function (values) {\n var length = values.length;\n var max = MIN_VALUE;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n max = Math.max(max, value);\n }\n }\n return max === MIN_VALUE ? values[0] : max;\n },\n sum: function (values) {\n var length = values.length;\n var sum = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (isNumber(value)) {\n sum += value;\n }\n }\n return sum;\n },\n sumOrNull: function (values) {\n var result = null;\n if (countNumbers(values)) {\n result = Aggregates.sum(values);\n }\n return result;\n },\n count: function (values) {\n var length = values.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n count++;\n }\n }\n return count;\n },\n avg: function (values) {\n var count = countNumbers(values);\n var result = values[0];\n if (count > 0) {\n result = Aggregates.sum(values) / count;\n }\n return result;\n },\n first: function (values) {\n var length = values.length;\n for (var i = 0; i < length; i++) {\n var value = values[i];\n if (value !== null && defined(value)) {\n return value;\n }\n }\n return values[0];\n }\n };\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n var SeriesBinder = Class.extend({\n init: function () {\n this._valueFields = {};\n this._otherFields = {};\n this._nullValue = {};\n this._undefinedValue = {};\n },\n register: function (seriesTypes, valueFields, otherFields) {\n var this$1 = this;\n if (valueFields === void 0) {\n valueFields = [VALUE];\n }\n if (otherFields === void 0) {\n otherFields = {};\n }\n for (var i = 0; i < seriesTypes.length; i++) {\n var type = seriesTypes[i];\n this$1._valueFields[type] = valueFields;\n this$1._otherFields[type] = otherFields;\n this$1._nullValue[type] = this$1._makeValue(valueFields, null);\n this$1._undefinedValue[type] = this$1._makeValue(valueFields, undefined);\n }\n },\n canonicalFields: function (series) {\n return this.valueFields(series).concat(this.otherFields(series));\n },\n valueFields: function (series) {\n return this._valueFields[series.type] || [VALUE];\n },\n otherFields: function (series) {\n return this._otherFields[series.type] || [VALUE];\n },\n bindPoint: function (series, pointIx, item) {\n var data = series.data;\n var pointData = defined(item) ? item : data[pointIx];\n var result = { valueFields: { value: pointData } };\n var valueFields = this.valueFields(series);\n var otherFields = this._otherFields[series.type];\n var fields, value;\n if (pointData === null) {\n value = this._nullValue[series.type];\n } else if (!defined(pointData)) {\n value = this._undefinedValue[series.type];\n } else if (Array.isArray(pointData)) {\n var fieldData = pointData.slice(valueFields.length);\n value = this._bindFromArray(pointData, valueFields);\n fields = this._bindFromArray(fieldData, otherFields);\n } else if (typeof pointData === 'object') {\n var srcValueFields = this.sourceFields(series, valueFields);\n var srcPointFields = this.sourceFields(series, otherFields);\n value = this._bindFromObject(pointData, valueFields, srcValueFields);\n fields = this._bindFromObject(pointData, otherFields, srcPointFields);\n }\n if (defined(value)) {\n if (valueFields.length === 1) {\n result.valueFields.value = value[valueFields[0]];\n } else {\n result.valueFields = value;\n }\n }\n result.fields = fields || {};\n return result;\n },\n _makeValue: function (fields, initialValue) {\n var value = {};\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n value[fieldName] = initialValue;\n }\n return value;\n },\n _bindFromArray: function (array, fields) {\n var value = {};\n if (fields) {\n var length = Math.min(fields.length, array.length);\n for (var i = 0; i < length; i++) {\n value[fields[i]] = array[i];\n }\n }\n return value;\n },\n _bindFromObject: function (object, fields, srcFields) {\n if (srcFields === void 0) {\n srcFields = fields;\n }\n var value = {};\n if (fields) {\n var length = fields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = fields[i];\n var srcFieldName = srcFields[i];\n if (srcFieldName !== null) {\n value[fieldName] = getField(srcFieldName, object);\n }\n }\n }\n return value;\n },\n sourceFields: function (series, canonicalFields) {\n var sourceFields = [];\n if (canonicalFields) {\n var length = canonicalFields.length;\n for (var i = 0; i < length; i++) {\n var fieldName = canonicalFields[i];\n var sourceFieldName = fieldName === VALUE ? 'field' : fieldName + 'Field';\n sourceFields.push(series[sourceFieldName] !== null ? series[sourceFieldName] || fieldName : null);\n }\n }\n return sourceFields;\n }\n });\n SeriesBinder.current = new SeriesBinder();\n var STD_ERR = 'stderr';\n var STD_DEV = 'stddev';\n var percentRegex = /percent(?:\\w*)\\((\\d+)\\)/;\n var standardDeviationRegex = new RegExp('^' + STD_DEV + '(?:\\\\((\\\\d+(?:\\\\.\\\\d+)?)\\\\))?$');\n var ErrorRangeCalculator = Class.extend({\n init: function (errorValue, series, field) {\n this.initGlobalRanges(errorValue, series, field);\n },\n initGlobalRanges: function (errorValue, series, field) {\n var data = series.data;\n var deviationMatch = standardDeviationRegex.exec(errorValue);\n if (deviationMatch) {\n this.valueGetter = this.createValueGetter(series, field);\n var average = this.getAverage(data);\n var deviation = this.getStandardDeviation(data, average, false);\n var multiple = deviationMatch[1] ? parseFloat(deviationMatch[1]) : 1;\n var errorRange = {\n low: average.value - deviation * multiple,\n high: average.value + deviation * multiple\n };\n this.globalRange = function () {\n return errorRange;\n };\n } else if (errorValue.indexOf && errorValue.indexOf(STD_ERR) >= 0) {\n this.valueGetter = this.createValueGetter(series, field);\n var standardError = this.getStandardError(data, this.getAverage(data));\n this.globalRange = function (value) {\n return {\n low: value - standardError,\n high: value + standardError\n };\n };\n }\n },\n createValueGetter: function (series, field) {\n var data = series.data;\n var binder = SeriesBinder.current;\n var valueFields = binder.valueFields(series);\n var item = defined(data[0]) ? data[0] : {};\n var valueGetter;\n if (isArray(item)) {\n var index = field ? valueFields.indexOf(field) : 0;\n valueGetter = getter('[' + index + ']');\n } else if (isNumber(item)) {\n valueGetter = getter();\n } else if (typeof item === datavizConstants.OBJECT) {\n var srcValueFields = binder.sourceFields(series, valueFields);\n valueGetter = getter(srcValueFields[valueFields.indexOf(field)]);\n }\n return valueGetter;\n },\n getErrorRange: function (pointValue, errorValue) {\n var low, high, value;\n if (!defined(errorValue)) {\n return null;\n }\n if (this.globalRange) {\n return this.globalRange(pointValue);\n }\n if (isArray(errorValue)) {\n low = pointValue - errorValue[0];\n high = pointValue + errorValue[1];\n } else if (isNumber(value = parseFloat(errorValue))) {\n low = pointValue - value;\n high = pointValue + value;\n } else if (value = percentRegex.exec(errorValue)) {\n var percentValue = pointValue * (parseFloat(value[1]) / 100);\n low = pointValue - Math.abs(percentValue);\n high = pointValue + Math.abs(percentValue);\n } else {\n throw new Error('Invalid ErrorBar value: ' + errorValue);\n }\n return {\n low: low,\n high: high\n };\n },\n getStandardError: function (data, average) {\n return this.getStandardDeviation(data, average, true) / Math.sqrt(average.count);\n },\n getStandardDeviation: function (data, average, isSample) {\n var this$1 = this;\n var length = data.length;\n var total = isSample ? average.count - 1 : average.count;\n var squareDifferenceSum = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n squareDifferenceSum += Math.pow(value - average.value, 2);\n }\n }\n return Math.sqrt(squareDifferenceSum / total);\n },\n getAverage: function (data) {\n var this$1 = this;\n var length = data.length;\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < length; idx++) {\n var value = this$1.valueGetter(data[idx]);\n if (isNumber(value)) {\n sum += value;\n count++;\n }\n }\n return {\n value: sum / count,\n count: count\n };\n }\n });\n var browser = support.browser || {};\n var INITIAL_ANIMATION_DURATION = 600;\n var FADEIN = 'fadeIn';\n var GLASS = 'glass';\n var BORDER_BRIGHTNESS = 0.8;\n var TOOLTIP_OFFSET = 5;\n var START_SCALE = browser.msie ? 0.001 : 0;\n var ERROR_LOW_FIELD = 'errorLow';\n var ERROR_HIGH_FIELD = 'errorHigh';\n var X_ERROR_LOW_FIELD = 'xErrorLow';\n var X_ERROR_HIGH_FIELD = 'xErrorHigh';\n var Y_ERROR_LOW_FIELD = 'yErrorLow';\n var Y_ERROR_HIGH_FIELD = 'yErrorHigh';\n var LINE_MARKER_SIZE = 8;\n var ZERO = 'zero';\n var INTERPOLATE = 'interpolate';\n var GAP = 'gap';\n var ABOVE = 'above';\n var BELOW = 'below';\n var SMOOTH = 'smooth';\n var STEP = 'step';\n var AREA = 'area';\n var BAR = 'bar';\n var BOX_PLOT = 'boxPlot';\n var BUBBLE = 'bubble';\n var BULLET = 'bullet';\n var CANDLESTICK = 'candlestick';\n var COLUMN = 'column';\n var DONUT = 'donut';\n var FUNNEL = 'funnel';\n var HORIZONTAL_WATERFALL = 'horizontalWaterfall';\n var LINE = 'line';\n var OHLC = 'ohlc';\n var PIE = 'pie';\n var POLAR_AREA = 'polarArea';\n var POLAR_LINE = 'polarLine';\n var POLAR_SCATTER = 'polarScatter';\n var RADAR_AREA = 'radarArea';\n var RADAR_COLUMN = 'radarColumn';\n var RADAR_LINE = 'radarLine';\n var RANGE_AREA = 'rangeArea';\n var RANGE_BAR = 'rangeBar';\n var RANGE_COLUMN = 'rangeColumn';\n var SCATTER = 'scatter';\n var SCATTER_LINE = 'scatterLine';\n var VERTICAL_AREA = 'verticalArea';\n var VERTICAL_BOX_PLOT = 'verticalBoxPlot';\n var VERTICAL_BULLET = 'verticalBullet';\n var VERTICAL_LINE = 'verticalLine';\n var VERTICAL_RANGE_AREA = 'verticalRangeArea';\n var WATERFALL = 'waterfall';\n var EQUALLY_SPACED_SERIES = [\n BAR,\n COLUMN,\n OHLC,\n CANDLESTICK,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n BULLET,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ];\n var LEGEND_ITEM_CLICK = 'legendItemClick';\n var LEGEND_ITEM_HOVER = 'legendItemHover';\n var LEGEND_ITEM_LEAVE = 'legendItemLeave';\n var SERIES_CLICK = 'seriesClick';\n var SERIES_HOVER = 'seriesHover';\n var SERIES_OVER = 'seriesOver';\n var SERIES_LEAVE = 'seriesLeave';\n var PLOT_AREA_CLICK = 'plotAreaClick';\n var PLOT_AREA_HOVER = 'plotAreaHover';\n var PLOT_AREA_LEAVE = 'plotAreaLeave';\n var DRAG = 'drag';\n var DRAG_END = 'dragEnd';\n var DRAG_START = 'dragStart';\n var ZOOM_START = 'zoomStart';\n var ZOOM = 'zoom';\n var ZOOM_END = 'zoomEnd';\n var SELECT_START = 'selectStart';\n var SELECT = 'select';\n var SELECT_END = 'selectEnd';\n var RENDER = 'render';\n var SHOW_TOOLTIP = 'showTooltip';\n var HIDE_TOOLTIP = 'hideTooltip';\n var PANE_RENDER = 'paneRender';\n var LOGARITHMIC = 'log';\n var CATEGORY = 'category';\n var INSIDE_END = 'insideEnd';\n var INSIDE_BASE = 'insideBase';\n var OUTSIDE_END = 'outsideEnd';\n var MOUSEWHEEL = 'DOMMouseScroll mousewheel';\n var MOUSEWHEEL_DELAY = 150;\n var constants = {\n INITIAL_ANIMATION_DURATION: INITIAL_ANIMATION_DURATION,\n FADEIN: FADEIN,\n LEGEND_ITEM_CLICK: LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER: LEGEND_ITEM_HOVER,\n LEGEND_ITEM_LEAVE: LEGEND_ITEM_LEAVE,\n SERIES_CLICK: SERIES_CLICK,\n SERIES_HOVER: SERIES_HOVER,\n SERIES_OVER: SERIES_OVER,\n SERIES_LEAVE: SERIES_LEAVE,\n GLASS: GLASS,\n BORDER_BRIGHTNESS: BORDER_BRIGHTNESS,\n TOOLTIP_OFFSET: TOOLTIP_OFFSET,\n START_SCALE: START_SCALE,\n ERROR_LOW_FIELD: ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD: ERROR_HIGH_FIELD,\n X_ERROR_LOW_FIELD: X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD: X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD: Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD: Y_ERROR_HIGH_FIELD,\n LINE_MARKER_SIZE: LINE_MARKER_SIZE,\n INTERPOLATE: INTERPOLATE,\n ZERO: ZERO,\n SMOOTH: SMOOTH,\n STEP: STEP,\n CATEGORY: CATEGORY,\n FUNNEL: FUNNEL,\n BAR: BAR,\n CANDLESTICK: CANDLESTICK,\n PIE: PIE,\n COLUMN: COLUMN,\n AREA: AREA,\n VERTICAL_BULLET: VERTICAL_BULLET,\n BOX_PLOT: BOX_PLOT,\n OHLC: OHLC,\n WATERFALL: WATERFALL,\n LINE: LINE,\n BULLET: BULLET,\n VERTICAL_LINE: VERTICAL_LINE,\n VERTICAL_AREA: VERTICAL_AREA,\n RANGE_AREA: RANGE_AREA,\n VERTICAL_RANGE_AREA: VERTICAL_RANGE_AREA,\n RANGE_COLUMN: RANGE_COLUMN,\n VERTICAL_BOX_PLOT: VERTICAL_BOX_PLOT,\n RANGE_BAR: RANGE_BAR,\n HORIZONTAL_WATERFALL: HORIZONTAL_WATERFALL,\n SCATTER: SCATTER,\n SCATTER_LINE: SCATTER_LINE,\n BUBBLE: BUBBLE,\n RADAR_AREA: RADAR_AREA,\n RADAR_LINE: RADAR_LINE,\n RADAR_COLUMN: RADAR_COLUMN,\n POLAR_LINE: POLAR_LINE,\n POLAR_AREA: POLAR_AREA,\n POLAR_SCATTER: POLAR_SCATTER,\n RENDER: RENDER,\n PLOT_AREA_CLICK: PLOT_AREA_CLICK,\n PLOT_AREA_HOVER: PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE: PLOT_AREA_LEAVE,\n LOGARITHMIC: LOGARITHMIC,\n DRAG: DRAG,\n DRAG_START: DRAG_START,\n DRAG_END: DRAG_END,\n ZOOM_START: ZOOM_START,\n ZOOM: ZOOM,\n ZOOM_END: ZOOM_END,\n SELECT_START: SELECT_START,\n SELECT: SELECT,\n SELECT_END: SELECT_END,\n PANE_RENDER: PANE_RENDER,\n GAP: GAP,\n DONUT: DONUT,\n INSIDE_END: INSIDE_END,\n INSIDE_BASE: INSIDE_BASE,\n OUTSIDE_END: OUTSIDE_END,\n MOUSEWHEEL: MOUSEWHEEL,\n MOUSEWHEEL_DELAY: MOUSEWHEEL_DELAY,\n SHOW_TOOLTIP: SHOW_TOOLTIP,\n HIDE_TOOLTIP: HIDE_TOOLTIP,\n EQUALLY_SPACED_SERIES: EQUALLY_SPACED_SERIES,\n ABOVE: ABOVE,\n BELOW: BELOW\n };\n var DEFAULT_ERROR_BAR_WIDTH = 4;\n var ErrorBarBase = ChartElement.extend({\n init: function (low, high, isVertical, chart, series, options) {\n ChartElement.fn.init.call(this, options);\n this.low = low;\n this.high = high;\n this.isVertical = isVertical;\n this.chart = chart;\n this.series = series;\n },\n reflow: function (targetBox) {\n var endCaps = this.options.endCaps;\n var isVertical = this.isVertical;\n var axis = this.getAxis();\n var valueBox = axis.getSlot(this.low, this.high);\n var centerBox = targetBox.center();\n var capsWidth = this.getCapsWidth(targetBox, isVertical);\n var capValue = isVertical ? centerBox.x : centerBox.y;\n var capStart = capValue - capsWidth;\n var capEnd = capValue + capsWidth;\n var linePoints;\n if (isVertical) {\n linePoints = [\n new Point(centerBox.x, valueBox.y1),\n new Point(centerBox.x, valueBox.y2)\n ];\n if (endCaps) {\n linePoints.push(new Point(capStart, valueBox.y1), new Point(capEnd, valueBox.y1), new Point(capStart, valueBox.y2), new Point(capEnd, valueBox.y2));\n }\n this.box = new Box(capStart, valueBox.y1, capEnd, valueBox.y2);\n } else {\n linePoints = [\n new Point(valueBox.x1, centerBox.y),\n new Point(valueBox.x2, centerBox.y)\n ];\n if (endCaps) {\n linePoints.push(new Point(valueBox.x1, capStart), new Point(valueBox.x1, capEnd), new Point(valueBox.x2, capStart), new Point(valueBox.x2, capEnd));\n }\n this.box = new Box(valueBox.x1, capStart, valueBox.x2, capEnd);\n }\n this.linePoints = linePoints;\n },\n getCapsWidth: function (box, isVertical) {\n var boxSize = isVertical ? box.width() : box.height();\n var capsWidth = Math.min(Math.floor(boxSize / 2), DEFAULT_ERROR_BAR_WIDTH) || DEFAULT_ERROR_BAR_WIDTH;\n return capsWidth;\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual = options.visual;\n if (visual) {\n this.visual = visual({\n low: this.low,\n high: this.high,\n rect: this.box.toRect(),\n sender: this.getSender(),\n options: {\n endCaps: options.endCaps,\n color: options.color,\n line: options.line\n },\n createVisual: function () {\n this$1.createDefaultVisual();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n } else {\n this.createDefaultVisual();\n }\n },\n createDefaultVisual: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var linePoints = ref.linePoints;\n var lineOptions = {\n stroke: {\n color: options.color,\n width: options.line.width,\n dashType: options.line.dashType\n }\n };\n ChartElement.fn.createVisual.call(this);\n for (var idx = 0; idx < linePoints.length; idx += 2) {\n var line = new Path(lineOptions).moveTo(linePoints[idx].x, linePoints[idx].y).lineTo(linePoints[idx + 1].x, linePoints[idx + 1].y);\n alignPathToPixel(line);\n this$1.visual.append(line);\n }\n }\n });\n setDefaultOptions(ErrorBarBase, {\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n },\n endCaps: true,\n line: { width: 2 },\n zIndex: 1\n });\n var CategoricalErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axis = this.chart.seriesValueAxis(this.series);\n return axis;\n }\n });\n var MAX_EXPAND_DEPTH = 5;\n function evalOptions(options, context, state, dryRun) {\n if (state === void 0) {\n state = {};\n }\n if (dryRun === void 0) {\n dryRun = false;\n }\n var defaults = state.defaults = state.defaults || {};\n var depth = state.depth = state.depth || 0;\n var needsEval = false;\n state.excluded = state.excluded || [];\n if (depth > MAX_EXPAND_DEPTH) {\n return null;\n }\n for (var property in options) {\n if (!inArray(property, state.excluded) && options.hasOwnProperty(property)) {\n var propValue = options[property];\n if (isFunction(propValue)) {\n needsEval = true;\n if (!dryRun) {\n options[property] = valueOrDefault(propValue(context), defaults[property]);\n }\n } else if (isObject(propValue)) {\n if (!dryRun) {\n state.defaults = defaults[property];\n }\n state.depth++;\n needsEval = evalOptions(propValue, context, state, dryRun) || needsEval;\n state.depth--;\n }\n }\n }\n return needsEval;\n }\n function categoriesCount(series) {\n var seriesCount = series.length;\n var categories = 0;\n for (var i = 0; i < seriesCount; i++) {\n categories = Math.max(categories, series[i].data.length);\n }\n return categories;\n }\n var CategoricalChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.categoryAxis = plotArea.seriesCategoryAxis(options.series[0]);\n this.valueAxisRanges = {};\n this.points = [];\n this.categoryPoints = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, { vertical: !this.options.invertAxes }, series);\n }\n return options;\n },\n plotValue: function (point) {\n if (!point) {\n return 0;\n }\n if (this.options.isStacked100 && isNumber(point.value)) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n var otherValues = [];\n var categorySum = 0;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (other) {\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack && stack.group !== otherStack.group) {\n continue;\n }\n if (isNumber(other.value)) {\n categorySum += Math.abs(other.value);\n otherValues.push(Math.abs(other.value));\n }\n }\n }\n if (categorySum > 0) {\n return point.value / categorySum;\n }\n }\n return point.value;\n },\n plotRange: function (point, startValue) {\n var this$1 = this;\n if (startValue === void 0) {\n startValue = 0;\n }\n var categoryPoints = this.categoryPoints[point.categoryIx];\n if (this.options.isStacked) {\n var plotValue = this.plotValue(point);\n var positive = plotValue >= 0;\n var prevValue = startValue;\n var isStackedBar = false;\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n var stack = point.series.stack;\n var otherStack = other.series.stack;\n if (stack && otherStack) {\n if (typeof stack === datavizConstants.STRING && stack !== otherStack) {\n continue;\n }\n if (stack.group && stack.group !== otherStack.group) {\n continue;\n }\n }\n var otherValue = this$1.plotValue(other);\n if (otherValue >= 0 && positive || otherValue < 0 && !positive) {\n prevValue += otherValue;\n plotValue += otherValue;\n isStackedBar = true;\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n if (isStackedBar) {\n prevValue -= startValue;\n }\n return [\n prevValue,\n plotValue\n ];\n }\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n dataviz.convertableToNumber(point.value) ? point.value : axisCrossingValue\n ];\n },\n stackLimits: function (axisName, stackName) {\n var this$1 = this;\n var min = MAX_VALUE;\n var max = MIN_VALUE;\n for (var i = 0; i < this.categoryPoints.length; i++) {\n var categoryPoints = this$1.categoryPoints[i];\n if (!categoryPoints) {\n continue;\n }\n for (var pIx = 0; pIx < categoryPoints.length; pIx++) {\n var point = categoryPoints[pIx];\n if (point) {\n if (point.series.stack === stackName || point.series.axis === axisName) {\n var to = this$1.plotRange(point, 0)[1];\n if (defined(to) && isFinite(to)) {\n max = Math.max(max, to);\n min = Math.min(min, to);\n }\n }\n }\n }\n }\n return {\n min: min,\n max: max\n };\n },\n updateStackRange: function () {\n var this$1 = this;\n var ref = this.options;\n var isStacked = ref.isStacked;\n var chartSeries = ref.series;\n var limitsCache = {};\n if (isStacked) {\n for (var i = 0; i < chartSeries.length; i++) {\n var series = chartSeries[i];\n var axisName = series.axis;\n var key = axisName + series.stack;\n var limits = limitsCache[key];\n if (!limits) {\n limits = this$1.stackLimits(axisName, series.stack);\n var errorTotals = this$1.errorTotals;\n if (errorTotals) {\n if (errorTotals.negative.length) {\n limits.min = Math.min(limits.min, dataviz.sparseArrayLimits(errorTotals.negative).min);\n }\n if (errorTotals.positive.length) {\n limits.max = Math.max(limits.max, dataviz.sparseArrayLimits(errorTotals.positive).max);\n }\n }\n if (limits.min !== MAX_VALUE || limits.max !== MIN_VALUE) {\n limitsCache[key] = limits;\n } else {\n limits = null;\n }\n }\n if (limits) {\n this$1.valueAxisRanges[axisName] = limits;\n }\n }\n }\n },\n addErrorBar: function (point, data, categoryIx) {\n var value = point.value;\n var series = point.series;\n var seriesIx = point.seriesIx;\n var errorBars = point.options.errorBars;\n var lowValue = data.fields[ERROR_LOW_FIELD];\n var highValue = data.fields[ERROR_HIGH_FIELD];\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n } else if (errorBars && defined(errorBars.value)) {\n this.seriesErrorRanges = this.seriesErrorRanges || [];\n this.seriesErrorRanges[seriesIx] = this.seriesErrorRanges[seriesIx] || new ErrorRangeCalculator(errorBars.value, series, VALUE);\n errorRange = this.seriesErrorRanges[seriesIx].getErrorRange(value, errorBars.value);\n }\n if (errorRange) {\n point.low = errorRange.low;\n point.high = errorRange.high;\n this.addPointErrorBar(point, categoryIx);\n }\n },\n addPointErrorBar: function (point, categoryIx) {\n var isVertical = !this.options.invertAxes;\n var options = point.options.errorBars;\n var series = point.series;\n var low = point.low;\n var high = point.high;\n if (this.options.isStacked) {\n var stackedErrorRange = this.stackedErrorRange(point, categoryIx);\n low = stackedErrorRange.low;\n high = stackedErrorRange.high;\n } else {\n var fields = {\n categoryIx: categoryIx,\n series: series\n };\n this.updateRange({ value: low }, fields);\n this.updateRange({ value: high }, fields);\n }\n var errorBar = new CategoricalErrorBar(low, high, isVertical, this, series, options);\n point.errorBars = [errorBar];\n point.append(errorBar);\n },\n stackedErrorRange: function (point, categoryIx) {\n var plotValue = this.plotRange(point, 0)[1] - point.value;\n var low = point.low + plotValue;\n var high = point.high + plotValue;\n this.errorTotals = this.errorTotals || {\n positive: [],\n negative: []\n };\n if (low < 0) {\n this.errorTotals.negative[categoryIx] = Math.min(this.errorTotals.negative[categoryIx] || 0, low);\n }\n if (high > 0) {\n this.errorTotals.positive[categoryIx] = Math.max(this.errorTotals.positive[categoryIx] || 0, high);\n }\n return {\n low: low,\n high: high\n };\n },\n addValue: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n if (!categoryPoints) {\n this.categoryPoints[categoryIx] = categoryPoints = [];\n }\n var seriesPoints = this.seriesPoints[seriesIx];\n if (!seriesPoints) {\n this.seriesPoints[seriesIx] = seriesPoints = [];\n }\n var point = this.createPoint(data, fields);\n if (point) {\n $.extend(point, fields);\n point.owner = this;\n point.noteText = data.fields.noteText;\n if (!defined(point.dataItem)) {\n point.dataItem = series.data[categoryIx];\n }\n this.addErrorBar(point, data, categoryIx);\n }\n this.points.push(point);\n seriesPoints.push(point);\n categoryPoints.push(point);\n this.updateRange(data.valueFields, fields);\n },\n evalPointOptions: function (options, value, category, categoryIx, series, seriesIx) {\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'aggregate',\n '_events',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, pointOptions);\n evalOptions(pointOptions, {\n value: value,\n category: category,\n index: categoryIx,\n series: series,\n dataItem: series.data[categoryIx]\n }, state);\n }\n return pointOptions;\n },\n updateRange: function (data, fields) {\n var axisName = fields.series.axis;\n var value = data.value;\n var axisRange = this.valueAxisRanges[axisName];\n if (isFinite(value) && value !== null) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, value);\n axisRange.max = Math.max(axisRange.max, value);\n }\n },\n seriesValueAxis: function (series) {\n var plotArea = this.plotArea;\n var axisName = series.axis;\n var axis = axisName ? plotArea.namedValueAxes[axisName] : plotArea.valueAxis;\n if (!axis) {\n throw new Error('Unable to locate value axis with name ' + axisName);\n }\n return axis;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var categorySlots = this.categorySlots = [];\n var chartPoints = this.points;\n var categoryAxis = this.categoryAxis;\n var pointIx = 0;\n this.traverseDataPoints(function (data, fields) {\n var categoryIx = fields.categoryIx;\n var currentSeries = fields.series;\n var valueAxis = this$1.seriesValueAxis(currentSeries);\n var point = chartPoints[pointIx++];\n var categorySlot = categorySlots[categoryIx];\n if (!categorySlot) {\n categorySlots[categoryIx] = categorySlot = this$1.categorySlot(categoryAxis, categoryIx, valueAxis);\n }\n if (point) {\n var plotRange = this$1.plotRange(point, valueAxis.startValue());\n var valueSlot = this$1.valueSlot(valueAxis, plotRange);\n if (valueSlot) {\n var pointSlot = this$1.pointSlot(categorySlot, valueSlot);\n point.aboveAxis = this$1.aboveAxis(point, valueAxis);\n point.stackValue = plotRange[1];\n if (this$1.options.isStacked100) {\n point.percentage = this$1.plotValue(point);\n }\n this$1.reflowPoint(point, pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.reflowCategories(categorySlots);\n if (!this.options.clip && this.options.limitPoints && this.points.length) {\n this.limitPoints();\n }\n this.box = targetBox;\n },\n valueSlot: function (valueAxis, plotRange) {\n return valueAxis.getSlot(plotRange[0], plotRange[1], !this.options.clip);\n },\n limitPoints: function () {\n var this$1 = this;\n var categoryPoints = this.categoryPoints;\n var points = categoryPoints[0].concat(last(categoryPoints));\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx]) {\n this$1.limitPoint(points[idx]);\n }\n }\n },\n limitPoint: function (point) {\n var limittedSlot = this.categoryAxis.limitSlot(point.box);\n if (!limittedSlot.equals(point.box)) {\n point.reflow(limittedSlot);\n }\n },\n aboveAxis: function (point, valueAxis) {\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n var value = point.value;\n return valueAxis.options.reverse ? value < axisCrossingValue : value >= axisCrossingValue;\n },\n categoryAxisCrossingValue: function (valueAxis) {\n var categoryAxis = this.categoryAxis;\n var options = valueAxis.options;\n var crossingValues = [].concat(options.axisCrossingValues || options.axisCrossingValue);\n return crossingValues[categoryAxis.axisIndex || 0] || 0;\n },\n reflowPoint: function (point, pointSlot) {\n point.reflow(pointSlot);\n },\n reflowCategories: function () {\n },\n pointSlot: function (categorySlot, valueSlot) {\n var options = this.options;\n var invertAxes = options.invertAxes;\n var slotX = invertAxes ? valueSlot : categorySlot;\n var slotY = invertAxes ? categorySlot : valueSlot;\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var series = this.options.series;\n var count = categoriesCount(series);\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n this$1._outOfRangeCallback(series[seriesIx], '_outOfRangeMinPoint', seriesIx, callback);\n }\n for (var categoryIx = 0; categoryIx < count; categoryIx++) {\n for (var seriesIx$1 = 0; seriesIx$1 < seriesCount; seriesIx$1++) {\n var currentSeries = series[seriesIx$1];\n var currentCategory = this$1.categoryAxis.categoryAt(categoryIx);\n var pointData = this$1._bindPoint(currentSeries, seriesIx$1, categoryIx);\n callback(pointData, {\n category: currentCategory,\n categoryIx: categoryIx,\n categoriesCount: count,\n series: currentSeries,\n seriesIx: seriesIx$1\n });\n }\n }\n for (var seriesIx$2 = 0; seriesIx$2 < seriesCount; seriesIx$2++) {\n this$1._outOfRangeCallback(series[seriesIx$2], '_outOfRangeMaxPoint', seriesIx$2, callback);\n }\n },\n _outOfRangeCallback: function (series, field, seriesIx, callback) {\n var outOfRangePoint = series[field];\n if (outOfRangePoint) {\n var categoryIx = outOfRangePoint.categoryIx;\n var pointData = this._bindPoint(series, seriesIx, categoryIx, outOfRangePoint.item);\n callback(pointData, {\n category: outOfRangePoint.category,\n categoryIx: categoryIx,\n series: series,\n seriesIx: seriesIx,\n dataItem: outOfRangePoint.item\n });\n }\n },\n _bindPoint: function (series, seriesIx, categoryIx, item) {\n if (!this._bindCache) {\n this._bindCache = [];\n }\n var bindCache = this._bindCache[seriesIx];\n if (!bindCache) {\n bindCache = this._bindCache[seriesIx] = [];\n }\n var data = bindCache[categoryIx];\n if (!data) {\n data = bindCache[categoryIx] = SeriesBinder.current.bindPoint(series, categoryIx, item);\n }\n return data;\n },\n formatPointValue: function (point, format) {\n if (point.value === null) {\n return '';\n }\n return this.chartService.format.auto(format, point.value);\n },\n pointValue: function (data) {\n return data.valueFields.value;\n }\n });\n setDefaultOptions(CategoricalChart, {\n series: [],\n invertAxes: false,\n isStacked: false,\n clip: true,\n limitPoints: true\n });\n var PointEventsMixin = {\n click: function (chart, e) {\n return chart.trigger(SERIES_CLICK, this.eventArgs(e));\n },\n hover: function (chart, e) {\n return chart.trigger(SERIES_HOVER, this.eventArgs(e));\n },\n over: function (chart, e) {\n return chart.trigger(SERIES_OVER, this.eventArgs(e));\n },\n out: function (chart, e) {\n return chart.trigger(SERIES_LEAVE, this.eventArgs(e));\n },\n eventArgs: function (e) {\n return {\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n category: this.category,\n series: this.series,\n dataItem: this.dataItem,\n runningTotal: this.runningTotal,\n total: this.total,\n element: eventElement(e),\n originalEvent: e,\n point: this\n };\n }\n };\n var NoteMixin = {\n createNote: function () {\n var options = this.options.notes;\n var text = this.noteText || options.label.text;\n if (options.visible !== false && defined(text) && text !== null) {\n this.note = new dataviz.Note({\n value: this.value,\n text: text,\n dataItem: this.dataItem,\n category: this.category,\n series: this.series\n }, this.options.notes, this.owner.chartService);\n this.append(this.note);\n }\n }\n };\n var LinePoint = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this);\n this.value = value;\n this.options = options;\n this.aboveAxis = valueOrDefault(this.options.aboveAxis, true);\n this.tooltipTracking = true;\n },\n render: function () {\n var ref = this.options;\n var markers = ref.markers;\n var labels = ref.labels;\n if (this._rendered) {\n return;\n }\n this._rendered = true;\n if (markers.visible && markers.size) {\n this.marker = this.createMarker();\n this.append(this.marker);\n }\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var pointData = this.pointData();\n var labelText = this.value;\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = this.formatValue(labels.format);\n }\n this.label = new TextBox(labelText, deepExtend({\n align: CENTER,\n vAlign: CENTER,\n margin: {\n left: 5,\n right: 5\n },\n zIndex: valueOrDefault(labels.zIndex, this.series.zIndex)\n }, labels), pointData);\n this.append(this.label);\n }\n this.createNote();\n if (this.errorBar) {\n this.append(this.errorBar);\n }\n },\n markerBorder: function () {\n var options = this.options.markers;\n var background = options.background;\n var border = deepExtend({ color: this.color }, options.border);\n if (!defined(border.color)) {\n border.color = new Color(background).brightness(BORDER_BRIGHTNESS).toHex();\n }\n return border;\n },\n createVisual: function () {\n },\n createMarker: function () {\n var options = this.options.markers;\n var marker = new ShapeElement({\n type: options.type,\n width: options.size,\n height: options.size,\n rotation: options.rotation,\n background: options.background,\n border: this.markerBorder(),\n opacity: options.opacity,\n zIndex: valueOrDefault(options.zIndex, this.series.zIndex),\n animation: options.animation,\n visual: options.visual\n }, {\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n category: this.category\n });\n return marker;\n },\n markerBox: function () {\n if (!this.marker) {\n this.marker = this.createMarker();\n this.marker.reflow(this._childBox);\n }\n return this.marker.box;\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var aboveAxis = ref.aboveAxis;\n var vertical = options.vertical;\n this.render();\n this.box = targetBox;\n var childBox = targetBox.clone();\n if (vertical) {\n if (aboveAxis) {\n childBox.y1 -= childBox.height();\n } else {\n childBox.y2 += childBox.height();\n }\n } else {\n if (aboveAxis) {\n childBox.x1 += childBox.width();\n } else {\n childBox.x2 -= childBox.width();\n }\n }\n this._childBox = childBox;\n if (this.marker) {\n this.marker.reflow(childBox);\n }\n this.reflowLabel(childBox);\n if (this.errorBars) {\n for (var i = 0; i < this.errorBars.length; i++) {\n this$1.errorBars[i].reflow(childBox);\n }\n }\n if (this.note) {\n var noteTargetBox = this.markerBox();\n if (!(options.markers.visible && options.markers.size)) {\n var center = noteTargetBox.center();\n noteTargetBox = new Box(center.x, center.y, center.x, center.y);\n }\n this.note.reflow(noteTargetBox);\n }\n },\n reflowLabel: function (box) {\n var ref = this;\n var options = ref.options;\n var label = ref.label;\n var anchor = options.labels.position;\n if (label) {\n anchor = anchor === ABOVE ? TOP : anchor;\n anchor = anchor === BELOW ? BOTTOM : anchor;\n label.reflow(box);\n label.box.alignTo(this.markerBox(), anchor);\n label.reflow(label.box);\n }\n },\n createHighlight: function () {\n var markers = this.options.highlight.markers;\n var defaultColor = this.markerBorder().color;\n var options = this.options.markers;\n var size = options.size + (options.border.width || 0) + (markers.border.width || 0);\n var shadow = new ShapeElement({\n type: options.type,\n width: size,\n height: size,\n rotation: options.rotation,\n background: markers.color || defaultColor,\n border: {\n color: markers.border.color,\n width: markers.border.width,\n opacity: valueOrDefault(markers.border.opacity, 1)\n },\n opacity: valueOrDefault(markers.opacity, 1)\n });\n shadow.reflow(this._childBox);\n return shadow.getElement();\n },\n highlightVisual: function () {\n return (this.marker || {}).visual;\n },\n highlightVisualArgs: function () {\n var marker = this.marker;\n var visual, rect;\n if (marker) {\n rect = marker.paddingBox.toRect();\n visual = marker.visual;\n } else {\n var size = this.options.markers.size;\n var halfSize = size / 2;\n var center = this.box.center();\n rect = new geometry.Rect([\n center.x - halfSize,\n center.y - halfSize\n ], [\n size,\n size\n ]);\n }\n return {\n options: this.options,\n rect: rect,\n visual: visual\n };\n },\n tooltipAnchor: function () {\n var markerBox = this.markerBox();\n var clipBox = this.owner.pane.clipBox();\n var showTooltip = !clipBox || clipBox.overlaps(markerBox);\n if (showTooltip) {\n var x = markerBox.x2 + TOOLTIP_OFFSET;\n var horizontalAlign = LEFT;\n var y, verticalAlign;\n if (this.aboveAxis) {\n y = markerBox.y1;\n verticalAlign = BOTTOM;\n } else {\n y = markerBox.y2;\n verticalAlign = TOP;\n }\n return {\n point: new Point(x, y),\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n overlapsBox: function (box) {\n var markerBox = this.markerBox();\n return markerBox.overlaps(box);\n },\n unclipElements: function () {\n if (this.label) {\n this.label.options.noclip = true;\n }\n if (this.note) {\n this.note.options.noclip = true;\n }\n },\n pointData: function () {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n percentage: this.percentage,\n stackValue: this.stackValue,\n series: this.series\n };\n }\n });\n LinePoint.prototype.defaults = {\n vertical: true,\n markers: {\n visible: true,\n background: WHITE,\n size: LINE_MARKER_SIZE,\n type: CIRCLE,\n border: { width: 2 },\n opacity: 1\n },\n labels: {\n visible: false,\n position: ABOVE,\n margin: getSpacing(3),\n padding: getSpacing(4),\n animation: {\n type: FADEIN,\n delay: INITIAL_ANIMATION_DURATION\n }\n },\n notes: { label: {} },\n highlight: {\n markers: {\n border: {\n color: '#fff',\n width: 2\n }\n },\n zIndex: datavizConstants.HIGHLIGHT_ZINDEX\n },\n errorBars: { line: { width: 1 } }\n };\n deepExtend(LinePoint.prototype, PointEventsMixin);\n deepExtend(LinePoint.prototype, NoteMixin);\n var LineSegment = ChartElement.extend({\n init: function (linePoints, series, seriesIx) {\n ChartElement.fn.init.call(this);\n this.linePoints = linePoints;\n this.series = series;\n this.seriesIx = seriesIx;\n },\n points: function () {\n return this.toGeometryPoints(this.linePoints);\n },\n toGeometryPoints: function (points) {\n var result = [];\n for (var i = 0, length = points.length; i < length; i++) {\n if (points[i] && points[i].visible !== false) {\n result.push(points[i]._childBox.toRect().center());\n }\n }\n return result;\n },\n createVisual: function () {\n var this$1 = this;\n var customVisual = this.series.visual;\n if (customVisual) {\n this.visual = customVisual({\n points: this.toGeometryPoints(this.linePoints),\n series: this.series,\n sender: this.getSender(),\n createVisual: function () {\n this$1.segmentVisual();\n return this$1.visual;\n }\n });\n if (this.visual && !defined(this.visual.options.zIndex)) {\n this.visual.options.zIndex = this.series.zIndex;\n }\n } else {\n this.segmentVisual();\n }\n },\n segmentVisual: function () {\n var ref = this;\n var options = ref.options;\n var series = ref.series;\n var color = series.color;\n var defaults = series._defaults;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var line = Path.fromPoints(this.points(), {\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n if (options.closed) {\n line.close();\n }\n this.visual = line;\n },\n aliasFor: function (e, coords) {\n return this.parent.getNearestPoint(coords.x, coords.y, this.seriesIx);\n }\n });\n setDefaultOptions(LineSegment, { closed: false });\n var StepLineMixin = {\n calculateStepPoints: function (points) {\n var categoryAxis = this.parent.plotArea.seriesCategoryAxis(this.series);\n var ref = categoryAxis.options;\n var justified = ref.justified;\n var vertical = ref.vertical;\n var reverse = ref.reverse;\n var stepAxis = vertical ? X : Y;\n var axis = vertical ? Y : X;\n var stepDir = reverse ? 2 : 1;\n var dir = stepDir;\n var previousPoint = toGeometryPoint(points[0], stepAxis, stepDir, axis, dir);\n var result = [previousPoint];\n for (var idx = 1; idx < points.length; idx++) {\n var point = toGeometryPoint(points[idx], stepAxis, stepDir, axis, dir);\n if (previousPoint[stepAxis] !== point[stepAxis]) {\n var stepPoint = new GeometryPoint();\n stepPoint[stepAxis] = previousPoint[stepAxis];\n stepPoint[axis] = point[axis];\n result.push(stepPoint, point);\n }\n previousPoint = point;\n }\n if (!justified) {\n result.push(toGeometryPoint(last(points), stepAxis, stepDir, axis, reverse ? 1 : 2));\n } else if (previousPoint !== last(result)) {\n result.push(previousPoint);\n }\n return result;\n }\n };\n function toGeometryPoint(lintPoint, stepAxis, stepDir, axis, dir) {\n var box = lintPoint.box;\n var result = new GeometryPoint();\n result[stepAxis] = box[stepAxis + stepDir];\n result[axis] = box[axis + dir];\n return result;\n }\n var StepLineSegment = LineSegment.extend({\n points: function () {\n return this.calculateStepPoints(this.linePoints);\n }\n });\n deepExtend(StepLineSegment.prototype, StepLineMixin);\n var SplineSegment = LineSegment.extend({\n segmentVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var curveProcessor = new CurveProcessor(this.options.closed);\n var segments = curveProcessor.process(this.points());\n var curve = new Path({\n stroke: {\n color: color,\n width: series.width,\n opacity: series.opacity,\n dashType: series.dashType\n },\n zIndex: series.zIndex\n });\n curve.segments.push.apply(curve.segments, segments);\n this.visual = curve;\n }\n });\n var LineChartMixin = {\n renderSegments: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesPoints = ref.seriesPoints;\n var series = options.series;\n var seriesCount = seriesPoints.length;\n var lastSegment;\n this._segments = [];\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var sortedPoints = this$1.sortPoints(seriesPoints[seriesIx]);\n var pointCount = sortedPoints.length;\n var linePoints = [];\n for (var pointIx = 0; pointIx < pointCount; pointIx++) {\n var point = sortedPoints[pointIx];\n if (point) {\n linePoints.push(point);\n } else if (this$1.seriesMissingValues(currentSeries) !== INTERPOLATE) {\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n linePoints = [];\n }\n }\n if (linePoints.length > 1) {\n lastSegment = this$1.createSegment(linePoints, currentSeries, seriesIx, lastSegment);\n this$1._addSegment(lastSegment);\n }\n }\n this.children.unshift.apply(this.children, this._segments);\n },\n _addSegment: function (segment) {\n this._segments.push(segment);\n segment.parent = this;\n },\n sortPoints: function (points) {\n return points;\n },\n seriesMissingValues: function (series) {\n var missingValues = series.missingValues;\n var assumeZero = !missingValues && this.options.isStacked;\n return assumeZero ? ZERO : missingValues || INTERPOLATE;\n },\n getNearestPoint: function (x, y, seriesIx) {\n var target = new Point(x, y);\n var allPoints = this.seriesPoints[seriesIx];\n var nearestPointDistance = MAX_VALUE;\n var nearestPoint;\n for (var i = 0; i < allPoints.length; i++) {\n var point = allPoints[i];\n if (point && defined(point.value) && point.value !== null && point.visible !== false) {\n var pointBox = point.box;\n var pointDistance = pointBox.center().distanceTo(target);\n if (pointDistance < nearestPointDistance) {\n nearestPoint = point;\n nearestPointDistance = pointDistance;\n }\n }\n }\n return nearestPoint;\n }\n };\n var ClipAnimation = Animation.extend({\n setup: function () {\n this._setEnd(this.options.box.x1);\n },\n step: function (pos) {\n var box = this.options.box;\n this._setEnd(dataviz.interpolateValue(box.x1, box.x2, pos));\n },\n _setEnd: function (x) {\n var element = this.element;\n var segments = element.segments;\n var topRight = segments[1].anchor();\n var bottomRight = segments[2].anchor();\n element.suspend();\n topRight.setX(x);\n element.resume();\n bottomRight.setX(x);\n }\n });\n setDefaultOptions(ClipAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register('clip', ClipAnimation);\n function anyHasZIndex(elements) {\n for (var idx = 0; idx < elements.length; idx++) {\n if (defined(elements[idx].zIndex)) {\n return true;\n }\n }\n }\n var ClipAnimationMixin = {\n createAnimation: function () {\n var root = this.getRoot();\n if (root && (root.options || {}).transitions !== false) {\n var box = root.size();\n var clipPath = Path.fromRect(box.toRect());\n this.visual.clip(clipPath);\n this.animation = new ClipAnimation(clipPath, { box: box });\n if (anyHasZIndex(this.options.series)) {\n this._setChildrenAnimation(clipPath);\n }\n }\n },\n _setChildrenAnimation: function (clipPath) {\n var points = this.animationPoints();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point && point.visual && defined(point.visual.options.zIndex)) {\n point.visual.clip(clipPath);\n }\n }\n }\n };\n var LineChart = CategoricalChart.extend({\n render: function () {\n CategoricalChart.fn.render.call(this);\n this.updateStackRange();\n this.renderSegments();\n },\n pointType: function () {\n return LinePoint;\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var missingValues = this.seriesMissingValues(series);\n var value = data.valueFields.value;\n if (!defined(value) || value === null) {\n if (missingValues === ZERO) {\n value = 0;\n } else {\n return null;\n }\n }\n var pointOptions = this.pointOptions(series, seriesIx);\n pointOptions = this.evalPointOptions(pointOptions, value, category, categoryIx, series, seriesIx);\n var color = data.fields.color || series.color;\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n plotRange: function (point) {\n var this$1 = this;\n var plotValue = this.plotValue(point);\n if (this.options.isStacked) {\n var categoryIx = point.categoryIx;\n var categoryPoints = this.categoryPoints[categoryIx];\n for (var i = 0; i < categoryPoints.length; i++) {\n var other = categoryPoints[i];\n if (point === other) {\n break;\n }\n plotValue += this$1.plotValue(other);\n if (this$1.options.isStacked100) {\n plotValue = Math.min(plotValue, 1);\n }\n }\n }\n return [\n plotValue,\n plotValue\n ];\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === STEP) {\n pointType = StepLineSegment;\n } else if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result.concat(this._segments);\n }\n });\n deepExtend(LineChart.prototype, LineChartMixin, ClipAnimationMixin);\n var AreaSegment = LineSegment.extend({\n init: function (linePoints, currentSeries, seriesIx, prevSegment, stackPoints) {\n LineSegment.fn.init.call(this, linePoints, currentSeries, seriesIx);\n this.prevSegment = prevSegment;\n this.stackPoints = stackPoints;\n },\n createVisual: function () {\n var series = this.series;\n var defaults = series._defaults;\n var lineOptions = series.line || {};\n var color = series.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n this.visual = new Group({ zIndex: series.zIndex });\n this.createFill({\n fill: {\n color: color,\n opacity: series.opacity\n },\n stroke: null\n });\n if (lineOptions.width > 0 && lineOptions.visible !== false) {\n this.createStroke({\n stroke: deepExtend({\n color: color,\n opacity: series.opacity,\n lineCap: 'butt'\n }, lineOptions)\n });\n }\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n segments = this._strokeSegments = this.createStrokeSegments();\n }\n return segments;\n },\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.points());\n },\n stackSegments: function () {\n if (this.prevSegment) {\n return this.prevSegment.createStackSegments(this.stackPoints);\n }\n return this.createStackSegments(this.stackPoints);\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.toGeometryPoints(stackPoints)).reverse();\n },\n segmentsFromPoints: function (points) {\n return points.map(function (point) {\n return new geometry.Segment(point);\n });\n },\n createStroke: function (style) {\n var stroke = new Path(style);\n stroke.segments.push.apply(stroke.segments, this.strokeSegments());\n this.visual.append(stroke);\n },\n hasStackSegment: function () {\n return this.prevSegment || this.stackPoints && this.stackPoints.length;\n },\n createFill: function (style) {\n var strokeSegments = this.strokeSegments();\n var fillSegments = strokeSegments.slice(0);\n var hasStackSegments = this.hasStackSegment();\n if (hasStackSegments) {\n var stackSegments = this.stackSegments();\n append(fillSegments, stackSegments);\n }\n var fill = new Path(style);\n fill.segments.push.apply(fill.segments, fillSegments);\n if (!hasStackSegments && strokeSegments.length > 1) {\n this.fillToAxes(fill);\n }\n this.visual.append(fill);\n },\n fillToAxes: function (fillPath) {\n var chart = this.parent;\n var invertAxes = chart.options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.series);\n var crossingValue = chart.categoryAxisCrossingValue(valueAxis);\n var endSlot = valueAxis.getSlot(crossingValue, crossingValue, true);\n var segments = this.strokeSegments();\n var firstPoint = segments[0].anchor();\n var lastPoint = last(segments).anchor();\n var end = invertAxes ? endSlot.x1 : endSlot.y1;\n if (invertAxes) {\n fillPath.lineTo(end, lastPoint.y).lineTo(end, firstPoint.y);\n } else {\n fillPath.lineTo(lastPoint.x, end).lineTo(firstPoint.x, end);\n }\n }\n });\n var StepAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n return this.segmentsFromPoints(this.calculateStepPoints(this.linePoints));\n },\n createStackSegments: function (stackPoints) {\n return this.segmentsFromPoints(this.calculateStepPoints(stackPoints)).reverse();\n }\n });\n deepExtend(StepAreaSegment.prototype, StepLineMixin);\n var SplineAreaSegment = AreaSegment.extend({\n createStrokeSegments: function () {\n var curveProcessor = new CurveProcessor(this.options.closed);\n var linePoints = this.points();\n return curveProcessor.process(linePoints);\n },\n createStackSegments: function () {\n var strokeSegments = this.strokeSegments();\n var stackSegments = [];\n for (var idx = strokeSegments.length - 1; idx >= 0; idx--) {\n var segment = strokeSegments[idx];\n stackSegments.push(new geometry.Segment(segment.anchor(), segment.controlOut(), segment.controlIn()));\n }\n return stackSegments;\n }\n });\n var AreaChart = LineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n if (isStacked && seriesIx > 0 && prevSegment) {\n var missingValues = this.seriesMissingValues(currentSeries);\n if (missingValues !== 'gap') {\n stackPoints = prevSegment.linePoints;\n previousSegment = prevSegment;\n } else {\n stackPoints = this._gapStackPoints(linePoints, seriesIx, style);\n }\n }\n var pointType;\n if (style === STEP) {\n pointType = StepAreaSegment;\n } else if (style === SMOOTH) {\n pointType = SplineAreaSegment;\n } else {\n pointType = AreaSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n LineChart.fn.reflow.call(this, targetBox);\n var stackPoints = this._stackPoints;\n if (stackPoints) {\n for (var idx = 0; idx < stackPoints.length; idx++) {\n var stackPoint = stackPoints[idx];\n var pointSlot = this$1.categoryAxis.getSlot(stackPoint.categoryIx);\n stackPoint.reflow(pointSlot);\n }\n }\n },\n _gapStackPoints: function (linePoints, seriesIx, style) {\n var this$1 = this;\n var seriesPoints = this.seriesPoints;\n var startIdx = linePoints[0].categoryIx;\n var length = linePoints.length;\n if (startIdx < 0) {\n startIdx = 0;\n length--;\n }\n var endIdx = startIdx + length;\n var pointOffset = this.seriesOptions[0]._outOfRangeMinPoint ? 1 : 0;\n var stackPoints = [];\n this._stackPoints = this._stackPoints || [];\n for (var categoryIx = startIdx; categoryIx < endIdx; categoryIx++) {\n var pointIx = categoryIx + pointOffset;\n var currentSeriesIx = seriesIx;\n var point = void 0;\n do {\n currentSeriesIx--;\n point = seriesPoints[currentSeriesIx][pointIx];\n } while (currentSeriesIx > 0 && !point);\n if (point) {\n if (style !== STEP && categoryIx > startIdx && !seriesPoints[currentSeriesIx][pointIx - 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx - 1, currentSeriesIx));\n }\n stackPoints.push(point);\n if (style !== STEP && categoryIx + 1 < endIdx && !seriesPoints[currentSeriesIx][pointIx + 1]) {\n stackPoints.push(this$1._previousSegmentPoint(categoryIx, pointIx, pointIx + 1, currentSeriesIx));\n }\n } else {\n var gapStackPoint = this$1._createGapStackPoint(categoryIx);\n this$1._stackPoints.push(gapStackPoint);\n stackPoints.push(gapStackPoint);\n }\n }\n return stackPoints;\n },\n _previousSegmentPoint: function (categoryIx, pointIx, segmentIx, seriesIdx) {\n var seriesPoints = this.seriesPoints;\n var index = seriesIdx;\n var point;\n while (index > 0 && !point) {\n index--;\n point = seriesPoints[index][segmentIx];\n }\n if (!point) {\n point = this._createGapStackPoint(categoryIx);\n this._stackPoints.push(point);\n } else {\n point = seriesPoints[index][pointIx];\n }\n return point;\n },\n _createGapStackPoint: function (categoryIx) {\n var options = this.pointOptions({}, 0);\n var point = new LinePoint(0, options);\n point.categoryIx = categoryIx;\n point.series = {};\n return point;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\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 });\n var ScatterErrorBar = ErrorBarBase.extend({\n getAxis: function () {\n var axes = this.chart.seriesAxes(this.series);\n var axis = this.isVertical ? axes.y : axes.x;\n return axis;\n }\n });\n function hasValue(value) {\n return defined(value) && value !== null;\n }\n var ScatterChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this._initFields();\n this.render();\n },\n _initFields: function () {\n this.xAxisRanges = {};\n this.yAxisRanges = {};\n this.points = [];\n this.seriesPoints = [];\n this.seriesOptions = [];\n this._evalSeries = [];\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n addErrorBar: function (point, field, fields) {\n var value = point.value[field];\n var valueErrorField = field + 'Value';\n var lowField = field + 'ErrorLow';\n var highField = field + 'ErrorHigh';\n var seriesIx = fields.seriesIx;\n var series = fields.series;\n var errorBars = point.options.errorBars;\n var lowValue = fields[lowField];\n var highValue = fields[highField];\n if (isNumber(value)) {\n var errorRange;\n if (isNumber(lowValue) && isNumber(highValue)) {\n errorRange = {\n low: lowValue,\n high: highValue\n };\n }\n if (errorBars && defined(errorBars[valueErrorField])) {\n this.seriesErrorRanges = this.seriesErrorRanges || {\n x: [],\n y: []\n };\n this.seriesErrorRanges[field][seriesIx] = this.seriesErrorRanges[field][seriesIx] || new ErrorRangeCalculator(errorBars[valueErrorField], series, field);\n errorRange = this.seriesErrorRanges[field][seriesIx].getErrorRange(value, errorBars[valueErrorField]);\n }\n if (errorRange) {\n this.addPointErrorBar(errorRange, point, field);\n }\n }\n },\n addPointErrorBar: function (errorRange, point, field) {\n var low = errorRange.low;\n var high = errorRange.high;\n var series = point.series;\n var options = point.options.errorBars;\n var isVertical = field === Y;\n var item = {};\n point[field + 'Low'] = low;\n point[field + 'High'] = high;\n point.errorBars = point.errorBars || [];\n var errorBar = new ScatterErrorBar(low, high, isVertical, this, series, options);\n point.errorBars.push(errorBar);\n point.append(errorBar);\n item[field] = low;\n this.updateRange(item, series);\n item[field] = high;\n this.updateRange(item, series);\n },\n addValue: function (value, fields) {\n var x = value.x;\n var y = value.y;\n var seriesIx = fields.seriesIx;\n var series = this.options.series[seriesIx];\n var missingValues = this.seriesMissingValues(series);\n var seriesPoints = this.seriesPoints[seriesIx];\n var pointValue = value;\n if (!(hasValue(x) && hasValue(y))) {\n pointValue = this.createMissingValue(pointValue, missingValues);\n }\n var point;\n if (pointValue) {\n point = this.createPoint(pointValue, fields);\n if (point) {\n $.extend(point, fields);\n this.addErrorBar(point, X, fields);\n this.addErrorBar(point, Y, fields);\n }\n this.updateRange(pointValue, fields.series);\n }\n this.points.push(point);\n seriesPoints.push(point);\n },\n seriesMissingValues: function (series) {\n return series.missingValues;\n },\n createMissingValue: function () {\n },\n updateRange: function (value, series) {\n var intlService = this.chartService.intl;\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var x = value.x;\n var y = value.y;\n var xAxisRange = this.xAxisRanges[xAxisName];\n var yAxisRange = this.yAxisRanges[yAxisName];\n if (hasValue(x)) {\n xAxisRange = this.xAxisRanges[xAxisName] = xAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(x)) {\n x = parseDate(intlService, x);\n }\n xAxisRange.min = Math.min(xAxisRange.min, x);\n xAxisRange.max = Math.max(xAxisRange.max, x);\n }\n if (hasValue(y)) {\n yAxisRange = this.yAxisRanges[yAxisName] = yAxisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n if (isString(y)) {\n y = parseDate(intlService, y);\n }\n yAxisRange.min = Math.min(yAxisRange.min, y);\n yAxisRange.max = Math.max(yAxisRange.max, y);\n }\n },\n evalPointOptions: function (options, value, fields) {\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var state = {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'tooltip',\n 'content',\n 'template',\n 'visual',\n 'toggle',\n '_outOfRangeMinPoint',\n '_outOfRangeMaxPoint'\n ]\n };\n var doEval = this._evalSeries[seriesIx];\n if (!defined(doEval)) {\n this._evalSeries[seriesIx] = doEval = evalOptions(options, {}, state, true);\n }\n var pointOptions = options;\n if (doEval) {\n pointOptions = deepExtend({}, options);\n evalOptions(pointOptions, {\n value: value,\n series: series,\n dataItem: fields.dataItem\n }, state);\n }\n return pointOptions;\n },\n pointType: function () {\n return LinePoint;\n },\n pointOptions: function (series, seriesIx) {\n var options = this.seriesOptions[seriesIx];\n if (!options) {\n var defaults = this.pointType().prototype.defaults;\n this.seriesOptions[seriesIx] = options = deepExtend({}, defaults, {\n markers: { opacity: series.opacity },\n tooltip: { format: this.options.tooltip.format },\n labels: { format: this.options.labels.format }\n }, series);\n }\n return options;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointOptions = this.pointOptions(series, fields.seriesIx);\n var color = fields.color || series.color;\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n var point = new LinePoint(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n seriesAxes: function (series) {\n var xAxisName = series.xAxis;\n var yAxisName = series.yAxis;\n var plotArea = this.plotArea;\n var xAxis = xAxisName ? plotArea.namedXAxes[xAxisName] : plotArea.axisX;\n var yAxis = yAxisName ? plotArea.namedYAxes[yAxisName] : plotArea.axisY;\n if (!xAxis) {\n throw new Error('Unable to locate X axis with name ' + xAxisName);\n }\n if (!yAxis) {\n throw new Error('Unable to locate Y axis with name ' + yAxisName);\n }\n return {\n x: xAxis,\n y: yAxis\n };\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var chartPoints = this.points;\n var limit = !this.options.clip;\n var pointIx = 0;\n this.traverseDataPoints(function (value, fields) {\n var point = chartPoints[pointIx++];\n var seriesAxes = this$1.seriesAxes(fields.series);\n var slotX = seriesAxes.x.getSlot(value.x, value.x, limit);\n var slotY = seriesAxes.y.getSlot(value.y, value.y, limit);\n if (point) {\n if (slotX && slotY) {\n var pointSlot = this$1.pointSlot(slotX, slotY);\n point.reflow(pointSlot);\n } else {\n point.visible = false;\n }\n }\n });\n this.box = targetBox;\n },\n pointSlot: function (slotX, slotY) {\n return new Box(slotX.x1, slotY.y1, slotX.x2, slotY.y2);\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var seriesPoints = ref.seriesPoints;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var currentSeriesPoints = seriesPoints[seriesIx];\n if (!currentSeriesPoints) {\n seriesPoints[seriesIx] = [];\n }\n for (var pointIx = 0; pointIx < currentSeries.data.length; pointIx++) {\n var ref$1 = this$1._bindPoint(currentSeries, seriesIx, pointIx);\n var value = ref$1.valueFields;\n var fields = ref$1.fields;\n callback(value, deepExtend({\n pointIx: pointIx,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: currentSeries.data[pointIx],\n owner: this$1\n }, fields));\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y);\n },\n animationPoints: function () {\n var points = this.points;\n var result = [];\n for (var idx = 0; idx < points.length; idx++) {\n result.push((points[idx] || {}).marker);\n }\n return result;\n }\n });\n setDefaultOptions(ScatterChart, {\n series: [],\n tooltip: { format: '{0}, {1}' },\n labels: { format: '{0}, {1}' },\n clip: true\n });\n deepExtend(ScatterChart.prototype, ClipAnimationMixin, { _bindPoint: CategoricalChart.prototype._bindPoint });\n var Bubble = LinePoint.extend({\n init: function (value, options) {\n LinePoint.fn.init.call(this, value, options);\n this.category = value.category;\n },\n createHighlight: function () {\n var highlight = this.options.highlight;\n var border = highlight.border;\n var markers = this.options.markers;\n var center = this.box.center();\n var radius = (markers.size + markers.border.width + border.width) / 2;\n var highlightGroup = new Group();\n var shadow = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y + radius / 5 + border.width / 2\n ], radius + border.width / 2), {\n stroke: { color: 'none' },\n fill: this.createGradient({\n gradient: 'bubbleShadow',\n color: markers.background,\n stops: [\n {\n offset: 0,\n color: markers.background,\n opacity: 0.3\n },\n {\n offset: 1,\n color: markers.background,\n opacity: 0\n }\n ]\n })\n });\n var overlay = new drawing.Circle(new geometry.Circle([\n center.x,\n center.y\n ], radius), {\n stroke: {\n color: border.color || new Color(markers.background).brightness(BORDER_BRIGHTNESS).toHex(),\n width: border.width,\n opacity: border.opacity\n },\n fill: {\n color: markers.background,\n opacity: highlight.opacity\n }\n });\n highlightGroup.append(shadow, overlay);\n return highlightGroup;\n }\n });\n Bubble.prototype.defaults = deepExtend({}, Bubble.prototype.defaults, {\n labels: { position: CENTER },\n highlight: {\n opacity: 1,\n border: {\n color: '#fff',\n width: 2,\n opacity: 1\n }\n }\n });\n Bubble.prototype.defaults.highlight.zIndex = undefined;\n var BubbleChart = ScatterChart.extend({\n _initFields: function () {\n this._maxSize = MIN_VALUE;\n ScatterChart.fn._initFields.call(this);\n },\n addValue: function (value, fields) {\n if (value.size !== null && (value.size > 0 || value.size < 0 && fields.series.negativeValues.visible)) {\n this._maxSize = Math.max(this._maxSize, Math.abs(value.size));\n ScatterChart.fn.addValue.call(this, value, fields);\n } else {\n this.points.push(null);\n this.seriesPoints[fields.seriesIx].push(null);\n }\n },\n reflow: function (box) {\n this.updateBubblesSize(box);\n ScatterChart.fn.reflow.call(this, box);\n },\n pointType: function () {\n return Bubble;\n },\n createPoint: function (value, fields) {\n var series = fields.series;\n var pointsCount = series.data.length;\n var delay = fields.pointIx * (INITIAL_ANIMATION_DURATION / pointsCount);\n var animationOptions = {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay,\n type: BUBBLE\n };\n var color = fields.color || series.color;\n if (value.size < 0 && series.negativeValues.visible) {\n color = valueOrDefault(series.negativeValues.color, color);\n }\n var pointOptions = deepExtend({\n labels: {\n animation: {\n delay: delay,\n duration: INITIAL_ANIMATION_DURATION - delay\n }\n }\n }, this.pointOptions(series, fields.seriesIx), {\n markers: {\n type: CIRCLE,\n border: series.border,\n opacity: series.opacity,\n animation: animationOptions\n }\n });\n pointOptions = this.evalPointOptions(pointOptions, value, fields);\n if (isFunction(series.color)) {\n color = pointOptions.color;\n }\n pointOptions.markers.background = color;\n var point = new Bubble(value, pointOptions);\n point.color = color;\n this.append(point);\n return point;\n },\n updateBubblesSize: function (box) {\n var this$1 = this;\n var ref = this;\n var series = ref.options.series;\n var boxSize = Math.min(box.width(), box.height());\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesPoints = this$1.seriesPoints[seriesIx];\n var minSize = currentSeries.minSize || Math.max(boxSize * 0.02, 10);\n var maxSize = currentSeries.maxSize || boxSize * 0.2;\n var minR = minSize / 2;\n var maxR = maxSize / 2;\n var minArea = Math.PI * minR * minR;\n var maxArea = Math.PI * maxR * maxR;\n var areaRange = maxArea - minArea;\n var areaRatio = areaRange / this$1._maxSize;\n for (var pointIx = 0; pointIx < seriesPoints.length; pointIx++) {\n var point = seriesPoints[pointIx];\n if (point) {\n var area = Math.abs(point.value.size) * areaRatio;\n var radius = Math.sqrt((minArea + area) / Math.PI);\n var baseZIndex = valueOrDefault(point.options.zIndex, 0);\n var zIndex = baseZIndex + (1 - radius / maxR);\n deepExtend(point.options, {\n zIndex: zIndex,\n markers: {\n size: radius * 2,\n zIndex: zIndex\n },\n labels: { zIndex: zIndex + 1 }\n });\n }\n }\n }\n },\n formatPointValue: function (point, format) {\n var value = point.value;\n return this.chartService.format.auto(format, value.x, value.y, value.size, point.category);\n },\n createAnimation: function () {\n },\n createVisual: function () {\n }\n });\n setDefaultOptions(BubbleChart, {\n tooltip: { format: '{3}' },\n labels: { format: '{3}' }\n });\n var Target = ShapeElement.extend({});\n deepExtend(Target.prototype, PointEventsMixin);\n var Bullet = ChartElement.extend({\n init: function (value, options) {\n ChartElement.fn.init.call(this, options);\n this.aboveAxis = this.options.aboveAxis;\n this.color = options.color || WHITE;\n this.value = value;\n },\n render: function () {\n var options = this.options;\n if (!this._rendered) {\n this._rendered = true;\n if (defined(this.value.target)) {\n this.target = new Target({\n type: options.target.shape,\n background: options.target.color || this.color,\n opacity: options.opacity,\n zIndex: options.zIndex,\n border: options.target.border,\n vAlign: TOP,\n align: RIGHT\n });\n this.target.value = this.value;\n this.target.dataItem = this.dataItem;\n this.target.series = this.series;\n this.append(this.target);\n }\n this.createNote();\n }\n },\n reflow: function (box) {\n this.render();\n var ref = this;\n var options = ref.options;\n var target = ref.target;\n var chart = ref.owner;\n var invertAxes = options.invertAxes;\n var valueAxis = chart.seriesValueAxis(this.options);\n var categorySlot = chart.categorySlot(chart.categoryAxis, options.categoryIx, valueAxis);\n var targetValueSlot = valueAxis.getSlot(this.value.target);\n var targetSlotX = invertAxes ? targetValueSlot : categorySlot;\n var targetSlotY = invertAxes ? categorySlot : targetValueSlot;\n if (target) {\n var targetSlot = new Box(targetSlotX.x1, targetSlotY.y1, targetSlotX.x2, targetSlotY.y2);\n target.options.height = invertAxes ? targetSlot.height() : options.target.line.width;\n target.options.width = invertAxes ? options.target.line.width : targetSlot.width();\n target.reflow(targetSlot);\n }\n if (this.note) {\n this.note.reflow(box);\n }\n this.box = box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n var body = Path.fromRect(this.box.toRect(), {\n fill: {\n color: this.color,\n opacity: options.opacity\n },\n stroke: null\n });\n if (options.border.width > 0) {\n body.options.set('stroke', {\n color: options.border.color || this.color,\n width: options.border.width,\n dashType: options.border.dashType,\n opacity: valueOrDefault(options.border.opacity, options.opacity)\n });\n }\n this.bodyVisual = body;\n alignPathToPixel(body);\n this.visual.append(body);\n },\n createAnimation: function () {\n if (this.bodyVisual) {\n this.animation = Animation.create(this.bodyVisual, this.options.animation);\n }\n },\n createHighlight: function (style) {\n return Path.fromRect(this.box.toRect(), style);\n },\n highlightVisual: function () {\n return this.bodyVisual;\n },\n highlightVisualArgs: function () {\n return {\n rect: this.box.toRect(),\n visual: this.bodyVisual,\n options: this.options\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n }\n });\n Bullet.prototype.tooltipAnchor = Bar.prototype.tooltipAnchor;\n setDefaultOptions(Bullet, {\n border: { width: 1 },\n vertical: false,\n opacity: 1,\n target: {\n shape: '',\n border: {\n width: 0,\n color: 'green'\n },\n line: { width: 2 }\n },\n tooltip: { format: 'Current: {0}
    Target: {1}' }\n });\n deepExtend(Bullet.prototype, PointEventsMixin);\n deepExtend(Bullet.prototype, NoteMixin);\n var BulletChart = CategoricalChart.extend({\n init: function (plotArea, options) {\n wrapData(options);\n CategoricalChart.fn.init.call(this, plotArea, options);\n },\n reflowCategories: function (categorySlots) {\n var children = this.children;\n var childrenLength = children.length;\n for (var i = 0; i < childrenLength; i++) {\n children[i].reflow(categorySlots[i]);\n }\n },\n plotRange: function (point) {\n var series = point.series;\n var valueAxis = this.seriesValueAxis(series);\n var axisCrossingValue = this.categoryAxisCrossingValue(valueAxis);\n return [\n axisCrossingValue,\n point.value.current || axisCrossingValue\n ];\n },\n createPoint: function (data, fields) {\n var categoryIx = fields.categoryIx;\n var category = fields.category;\n var series = fields.series;\n var seriesIx = fields.seriesIx;\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var value = data.valueFields;\n var bulletOptions = deepExtend({\n vertical: !options.invertAxes,\n overlay: series.overlay,\n categoryIx: categoryIx,\n invertAxes: options.invertAxes\n }, series);\n var color = data.fields.color || series.color;\n bulletOptions = this.evalPointOptions(bulletOptions, value, category, categoryIx, series, seriesIx);\n if (isFunction(series.color)) {\n color = bulletOptions.color;\n }\n var bullet = new Bullet(value, bulletOptions);\n bullet.color = color;\n var cluster = children[categoryIx];\n if (!cluster) {\n cluster = new ClusterLayout({\n vertical: options.invertAxes,\n gap: options.gap,\n spacing: options.spacing,\n rtl: !options.invertAxes && (this.chartService || {}).rtl\n });\n this.append(cluster);\n }\n cluster.append(bullet);\n return bullet;\n },\n updateRange: function (value, fields) {\n var current = value.current;\n var target = value.target;\n var axisName = fields.series.axis;\n var axisRange = this.valueAxisRanges[axisName];\n if (defined(current) && !isNaN(current) && defined(target && !isNaN(target))) {\n axisRange = this.valueAxisRanges[axisName] = axisRange || {\n min: MAX_VALUE,\n max: MIN_VALUE\n };\n axisRange.min = Math.min(axisRange.min, current, target);\n axisRange.max = Math.max(axisRange.max, current, target);\n }\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value.current, point.value.target);\n },\n pointValue: function (data) {\n return data.valueFields.current;\n },\n aboveAxis: function (point) {\n var value = point.value.current;\n return value > 0;\n },\n createAnimation: function () {\n var this$1 = this;\n var points = this.points;\n this._setAnimationOptions();\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n point.options.animation = this$1.options.animation;\n point.createAnimation();\n }\n }\n });\n BulletChart.prototype._setAnimationOptions = BarChart.prototype._setAnimationOptions;\n setDefaultOptions(BulletChart, { animation: { type: BAR } });\n function wrapData(options) {\n var series = options.series;\n for (var i = 0; i < series.length; i++) {\n var seriesItem = series[i];\n var data = seriesItem.data;\n if (data && !isArray(data[0]) && !isObject(data[0])) {\n seriesItem.data = [data];\n }\n }\n }\n var BaseTooltip = Class.extend({\n init: function (chartService, options) {\n this.chartService = chartService;\n this.options = deepExtend({}, this.options, options);\n },\n getStyle: function (options, point) {\n var background = options.background;\n var border = options.border.color;\n if (point) {\n var pointColor = point.color || point.options.color;\n background = valueOrDefault(background, pointColor);\n border = valueOrDefault(border, pointColor);\n }\n var padding = getSpacing(options.padding || {}, 'auto');\n return {\n backgroundColor: background,\n borderColor: border,\n font: options.font,\n color: options.color,\n opacity: options.opacity,\n borderWidth: styleValue(options.border.width),\n paddingTop: styleValue(padding.top),\n paddingBottom: styleValue(padding.bottom),\n paddingLeft: styleValue(padding.left),\n paddingRight: styleValue(padding.right)\n };\n },\n show: function (options, tooltipOptions, point) {\n options.format = tooltipOptions.format;\n var style = this.getStyle(tooltipOptions, point);\n options.style = style;\n if (!defined(tooltipOptions.color) && new Color(style.backgroundColor).percBrightness() > 180) {\n options.className = 'k-chart-tooltip-inverse';\n }\n this.chartService.notify(SHOW_TOOLTIP, options);\n this.visible = true;\n },\n hide: function () {\n if (this.chartService) {\n this.chartService.notify(HIDE_TOOLTIP);\n }\n this.visible = false;\n },\n destroy: function () {\n delete this.chartService;\n }\n });\n setDefaultOptions(BaseTooltip, {\n border: { width: 1 },\n opacity: 1\n });\n var CrosshairTooltip = BaseTooltip.extend({\n init: function (chartService, crosshair, options) {\n BaseTooltip.fn.init.call(this, chartService, options);\n this.crosshair = crosshair;\n this.formatService = chartService.format;\n this.initAxisName();\n },\n initAxisName: function () {\n var axis = this.crosshair.axis;\n var plotArea = axis.plotArea;\n var name;\n if (plotArea.categoryAxis) {\n name = axis.getCategory ? 'categoryAxis' : 'valueAxis';\n } else {\n name = axis.options.vertical ? 'yAxis' : 'xAxis';\n }\n this.axisName = name;\n },\n showAt: function (point) {\n var ref = this;\n var axis = ref.crosshair.axis;\n var options = ref.options;\n var value = axis[options.stickyMode ? 'getCategory' : 'getValue'](point);\n var formattedValue = value;\n if (options.format) {\n formattedValue = this.formatService.auto(options.format, value);\n } else if (axis.options.type === DATE) {\n formattedValue = this.formatService.auto(axis.options.labels.dateFormats[axis.options.baseUnit], value);\n }\n this.show({\n point: point,\n anchor: this.getAnchor(),\n crosshair: this.crosshair,\n value: formattedValue,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n }, this.options);\n },\n hide: function () {\n this.chartService.notify(HIDE_TOOLTIP, {\n crosshair: this.crosshair,\n axisName: this.axisName,\n axisIndex: this.crosshair.axis.axisIndex\n });\n },\n getAnchor: function () {\n var ref = this;\n var crosshair = ref.crosshair;\n var ref_options = ref.options;\n var position = ref_options.position;\n var padding = ref_options.padding;\n var vertical = !crosshair.axis.options.vertical;\n var lineBox = crosshair.line.bbox();\n var horizontalAlign, verticalAlign, point;\n if (vertical) {\n horizontalAlign = CENTER;\n if (position === BOTTOM) {\n verticalAlign = TOP;\n point = lineBox.bottomLeft().translate(0, padding);\n } else {\n verticalAlign = BOTTOM;\n point = lineBox.topLeft().translate(0, -padding);\n }\n } else {\n verticalAlign = CENTER;\n if (position === LEFT) {\n horizontalAlign = RIGHT;\n point = lineBox.topLeft().translate(-padding, 0);\n } else {\n horizontalAlign = LEFT;\n point = lineBox.topRight().translate(padding, 0);\n }\n }\n return {\n point: point,\n align: {\n horizontal: horizontalAlign,\n vertical: verticalAlign\n }\n };\n }\n });\n setDefaultOptions(CrosshairTooltip, { padding: 10 });\n var Crosshair = ChartElement.extend({\n init: function (chartService, axis, options) {\n ChartElement.fn.init.call(this, options);\n this.axis = axis;\n this.stickyMode = axis instanceof CategoryAxis;\n var tooltipOptions = this.options.tooltip;\n if (tooltipOptions.visible) {\n this.tooltip = new CrosshairTooltip(chartService, this, deepExtend({}, tooltipOptions, { stickyMode: this.stickyMode }));\n }\n },\n showAt: function (point) {\n this.point = point;\n this.moveLine();\n this.line.visible(true);\n if (this.tooltip) {\n this.tooltip.showAt(point);\n }\n },\n hide: function () {\n this.line.visible(false);\n if (this.tooltip) {\n this.tooltip.hide();\n }\n },\n moveLine: function () {\n var ref = this;\n var axis = ref.axis;\n var point = ref.point;\n var vertical = axis.options.vertical;\n var box = this.getBox();\n var dim = vertical ? Y : X;\n var lineStart = new GeometryPoint(box.x1, box.y1);\n var lineEnd;\n if (vertical) {\n lineEnd = new GeometryPoint(box.x2, box.y1);\n } else {\n lineEnd = new GeometryPoint(box.x1, box.y2);\n }\n if (point) {\n if (this.stickyMode) {\n var slot = axis.getSlot(axis.pointCategoryIndex(point));\n lineStart[dim] = lineEnd[dim] = slot.center()[dim];\n } else {\n lineStart[dim] = lineEnd[dim] = point[dim];\n }\n }\n this.box = box;\n this.line.moveTo(lineStart).lineTo(lineEnd);\n },\n getBox: function () {\n var axis = this.axis;\n var axes = axis.pane.axes;\n var length = axes.length;\n var vertical = axis.options.vertical;\n var box = axis.lineBox().clone();\n var dim = vertical ? X : Y;\n var axisLineBox;\n for (var i = 0; i < length; i++) {\n var currentAxis = axes[i];\n if (currentAxis.options.vertical !== vertical) {\n if (!axisLineBox) {\n axisLineBox = currentAxis.lineBox().clone();\n } else {\n axisLineBox.wrap(currentAxis.lineBox());\n }\n }\n }\n box[dim + 1] = axisLineBox[dim + 1];\n box[dim + 2] = axisLineBox[dim + 2];\n return box;\n },\n createVisual: function () {\n ChartElement.fn.createVisual.call(this);\n var options = this.options;\n this.line = new Path({\n stroke: {\n color: options.color,\n width: options.width,\n opacity: options.opacity,\n dashType: options.dashType\n },\n visible: false\n });\n this.moveLine();\n this.visual.append(this.line);\n },\n destroy: function () {\n if (this.tooltip) {\n this.tooltip.destroy();\n }\n ChartElement.fn.destroy.call(this);\n }\n });\n setDefaultOptions(Crosshair, {\n color: BLACK,\n width: 2,\n zIndex: -1,\n tooltip: { visible: false }\n });\n var ChartContainer = ChartElement.extend({\n init: function (options, pane) {\n ChartElement.fn.init.call(this, options);\n this.pane = pane;\n },\n shouldClip: function () {\n var children = this.children;\n var length = children.length;\n for (var i = 0; i < length; i++) {\n if (children[i].options.clip === true) {\n return true;\n }\n }\n return false;\n },\n _clipBox: function () {\n return this.pane.chartsBox();\n },\n createVisual: function () {\n this.visual = new Group({ zIndex: 0 });\n if (this.shouldClip()) {\n var clipBox = this.clipBox = this._clipBox();\n var clipRect = clipBox.toRect();\n var clipPath = Path.fromRect(clipRect);\n alignPathToPixel(clipPath);\n this.visual.clip(clipPath);\n this.unclipLabels();\n }\n },\n stackRoot: function () {\n return this;\n },\n unclipLabels: function () {\n var ref = this;\n var charts = ref.children;\n var clipBox = ref.clipBox;\n for (var i = 0; i < charts.length; i++) {\n var points = charts[i].points || {};\n var length = points.length;\n for (var j = 0; j < length; j++) {\n var point = points[j];\n if (point && point.visible !== false && point.overlapsBox && point.overlapsBox(clipBox)) {\n if (point.unclipElements) {\n point.unclipElements();\n } else {\n var label = point.label;\n var note = point.note;\n if (label && label.options.visible) {\n if (label.alignToClipBox) {\n label.alignToClipBox(clipBox);\n }\n label.options.noclip = true;\n }\n if (note && note.options.visible) {\n note.options.noclip = true;\n }\n }\n }\n }\n }\n },\n destroy: function () {\n ChartElement.fn.destroy.call(this);\n delete this.parent;\n }\n });\n ChartContainer.prototype.isStackRoot = true;\n var Pane = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.id = paneID();\n this.createTitle();\n this.content = new ChartElement();\n this.chartContainer = new ChartContainer({}, this);\n this.append(this.content);\n this.axes = [];\n this.charts = [];\n },\n createTitle: function () {\n var titleOptions = this.options.title;\n if (isObject(titleOptions)) {\n titleOptions = deepExtend({}, titleOptions, {\n align: titleOptions.position,\n position: TOP\n });\n }\n this.title = dataviz.Title.buildTitle(titleOptions, this, Pane.prototype.options.title);\n },\n appendAxis: function (axis) {\n this.content.append(axis);\n this.axes.push(axis);\n axis.pane = this;\n },\n appendAxisAt: function (axis, pos) {\n this.content.append(axis);\n this.axes.splice(pos, 0, axis);\n axis.pane = this;\n },\n appendChart: function (chart) {\n if (this.chartContainer.parent !== this.content) {\n this.content.append(this.chartContainer);\n }\n this.charts.push(chart);\n this.chartContainer.append(chart);\n chart.pane = this;\n },\n empty: function () {\n var this$1 = this;\n var plotArea = this.parent;\n if (plotArea) {\n for (var i = 0; i < this.axes.length; i++) {\n plotArea.removeAxis(this$1.axes[i]);\n }\n for (var i$1 = 0; i$1 < this.charts.length; i$1++) {\n plotArea.removeChart(this$1.charts[i$1]);\n }\n }\n this.axes = [];\n this.charts = [];\n this.content.destroy();\n this.content.children = [];\n this.chartContainer.children = [];\n },\n reflow: function (targetBox) {\n var content;\n if (last(this.children) === this.content) {\n content = this.children.pop();\n }\n BoxElement.fn.reflow.call(this, targetBox);\n if (content) {\n this.children.push(content);\n }\n if (this.title) {\n this.contentBox.y1 += this.title.box.height();\n }\n },\n visualStyle: function () {\n var style = BoxElement.fn.visualStyle.call(this);\n style.zIndex = -10;\n return style;\n },\n renderComplete: function () {\n if (this.options.visible) {\n this.createGridLines();\n }\n },\n stackRoot: function () {\n return this;\n },\n clipRoot: function () {\n return this;\n },\n createGridLines: function () {\n var axes = this.axes;\n var allAxes = axes.concat(this.parent.axes);\n var vGridLines = [];\n var hGridLines = [];\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var vertical = axis.options.vertical;\n var gridLines = vertical ? vGridLines : hGridLines;\n for (var j = 0; j < allAxes.length; j++) {\n if (gridLines.length === 0) {\n var altAxis = allAxes[j];\n if (vertical !== altAxis.options.vertical) {\n append(gridLines, axis.createGridLines(altAxis));\n }\n }\n }\n }\n },\n refresh: function () {\n this.visual.clear();\n this.content.parent = null;\n this.content.createGradient = this.createGradient.bind(this);\n this.content.renderVisual();\n this.content.parent = this;\n if (this.title) {\n this.visual.append(this.title.visual);\n }\n this.visual.append(this.content.visual);\n this.renderComplete();\n this.notifyRender();\n },\n chartsBox: function () {\n var axes = this.axes;\n var length = axes.length;\n var chartsBox = new Box();\n for (var idx = 0; idx < length; idx++) {\n var axis = axes[idx];\n var axisValueField = axis.options.vertical ? Y : X;\n var lineBox = axis.lineBox();\n chartsBox[axisValueField + 1] = lineBox[axisValueField + 1];\n chartsBox[axisValueField + 2] = lineBox[axisValueField + 2];\n }\n if (chartsBox.x2 === 0) {\n var allAxes = this.parent.axes;\n var length$1 = allAxes.length;\n for (var idx$1 = 0; idx$1 < length$1; idx$1++) {\n var axis$1 = allAxes[idx$1];\n if (!axis$1.options.vertical) {\n var lineBox$1 = axis$1.lineBox();\n chartsBox.x1 = lineBox$1.x1;\n chartsBox.x2 = lineBox$1.x2;\n }\n }\n }\n return chartsBox;\n },\n clipBox: function () {\n return this.chartContainer.clipBox;\n },\n notifyRender: function () {\n var service = this.getService();\n if (service) {\n service.notify(PANE_RENDER, {\n pane: new ChartPane(this),\n index: this.paneIndex,\n name: this.options.name\n });\n }\n }\n });\n var ID = 1;\n function paneID() {\n return 'pane' + ID++;\n }\n Pane.prototype.isStackRoot = true;\n setDefaultOptions(Pane, {\n zIndex: -1,\n shrinkToFit: true,\n title: { align: LEFT },\n visible: true\n });\n function appendIfNotNull(array, element) {\n if (element !== null) {\n array.push(element);\n }\n }\n function segmentVisible(series, fields, index) {\n var visible = fields.visible;\n if (defined(visible)) {\n return visible;\n }\n var pointVisibility = series.pointVisibility;\n if (pointVisibility) {\n return pointVisibility[index];\n }\n }\n function bindSegments(series) {\n var data = series.data;\n var points = [];\n var sum = 0;\n var count = 0;\n for (var idx = 0; idx < data.length; idx++) {\n var pointData = SeriesBinder.current.bindPoint(series, idx);\n var value = pointData.valueFields.value;\n if (isString(value)) {\n value = parseFloat(value);\n }\n if (isNumber(value)) {\n pointData.visible = segmentVisible(series, pointData.fields, idx) !== false;\n pointData.value = Math.abs(value);\n points.push(pointData);\n if (pointData.visible) {\n sum += pointData.value;\n }\n if (value !== 0) {\n count++;\n }\n } else {\n points.push(null);\n }\n }\n return {\n total: sum,\n points: points,\n count: count\n };\n }\n function equalsIgnoreCase(a, b) {\n if (a && b) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n }\n function filterSeriesByType(series, types) {\n var result = [];\n var seriesTypes = [].concat(types);\n for (var idx = 0; idx < series.length; idx++) {\n var currentSeries = series[idx];\n if (inArray(currentSeries.type, seriesTypes)) {\n result.push(currentSeries);\n }\n }\n return result;\n }\n function getDateField(field, row, intlService) {\n if (row === null) {\n return row;\n }\n var key = '_date_' + field;\n var value = row[key];\n if (!value) {\n value = parseDate(intlService, getter(field, true)(row));\n row[key] = value;\n }\n return value;\n }\n function isDateAxis(axisOptions, sampleCategory) {\n var type = axisOptions.type;\n var dateCategory = sampleCategory instanceof Date;\n return !type && dateCategory || equalsIgnoreCase(type, DATE);\n }\n function singleItemOrArray(array) {\n return array.length === 1 ? array[0] : array;\n }\n var AREA_REGEX = /area/i;\n function seriesMissingValues(series) {\n if (series.missingValues) {\n return series.missingValues;\n }\n return AREA_REGEX.test(series.type) || series.stack ? ZERO : INTERPOLATE;\n }\n function hasValue$1(series, item) {\n var fields = SeriesBinder.current.bindPoint(series, null, item);\n var valueFields = fields.valueFields;\n for (var field in valueFields) {\n if (dataviz.convertableToNumber(valueFields[field])) {\n return true;\n }\n }\n }\n function findNext(ref) {\n var start = ref.start;\n var dir = ref.dir;\n var min = ref.min;\n var max = ref.max;\n var getter$$1 = ref.getter;\n var hasItem = ref.hasItem;\n var series = ref.series;\n var pointHasValue, outPoint;\n var idx = start;\n do {\n idx += dir;\n if (hasItem(idx)) {\n outPoint = getter$$1(idx);\n pointHasValue = hasValue$1(series, outPoint.item);\n }\n } while (min <= idx && idx <= max && !pointHasValue);\n if (pointHasValue) {\n return outPoint;\n }\n }\n function createOutOfRangePoints(series, range, count, getter$$1, hasItem) {\n var min = range.min;\n var max = range.max;\n var hasMinPoint = min > 0 && min < count;\n var hasMaxPoint = max + 1 < count;\n if (hasMinPoint || hasMaxPoint) {\n var missingValues = seriesMissingValues(series);\n var minPoint, maxPoint;\n if (missingValues !== INTERPOLATE) {\n if (hasMinPoint) {\n minPoint = getter$$1(min - 1);\n }\n if (hasMaxPoint) {\n maxPoint = getter$$1(max + 1);\n }\n } else {\n var outPoint, pointHasValue;\n if (hasMinPoint) {\n outPoint = getter$$1(min - 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n minPoint = findNext({\n start: min,\n dir: -1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n minPoint = outPoint;\n }\n }\n if (hasMaxPoint) {\n outPoint = getter$$1(max + 1);\n pointHasValue = hasValue$1(series, outPoint.item);\n if (!pointHasValue) {\n maxPoint = findNext({\n start: max,\n dir: 1,\n min: 0,\n max: count - 1,\n getter: getter$$1,\n hasItem: hasItem,\n series: series\n });\n } else {\n maxPoint = outPoint;\n }\n }\n }\n if (minPoint) {\n series._outOfRangeMinPoint = minPoint;\n }\n if (maxPoint) {\n series._outOfRangeMaxPoint = maxPoint;\n }\n }\n }\n var PlotAreaBase = ChartElement.extend({\n init: function (series, options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.initFields(series, options);\n this.series = series;\n this.initSeries();\n this.charts = [];\n this.options.legend = this.options.legend || {};\n this.options.legend.items = [];\n this.axes = [];\n this.crosshairs = [];\n this.chartService = chartService;\n this.originalOptions = options;\n this.createPanes();\n this.render();\n this.createCrosshairs();\n },\n initFields: function () {\n },\n initSeries: function () {\n var series = this.series;\n for (var i = 0; i < series.length; i++) {\n series[i].index = i;\n }\n },\n createPanes: function () {\n var this$1 = this;\n var defaults = { title: { color: (this.options.title || {}).color } };\n var panes = [];\n var paneOptions = this.options.panes || [];\n var panesLength = Math.max(paneOptions.length, 1);\n function setTitle(options, defaults) {\n if (isString(options.title)) {\n options.title = { text: options.title };\n }\n options.title = deepExtend({}, defaults.title, options.title);\n }\n for (var i = 0; i < panesLength; i++) {\n var options = paneOptions[i] || {};\n setTitle(options, defaults);\n var currentPane = new Pane(options);\n currentPane.paneIndex = i;\n panes.push(currentPane);\n this$1.append(currentPane);\n }\n this.panes = panes;\n },\n createCrosshairs: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\n }\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n for (var j = 0; j < pane.axes.length; j++) {\n var axis = pane.axes[j];\n if (axis.options.crosshair && axis.options.crosshair.visible) {\n var currentCrosshair = new Crosshair(this$1.chartService, axis, axis.options.crosshair);\n this$1.crosshairs.push(currentCrosshair);\n pane.content.append(currentCrosshair);\n }\n }\n }\n },\n removeCrosshairs: function (pane) {\n var crosshairs = this.crosshairs;\n var axes = pane.axes;\n for (var i = crosshairs.length - 1; i >= 0; i--) {\n for (var j = 0; j < axes.length; j++) {\n if (crosshairs[i].axis === axes[j]) {\n crosshairs.splice(i, 1);\n break;\n }\n }\n }\n },\n hideCrosshairs: function () {\n var crosshairs = this.crosshairs;\n for (var idx = 0; idx < crosshairs.length; idx++) {\n crosshairs[idx].hide();\n }\n },\n findPane: function (name) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].options.name === name) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane || panes[0];\n },\n findPointPane: function (point) {\n var panes = this.panes;\n var matchingPane;\n for (var i = 0; i < panes.length; i++) {\n if (panes[i].box.containsPoint(point)) {\n matchingPane = panes[i];\n break;\n }\n }\n return matchingPane;\n },\n appendAxis: function (axis) {\n var pane = this.findPane(axis.options.pane);\n pane.appendAxis(axis);\n this.axes.push(axis);\n axis.plotArea = this;\n },\n removeAxis: function (axisToRemove) {\n var this$1 = this;\n var filteredAxes = [];\n for (var i = 0; i < this.axes.length; i++) {\n var axis = this$1.axes[i];\n if (axisToRemove !== axis) {\n filteredAxes.push(axis);\n } else {\n axis.destroy();\n }\n }\n this.axes = filteredAxes;\n },\n appendChart: function (chart, pane) {\n this.charts.push(chart);\n if (pane) {\n pane.appendChart(chart);\n } else {\n this.append(chart);\n }\n },\n removeChart: function (chartToRemove) {\n var this$1 = this;\n var filteredCharts = [];\n for (var i = 0; i < this.charts.length; i++) {\n var chart = this$1.charts[i];\n if (chart !== chartToRemove) {\n filteredCharts.push(chart);\n } else {\n chart.destroy();\n }\n }\n this.charts = filteredCharts;\n },\n addToLegend: function (series) {\n var count = series.length;\n var legend = this.options.legend;\n var labels = legend.labels || {};\n var inactiveItems = legend.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n var data = [];\n for (var i = 0; i < count; i++) {\n var currentSeries = series[i];\n var seriesVisible = currentSeries.visible !== false;\n if (currentSeries.visibleInLegend === false) {\n continue;\n }\n var text = currentSeries.name;\n var labelTemplate = seriesVisible ? getTemplate(labels) : getTemplate(inactiveItemsLabels) || getTemplate(labels);\n if (labelTemplate) {\n text = labelTemplate({\n text: hasValue(text) ? text : '',\n series: currentSeries\n });\n }\n var defaults = currentSeries._defaults;\n var color = currentSeries.color;\n if (isFunction(color) && defaults) {\n color = defaults.color;\n }\n var itemLabelOptions = void 0, markerColor = void 0;\n if (seriesVisible) {\n itemLabelOptions = {};\n markerColor = color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = inactiveItems.markers.color;\n }\n if (hasValue(text) && text !== '') {\n data.push({\n text: text,\n labels: itemLabelOptions,\n markerColor: markerColor,\n series: currentSeries,\n active: seriesVisible\n });\n }\n }\n append(legend.items, data);\n },\n groupAxes: function (panes) {\n var xAxes = [];\n var yAxes = [];\n for (var paneIx = 0; paneIx < panes.length; paneIx++) {\n var paneAxes = panes[paneIx].axes;\n for (var axisIx = 0; axisIx < paneAxes.length; axisIx++) {\n var axis = paneAxes[axisIx];\n if (axis.options.vertical) {\n yAxes.push(axis);\n } else {\n xAxes.push(axis);\n }\n }\n }\n return {\n x: xAxes,\n y: yAxes,\n any: xAxes.concat(yAxes)\n };\n },\n groupSeriesByPane: function () {\n var this$1 = this;\n var series = this.series;\n var seriesByPane = {};\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var pane = this$1.seriesPaneName(currentSeries);\n if (seriesByPane[pane]) {\n seriesByPane[pane].push(currentSeries);\n } else {\n seriesByPane[pane] = [currentSeries];\n }\n }\n return seriesByPane;\n },\n filterVisibleSeries: function (series) {\n var result = [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n if (currentSeries.visible !== false) {\n result.push(currentSeries);\n }\n }\n return result;\n },\n reflow: function (targetBox) {\n var options = this.options.plotArea;\n var panes = this.panes;\n var margin = getSpacing(options.margin);\n this.box = targetBox.clone().unpad(margin);\n this.reflowPanes();\n this.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 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) {\n var this$1 = this;\n var arrayPoints = [].concat(points);\n this.hide();\n for (var i = 0; i < arrayPoints.length; i++) {\n var point = arrayPoints[i];\n if (point && point.toggleHighlight && point.hasHighlight()) {\n this$1.togglePointHighlight(point, true);\n this$1._points.push(point);\n }\n }\n },\n togglePointHighlight: function (point, show) {\n var toggleHandler = (point.options.highlight || {}).toggle;\n if (toggleHandler) {\n var eventArgs = {\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n value: point.value,\n stackValue: point.stackValue,\n preventDefault: preventDefault,\n visual: point.highlightVisual(),\n show: show\n };\n toggleHandler(eventArgs);\n if (!eventArgs._defaultPrevented) {\n point.toggleHighlight(show);\n }\n } else {\n point.toggleHighlight(show);\n }\n },\n hide: function () {\n var this$1 = this;\n var points = this._points;\n while (points.length) {\n this$1.togglePointHighlight(points.pop(), false);\n }\n },\n isHighlighted: function (element) {\n var points = this._points;\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n if (element === point) {\n return true;\n }\n }\n return false;\n }\n });\n function preventDefault() {\n this._defaultPrevented = true;\n }\n function acceptKey(e, mouseKey) {\n var key = (mouseKey || '').toLowerCase();\n var event = e.event;\n var accept = key === 'none' && !(event.ctrlKey || event.shiftKey || event.altKey) || event[key + 'Key'];\n return accept;\n }\n function toChartAxisRanges(axisRanges) {\n var ranges = {};\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n if (axisRange.axis.options.name) {\n ranges[axisRange.axis.options.name] = {\n min: axisRange.range.min,\n max: axisRange.range.max\n };\n }\n }\n return ranges;\n }\n var Pannable = Class.extend({\n init: function (plotArea, options) {\n this.plotArea = plotArea;\n this.options = deepExtend({}, this.options, options);\n },\n start: function (e) {\n this._active = acceptKey(e, this.options.key);\n return this._active;\n },\n move: function (e) {\n if (this._active) {\n var axisRanges = this.axisRanges = this._panAxes(e, X).concat(this._panAxes(e, Y));\n if (axisRanges.length) {\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n }\n }\n },\n end: function () {\n var active = this._active;\n this._active = false;\n return active;\n },\n pan: function () {\n var ref = this;\n var plotArea = ref.plotArea;\n var axisRanges = ref.axisRanges;\n if (axisRanges.length) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var range = axisRanges[idx];\n plotArea.updateAxisOptions(range.axis, range.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.plotArea;\n },\n _panAxes: function (e, position) {\n var plotArea = this.plotArea;\n var delta = -e[position].delta;\n var lock = (this.options.lock || '').toLowerCase();\n var updatedAxes = [];\n if (delta !== 0 && (lock || '').toLowerCase() !== position) {\n var axes = plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n if (position === X && !axis.options.vertical || position === Y && axis.options.vertical) {\n var range = axis.pan(delta);\n if (range) {\n range.limitRange = true;\n updatedAxes.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n }\n return updatedAxes;\n }\n });\n Pannable.prototype.options = {\n key: 'none',\n lock: 'none'\n };\n var ZoomSelection = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n this.createElement();\n },\n createElement: function () {\n var marquee = this._marquee = document.createElement('div');\n marquee.className = 'k-marquee';\n var marqueeColor = document.createElement('div');\n marqueeColor.className = 'k-marquee-color';\n marquee.appendChild(marqueeColor);\n },\n removeElement: function () {\n if (this._marquee.parentNode) {\n this._marquee.parentNode.removeChild(this._marquee);\n }\n },\n setStyles: function (styles) {\n elementStyles(this._marquee, styles);\n },\n start: function (e) {\n if (acceptKey(e, this.options.key)) {\n var chart = this.chart;\n var point = chart._eventCoordinates(e);\n var zoomPane = this._zoomPane = chart._plotArea.paneByPoint(point);\n var clipBox = zoomPane ? zoomPane.chartsBox().clone() : null;\n if (zoomPane && clipBox) {\n var offset = this._elementOffset();\n clipBox.translate(offset.left, offset.top);\n this._zoomPaneClipBox = clipBox;\n document.body.appendChild(this._marquee);\n this.setStyles({\n left: e.pageX + 1,\n top: e.pageY + 1,\n width: 0,\n height: 0\n });\n return true;\n }\n }\n return false;\n },\n _elementOffset: function () {\n var chartElement = this.chart.element;\n var ref = elementStyles(chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var offset = dataviz.elementOffset(chartElement);\n return {\n left: paddingLeft + offset.left,\n top: paddingTop + offset.top\n };\n },\n move: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n this.setStyles(this._selectionPosition(e));\n }\n },\n end: function (e) {\n var zoomPane = this._zoomPane;\n if (zoomPane) {\n var elementOffset$$1 = this._elementOffset();\n var selectionPosition = this._selectionPosition(e);\n selectionPosition.left -= elementOffset$$1.left;\n selectionPosition.top -= elementOffset$$1.top;\n var start = {\n x: selectionPosition.left,\n y: selectionPosition.top\n };\n var end = {\n x: selectionPosition.left + selectionPosition.width,\n y: selectionPosition.top + selectionPosition.height\n };\n this._updateAxisRanges(start, end);\n this.removeElement();\n delete this._zoomPane;\n return toChartAxisRanges(this.axisRanges);\n }\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n this.removeElement();\n delete this._marquee;\n delete this.chart;\n },\n _updateAxisRanges: function (start, end) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this._zoomPane.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && defined(axis.axisIndex)) {\n var range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n },\n _selectionPosition: function (e) {\n var clipBox = this._zoomPaneClipBox;\n var startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n var pageX = e.x.location;\n var pageY = e.y.location;\n var lock = (this.options.lock || '').toLowerCase();\n var left = Math.min(startLocation.x, pageX);\n var top = Math.min(startLocation.y, pageY);\n var width = Math.abs(startLocation.x - pageX);\n var height = Math.abs(startLocation.y - pageY);\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n });\n ZoomSelection.prototype.options = {\n key: 'shift',\n lock: 'none'\n };\n var MousewheelZoom = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n },\n updateRanges: function (delta) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical) && axis.zoomRange) {\n var range = axis.zoomRange(-delta);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n var plotArea = this.chart._plotArea;\n if (axisRanges && axisRanges.length && plotArea.updateAxisOptions) {\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.chart;\n }\n });\n var LegendLayout = ChartElement.extend({\n init: function (options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n },\n render: function () {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n this.visual = new drawing.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? 'vertical' : 'horizontal',\n reverse: options.rtl,\n alignItems: vertical ? 'start' : 'center'\n });\n for (var idx = 0; idx < children.length; idx++) {\n var legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n },\n reflow: function (box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n renderVisual: function () {\n this.addVisual();\n },\n createVisual: function () {\n }\n });\n var LegendItem = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n },\n createContainer: function () {\n this.container = new dataviz.FloatElement({\n vertical: false,\n wrap: false,\n align: CENTER,\n spacing: this.options.spacing\n });\n this.append(this.container);\n },\n createMarker: function () {\n this.container.append(new ShapeElement(this.markerOptions()));\n },\n markerOptions: function () {\n var options = this.options;\n var markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: { color: markerColor }\n });\n },\n createLabel: function () {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n this.container.append(new TextBox(options.text, labelOptions));\n },\n renderComplete: function () {\n BoxElement.fn.renderComplete.call(this);\n var cursor = this.options.cursor || {};\n var eventSink = this._itemOverlay = Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n this.appendVisual(eventSink);\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && e && e.type === 'contextmenu') {\n e.preventDefault();\n }\n },\n over: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_HOVER, args)) {\n widget._legendItemHover(args.seriesIndex, args.pointIndex);\n }\n return true;\n },\n out: function (widget, e) {\n widget._unsetActivePoint();\n widget.trigger(LEGEND_ITEM_LEAVE, this.eventArgs(e));\n },\n eventArgs: function (e) {\n var options = this.options;\n return {\n element: eventElement(e),\n text: options.text,\n series: options.series,\n seriesIndex: options.series.index,\n pointIndex: options.pointIndex\n };\n },\n renderVisual: function () {\n var this$1 = this;\n var options = this.options;\n var customVisual = options.visual;\n if (customVisual) {\n this.visual = customVisual({\n active: options.active,\n series: options.series,\n sender: this.getSender(),\n pointIndex: options.pointIndex,\n options: {\n markers: this.markerOptions(),\n labels: options.labels\n },\n createVisual: function () {\n this$1.createVisual();\n this$1.renderChildren();\n this$1.renderComplete();\n var defaultVisual = this$1.visual;\n delete this$1.visual;\n return defaultVisual;\n }\n });\n this.addVisual();\n } else {\n BoxElement.fn.renderVisual.call(this);\n }\n }\n });\n var HORIZONTAL = 'horizontal';\n var POINTER = 'pointer';\n var CUSTOM = 'custom';\n var Legend = ChartElement.extend({\n init: function (options, chartService) {\n if (chartService === void 0) {\n chartService = {};\n }\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n if (!inArray(this.options.position, [\n TOP,\n RIGHT,\n BOTTOM,\n LEFT,\n CUSTOM\n ])) {\n this.options.position = RIGHT;\n }\n this.createContainers();\n this.createLegendTitle(options.title);\n this.createItems();\n },\n createContainers: function () {\n var options = this.options;\n var position = options.position;\n var userAlign = options.align;\n var align = position;\n var vAlign = CENTER;\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [\n TOP,\n BOTTOM\n ])) {\n if (userAlign === 'start') {\n align = LEFT;\n } else if (userAlign === 'end') {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === 'start') {\n vAlign = TOP;\n } else if (userAlign === 'end') {\n vAlign = BOTTOM;\n }\n }\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n if (this.hasTitle()) {\n this.itemsContainer = new BoxElement({\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n } else {\n this.itemsContainer = this.container;\n }\n this.append(this.container);\n },\n createItems: function () {\n var chartService = this.getService();\n var options = this.options;\n var vertical = this.isVertical();\n var innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing,\n rtl: chartService.rtl\n }, chartService);\n var items = options.items;\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n var count = items.length;\n for (var i = 0; i < count; i++) {\n var item = items[i];\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n innerElement.render();\n this.itemsContainer.append(innerElement);\n },\n isVertical: function () {\n var ref = this.options;\n var orientation = ref.orientation;\n var position = ref.position;\n var vertical = position === CUSTOM && orientation !== HORIZONTAL || (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [\n LEFT,\n RIGHT\n ]));\n return vertical;\n },\n hasItems: function () {\n return this.container.children[0].children.length > 0;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n if (this.hasTitle()) {\n this.title.reflow(new Box(this.container.box.x1, this.title.box.y1, this.container.box.x2, this.title.box.y2));\n }\n },\n containerReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var position = options.position;\n var width = options.width;\n var height = options.height;\n var pos = position === TOP || position === BOTTOM ? X : Y;\n var vertical = this.isVertical();\n var alignTarget = targetBox.clone();\n var containerBox = targetBox.clone();\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n container.reflow(containerBox);\n containerBox = container.box;\n var box = containerBox.clone();\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n container.reflow(containerBox);\n }\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n this.box = box;\n },\n containerCustomReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var offsetX = options.offsetX;\n var offsetY = options.offsetY;\n var width = options.width;\n var height = options.height;\n var vertical = this.isVertical();\n var containerBox = targetBox.clone();\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n container.reflow(new Box(offsetX, offsetY, offsetX + containerBox.width(), offsetY + containerBox.height()));\n },\n renderVisual: function () {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\n }\n },\n createLegendTitle: function (title) {\n var titleOptions = deepExtend({}, {\n color: BLACK,\n position: TOP,\n align: CENTER\n }, title);\n var text = titleOptions.text;\n if (!title || title.visible === false) {\n return;\n }\n if (defined(titleOptions) && titleOptions.visible) {\n var labelTemplate = getTemplate(titleOptions);\n if (labelTemplate) {\n text = labelTemplate({ text: text });\n } else if (titleOptions.format) {\n text = this.chartService.format.auto(titleOptions.format, text);\n }\n }\n this.title = new TextBox(text, titleOptions);\n this.createTitleLayout();\n this.appendTitleLayoutContent();\n },\n createTitleLayout: function () {\n this.layout = new dataviz.FloatElement({\n vertical: true,\n wrap: false\n });\n this.container.append(this.layout);\n },\n hasTitle: function () {\n return Boolean(this.options.title && this.options.title.visible !== false);\n },\n appendTitleLayoutContent: function () {\n var options = this.options;\n if (options.title.position === BOTTOM) {\n this.layout.append(this.itemsContainer);\n this.layout.append(this.title);\n } else {\n this.layout.append(this.title);\n this.layout.append(this.itemsContainer);\n }\n }\n });\n setDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\n spacing: 6,\n background: '',\n zIndex: 1,\n markers: {\n border: { width: 0 },\n width: 15,\n height: 3,\n type: 'rect',\n align: LEFT,\n vAlign: CENTER\n }\n });\n var PlotAreaFactory = Class.extend({\n init: function () {\n this._registry = [];\n },\n register: function (type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n create: function (srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n return new match.type(series, options, chartService);\n }\n });\n PlotAreaFactory.current = new PlotAreaFactory();\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n function createDiv(className) {\n var element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n return element;\n }\n function closestHandle(element) {\n var current = element;\n while (current && !hasClasses(current, 'k-handle')) {\n current = current.parentNode;\n }\n return current;\n }\n var Selection = Class.extend({\n init: function (chart, categoryAxis, options, observer) {\n var chartElement = chart.element;\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof dataviz.DateCategoryAxis;\n this.initOptions();\n this.visible = this.options.visible && chartElement.offsetHeight;\n if (this.visible) {\n this.createElements();\n this.set(this._index(this.options.from), this._index(this.options.to));\n this.bindEvents();\n }\n },\n onPane: function (pane) {\n return this.categoryAxis.pane === pane;\n },\n createElements: function () {\n var options = this.options;\n var wrapper = this.wrapper = createDiv('k-selector');\n elementStyles(wrapper, {\n top: options.offset.top,\n left: options.offset.left,\n width: options.width,\n height: options.height,\n direction: 'ltr'\n });\n var selection = this.selection = createDiv('k-selection');\n this.leftMask = createDiv('k-mask');\n this.rightMask = createDiv('k-mask');\n wrapper.appendChild(this.leftMask);\n wrapper.appendChild(this.rightMask);\n wrapper.appendChild(selection);\n selection.appendChild(createDiv('k-selection-bg'));\n var leftHandle = this.leftHandle = createDiv('k-handle k-left-handle');\n var rightHandle = this.rightHandle = createDiv('k-handle k-right-handle');\n leftHandle.appendChild(createDiv());\n rightHandle.appendChild(createDiv());\n selection.appendChild(leftHandle);\n selection.appendChild(rightHandle);\n this.chartElement.appendChild(wrapper);\n var selectionStyles = elementStyles(selection, [\n 'borderLeftWidth',\n 'borderRightWidth',\n 'height'\n ]);\n var leftHandleHeight = elementStyles(leftHandle, 'height').height;\n var rightHandleHeight = elementStyles(rightHandle, 'height').height;\n options.selection = {\n border: {\n left: selectionStyles.borderLeftWidth,\n right: selectionStyles.borderRightWidth\n }\n };\n elementStyles(leftHandle, { top: (selectionStyles.height - leftHandleHeight) / 2 });\n elementStyles(rightHandle, { top: (selectionStyles.height - rightHandleHeight) / 2 });\n wrapper.style.cssText = wrapper.style.cssText;\n },\n bindEvents: function () {\n if (this.options.mousewheel !== false) {\n this._mousewheelHandler = this._mousewheel.bind(this);\n var obj;\n bindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n }\n this._domEvents = services.DomEventsBuilder.create(this.wrapper, {\n stopPropagation: true,\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n press: this._press.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n },\n initOptions: function () {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var box = categoryAxis.pane.chartsBox();\n var intlService = this.chart.chartService.intl;\n if (this._dateAxis) {\n deepExtend(options, {\n min: parseDate(intlService, options.min),\n max: parseDate(intlService, options.max),\n from: parseDate(intlService, options.from),\n to: parseDate(intlService, options.to)\n });\n }\n var ref$1 = elementStyles(this.chartElement, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref$1.paddingLeft;\n var paddingTop = ref$1.paddingTop;\n this.options = deepExtend({}, {\n width: box.width(),\n height: box.height() + SELECTOR_HEIGHT_ADJUST,\n padding: {\n left: paddingLeft,\n top: paddingTop\n },\n offset: {\n left: box.x1 + paddingLeft,\n top: box.y1 + paddingTop\n },\n from: options.min,\n to: options.max\n }, options);\n },\n destroy: function () {\n if (this._domEvents) {\n this._domEvents.destroy();\n delete this._domEvents;\n }\n clearTimeout(this._mwTimeout);\n this._state = null;\n if (this.wrapper) {\n if (this._mousewheelHandler) {\n var obj;\n unbindEvents(this.wrapper, (obj = {}, obj[MOUSEWHEEL] = this._mousewheelHandler, obj));\n this._mousewheelHandler = null;\n }\n this.chartElement.removeChild(this.wrapper);\n this.wrapper = null;\n }\n },\n _rangeEventArgs: function (range) {\n return {\n axis: this.categoryAxis.options,\n from: this._value(range.from),\n to: this._value(range.to)\n };\n },\n _start: function (e) {\n var options = this.options;\n var target = eventElement(e);\n if (this._state || !target) {\n return;\n }\n this.chart._unsetActivePoint();\n this._state = {\n moveTarget: closestHandle(target) || target,\n startLocation: e.x ? e.x.location : 0,\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs({\n from: this._index(options.from),\n to: this._index(options.to)\n });\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n }\n },\n _press: function (e) {\n var handle;\n if (this._state) {\n handle = this._state.moveTarget;\n } else {\n handle = closestHandle(eventElement(e));\n }\n if (handle) {\n dataviz.addClass(handle, 'k-handle-active');\n }\n },\n _move: function (e) {\n if (!this._state) {\n return;\n }\n var ref = this;\n var state = ref._state;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var range = state.range;\n var target = state.moveTarget;\n var reverse = categoryAxis.options.reverse;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var delta = state.startLocation - e.x.location;\n var oldRange = {\n from: range.from,\n to: range.to\n };\n var span = range.to - range.from;\n var scale = elementStyles(this.wrapper, 'width').width / (categoryAxis.categoriesCount() - 1);\n var offset = Math.round(delta / scale) * (reverse ? -1 : 1);\n if (!target) {\n return;\n }\n var leftHandle = hasClasses(target, 'k-left-handle');\n var rightHandle = hasClasses(target, 'k-right-handle');\n if (hasClasses(target, 'k-selection k-selection-bg')) {\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n } else if (leftHandle && !reverse || rightHandle && reverse) {\n range.from = Math.min(Math.max(min, from - offset), max - 1);\n range.to = Math.max(range.from + 1, range.to);\n } else if (leftHandle && reverse || rightHandle && !reverse) {\n range.to = Math.min(Math.max(min + 1, to - offset), max);\n range.from = Math.min(range.to - 1, range.from);\n }\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n }\n },\n _end: function () {\n if (this._state) {\n var moveTarget = this._state.moveTarget;\n if (moveTarget) {\n dataviz.removeClass(moveTarget, 'k-handle-active');\n }\n var range = this._state.range;\n this.set(range.from, range.to);\n this.trigger(SELECT_END, this._rangeEventArgs(range));\n delete this._state;\n }\n },\n _tap: function (e) {\n var ref = this;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var coords = this.chart._eventCoordinates(e);\n var categoryIx = categoryAxis.pointCategoryIndex(new Point(coords.x, categoryAxis.box.y1));\n var from = this._index(options.from);\n var to = this._index(options.to);\n var min = this._index(options.min);\n var max = this._index(options.max);\n var span = to - from;\n var mid = from + span / 2;\n var range = {};\n var rightClick = e.event.which === 3;\n var offset = Math.round(mid - categoryIx);\n if (this._state || rightClick) {\n return;\n }\n this.chart._unsetActivePoint();\n if (!categoryAxis.options.justified) {\n offset--;\n }\n range.from = Math.min(Math.max(min, from - offset), max - span);\n range.to = Math.min(range.from + span, max);\n this._start(e);\n if (this._state) {\n this._state.range = range;\n this.trigger(SELECT, this._rangeEventArgs(range));\n this._end();\n }\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n this._start({ target: this.selection });\n if (this._state) {\n var range = this._state.range;\n e.preventDefault();\n e.stopPropagation();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (this.options.mousewheel.reverse) {\n delta *= -1;\n }\n if (this.expand(delta)) {\n this.trigger(SELECT, {\n axis: this.categoryAxis.options,\n delta: delta,\n originalEvent: e,\n from: this._value(range.from),\n to: this._value(range.to)\n });\n }\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._end();\n }, MOUSEWHEEL_DELAY);\n }\n },\n _gesturestart: function (e) {\n var options = this.options;\n this._state = {\n range: {\n from: this._index(options.from),\n to: this._index(options.to)\n }\n };\n var args = this._rangeEventArgs(this._state.range);\n if (this.trigger(SELECT_START, args)) {\n this._state = null;\n } else {\n e.preventDefault();\n }\n },\n _gestureend: function () {\n if (this._state) {\n this.trigger(SELECT_END, this._rangeEventArgs(this._state.range));\n delete this._state;\n }\n },\n _gesturechange: function (e) {\n var ref = this;\n var chart = ref.chart;\n var state = ref._state;\n var options = ref.options;\n var categoryAxis = ref.categoryAxis;\n var range = state.range;\n var p0 = chart._toModelCoordinates(e.touches[0].x.location).x;\n var p1 = chart._toModelCoordinates(e.touches[1].x.location).x;\n var left = Math.min(p0, p1);\n var right = Math.max(p0, p1);\n e.preventDefault();\n range.from = categoryAxis.pointCategoryIndex(new Point(left)) || options.min;\n range.to = categoryAxis.pointCategoryIndex(new Point(right)) || options.max;\n this.move(range.from, range.to);\n this.trigger(SELECT, this._rangeEventArgs(range));\n },\n _index: function (value) {\n var index = value;\n if (value instanceof Date) {\n index = this.categoryAxis.categoryIndex(value);\n }\n return index;\n },\n _value: function (index) {\n var value = index;\n if (this._dateAxis) {\n value = this.categoryAxis.categoryAt(index);\n if (value > this.options.max) {\n value = this.options.max;\n }\n }\n return value;\n },\n _slot: function (value) {\n var categoryAxis = this.categoryAxis;\n var index = this._index(value);\n return categoryAxis.getSlot(index, index, true);\n },\n move: function (from, to) {\n var options = this.options;\n var reverse = this.categoryAxis.options.reverse;\n var offset = options.offset;\n var padding = options.padding;\n var border = options.selection.border;\n var left = reverse ? to : from;\n var right = reverse ? from : to;\n var edge = 'x' + (reverse ? 2 : 1);\n var box = this._slot(left);\n var leftMaskWidth = round(box[edge] - offset.left + padding.left);\n elementStyles(this.leftMask, { width: leftMaskWidth });\n elementStyles(this.selection, { left: leftMaskWidth });\n box = this._slot(right);\n var rightMaskWidth = round(options.width - (box[edge] - offset.left + padding.left));\n elementStyles(this.rightMask, { width: rightMaskWidth });\n var distance = options.width - rightMaskWidth;\n if (distance !== options.width) {\n distance += border.right;\n }\n elementStyles(this.rightMask, { left: distance });\n elementStyles(this.selection, { width: Math.max(options.width - (leftMaskWidth + rightMaskWidth) - border.right, 0) });\n },\n set: function (from, to) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var fromValue = limitValue(this._index(from), min, max);\n var toValue = limitValue(this._index(to), fromValue + 1, max);\n if (options.visible) {\n this.move(fromValue, toValue);\n }\n options.from = this._value(fromValue);\n options.to = this._value(toValue);\n },\n expand: function (delta) {\n var options = this.options;\n var min = this._index(options.min);\n var max = this._index(options.max);\n var zDir = options.mousewheel.zoom;\n var from = this._index(options.from);\n var to = this._index(options.to);\n var range = {\n from: from,\n to: to\n };\n var oldRange = deepExtend({}, range);\n if (this._state) {\n range = this._state.range;\n }\n if (zDir !== RIGHT) {\n range.from = limitValue(limitValue(from - delta, 0, to - 1), min, max);\n }\n if (zDir !== LEFT) {\n range.to = limitValue(limitValue(to + delta, range.from + 1, max), min, max);\n }\n if (range.from !== oldRange.from || range.to !== oldRange.to) {\n this.set(range.from, range.to);\n return true;\n }\n },\n trigger: function (name, args) {\n return (this.observer || this.chart).trigger(name, args);\n }\n });\n setDefaultOptions(Selection, {\n visible: true,\n mousewheel: { zoom: 'both' },\n min: MIN_VALUE,\n max: MAX_VALUE\n });\n var Tooltip = BaseTooltip.extend({\n show: function (point) {\n if (!point || !point.tooltipAnchor || this._current && this._current === point) {\n return;\n }\n var options = deepExtend({}, this.options, point.options.tooltip);\n var anchor = point.tooltipAnchor();\n if (anchor) {\n this._current = point;\n BaseTooltip.fn.show.call(this, {\n point: point,\n anchor: anchor\n }, options, point);\n } else {\n this.hide();\n }\n },\n hide: function () {\n delete this._current;\n BaseTooltip.fn.hide.call(this);\n }\n });\n var SharedTooltip = BaseTooltip.extend({\n init: function (plotArea, options) {\n BaseTooltip.fn.init.call(this, plotArea.chartService, options);\n this.plotArea = plotArea;\n this.formatService = plotArea.chartService.format;\n },\n showAt: function (points, coords) {\n var tooltipPoints = grep(points, function (point) {\n var tooltip = point.series.tooltip;\n var excluded = tooltip && tooltip.visible === false;\n return !excluded;\n });\n if (tooltipPoints.length > 0) {\n var point = tooltipPoints[0];\n var slot = this.plotArea.categoryAxis.getSlot(point.categoryIx);\n var anchor = coords ? this._slotAnchor(coords, slot) : this._defaultAnchor(point, slot);\n this.show({\n anchor: anchor,\n shared: true,\n points: points,\n category: point.category,\n categoryText: this.formatService.auto(this.options.categoryFormat, point.category),\n series: this.plotArea.series\n }, this.options);\n }\n },\n _slotAnchor: function (point, slot) {\n var axis = this.plotArea.categoryAxis;\n var align = {\n horizontal: 'left',\n vertical: 'center'\n };\n if (!axis.options.vertical) {\n point.x = slot.center().x;\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n var box = point.owner.pane.chartsBox();\n var vertical = this.plotArea.categoryAxis.options.vertical;\n var center = box.center();\n var slotCenter = slot.center();\n var align = {\n horizontal: 'center',\n vertical: 'center'\n };\n var centerPoint;\n if (vertical) {\n centerPoint = new Point(center.x, slotCenter.y);\n } else {\n centerPoint = new Point(slotCenter.x, center.y);\n }\n return {\n point: centerPoint,\n align: align\n };\n }\n });\n setDefaultOptions(SharedTooltip, { categoryFormat: '{0:d}' });\n var BarChartAnimation = Animation.extend({\n setup: function () {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var bbox = element.bbox();\n if (bbox) {\n this.origin = options.origin;\n var axis = options.vertical ? Y : X;\n var fromScale = this.fromScale = new GeometryPoint(1, 1);\n fromScale[axis] = START_SCALE;\n element.transform(transform().scale(fromScale.x, fromScale.y));\n } else {\n this.abort();\n }\n },\n step: function (pos) {\n var scaleX = dataviz.interpolateValue(this.fromScale.x, 1, pos);\n var scaleY = dataviz.interpolateValue(this.fromScale.y, 1, pos);\n this.element.transform(transform().scale(scaleX, scaleY, this.origin));\n },\n abort: function () {\n Animation.fn.abort.call(this);\n this.element.transform(null);\n }\n });\n setDefaultOptions(BarChartAnimation, { duration: INITIAL_ANIMATION_DURATION });\n AnimationFactory.current.register(BAR, BarChartAnimation);\n var BubbleAnimation = Animation.extend({\n setup: function () {\n var center = this.center = this.element.bbox().center();\n this.element.transform(transform().scale(START_SCALE, START_SCALE, center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.center));\n }\n });\n setDefaultOptions(BubbleAnimation, { easing: 'easeOutElastic' });\n AnimationFactory.current.register(BUBBLE, BubbleAnimation);\n var FadeInAnimation = Animation.extend({\n setup: function () {\n this.fadeTo = this.element.opacity();\n this.element.opacity(0);\n },\n step: function (pos) {\n this.element.opacity(pos * this.fadeTo);\n }\n });\n setDefaultOptions(FadeInAnimation, {\n duration: 200,\n easing: 'linear'\n });\n AnimationFactory.current.register(FADEIN, FadeInAnimation);\n var PieAnimation = Animation.extend({\n setup: function () {\n this.element.transform(transform().scale(START_SCALE, START_SCALE, this.options.center));\n },\n step: function (pos) {\n this.element.transform(transform().scale(pos, pos, this.options.center));\n }\n });\n setDefaultOptions(PieAnimation, {\n easing: 'easeOutElastic',\n duration: INITIAL_ANIMATION_DURATION\n });\n AnimationFactory.current.register(PIE, PieAnimation);\n var ScatterLineChart = ScatterChart.extend({\n render: function () {\n ScatterChart.fn.render.call(this);\n this.renderSegments();\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n return new pointType(linePoints, currentSeries, seriesIx);\n },\n animationPoints: function () {\n var points = ScatterChart.fn.animationPoints.call(this);\n return points.concat(this._segments);\n },\n createMissingValue: function (value, missingValues) {\n if (missingValues === ZERO) {\n var missingValue = {\n x: value.x,\n y: value.y\n };\n if (!hasValue(missingValue.x)) {\n missingValue.x = 0;\n }\n if (!hasValue(missingValue.y)) {\n missingValue.y = 0;\n }\n return missingValue;\n }\n }\n });\n deepExtend(ScatterLineChart.prototype, LineChartMixin);\n var XYPlotArea = PlotAreaBase.extend({\n initFields: function () {\n this.namedXAxes = {};\n this.namedYAxes = {};\n this.xAxisRangeTracker = new AxisGroupRangeTracker();\n this.yAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function (panes) {\n var this$1 = this;\n if (panes === void 0) {\n panes = this.panes;\n }\n var seriesByPane = this.groupSeriesByPane();\n for (var i = 0; i < panes.length; i++) {\n var pane = panes[i];\n var paneSeries = seriesByPane[pane.options.name || 'default'] || [];\n this$1.addToLegend(paneSeries);\n var filteredSeries = this$1.filterVisibleSeries(paneSeries);\n if (!filteredSeries) {\n continue;\n }\n this$1.createScatterChart(filterSeriesByType(filteredSeries, SCATTER), pane);\n this$1.createScatterLineChart(filterSeriesByType(filteredSeries, SCATTER_LINE), pane);\n this$1.createBubbleChart(filterSeriesByType(filteredSeries, BUBBLE), pane);\n }\n this.createAxes(panes);\n },\n appendChart: function (chart, pane) {\n this.xAxisRangeTracker.update(chart.xAxisRanges);\n this.yAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n },\n removeAxis: function (axis) {\n var axisName = axis.options.name;\n PlotAreaBase.fn.removeAxis.call(this, axis);\n if (axis.options.vertical) {\n this.yAxisRangeTracker.reset(axisName);\n delete this.namedYAxes[axisName];\n } else {\n this.xAxisRangeTracker.reset(axisName);\n delete this.namedXAxes[axisName];\n }\n if (axis === this.axisX) {\n delete this.axisX;\n }\n if (axis === this.axisY) {\n delete this.axisY;\n }\n },\n seriesPaneName: function (series) {\n var options = this.options;\n var xAxisName = series.xAxis;\n var xAxisOptions = [].concat(options.xAxis);\n var xAxis = grep(xAxisOptions, function (a) {\n return a.name === xAxisName;\n })[0];\n var yAxisName = series.yAxis;\n var yAxisOptions = [].concat(options.yAxis);\n var yAxis = grep(yAxisOptions, function (a) {\n return a.name === yAxisName;\n })[0];\n var panes = options.panes || [{}];\n var defaultPaneName = panes[0].name || 'default';\n var paneName = (xAxis || {}).pane || (yAxis || {}).pane || defaultPaneName;\n return paneName;\n },\n createScatterChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createScatterLineChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new ScatterLineChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createBubbleChart: function (series, pane) {\n if (series.length > 0) {\n this.appendChart(new BubbleChart(this, {\n series: series,\n clip: pane.options.clip\n }), pane);\n }\n },\n createXYAxis: function (options, vertical, axisIndex) {\n var axisName = options.name;\n var namedAxes = vertical ? this.namedYAxes : this.namedXAxes;\n var tracker = vertical ? this.yAxisRangeTracker : this.xAxisRangeTracker;\n var axisOptions = deepExtend({ reverse: !vertical && this.chartService.rtl }, options, { vertical: vertical });\n var isLog = equalsIgnoreCase(axisOptions.type, LOGARITHMIC);\n var defaultRange = tracker.query();\n var defaultAxisRange = isLog ? {\n min: 0.1,\n max: 1\n } : {\n min: 0,\n max: 1\n };\n var range = tracker.query(axisName) || defaultRange || defaultAxisRange;\n var typeSamples = [\n axisOptions.min,\n axisOptions.max\n ];\n var series = this.series;\n for (var seriesIx = 0; seriesIx < series.length; seriesIx++) {\n var currentSeries = series[seriesIx];\n var seriesAxisName = currentSeries[vertical ? 'yAxis' : 'xAxis'];\n if (seriesAxisName === axisOptions.name || axisIndex === 0 && !seriesAxisName) {\n var firstPointValue = SeriesBinder.current.bindPoint(currentSeries, 0).valueFields;\n typeSamples.push(firstPointValue[vertical ? 'y' : 'x']);\n break;\n }\n }\n if (axisIndex === 0 && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var inferredDate;\n for (var i = 0; i < typeSamples.length; i++) {\n if (typeSamples[i] instanceof Date) {\n inferredDate = true;\n break;\n }\n }\n var axisType;\n if (equalsIgnoreCase(axisOptions.type, DATE) || !axisOptions.type && inferredDate) {\n axisType = dataviz.DateValueAxis;\n } else if (isLog) {\n axisType = dataviz.LogarithmicAxis;\n } else {\n axisType = dataviz.NumericAxis;\n }\n var axis = new axisType(range.min, range.max, axisOptions, this.chartService);\n axis.axisIndex = axisIndex;\n if (axisName) {\n if (namedAxes[axisName]) {\n throw new Error((vertical ? 'Y' : 'X') + ' axis with name ' + axisName + ' is already defined');\n }\n namedAxes[axisName] = axis;\n }\n this.appendAxis(axis);\n return axis;\n },\n createAxes: function (panes) {\n var this$1 = this;\n var options = this.options;\n var xAxesOptions = [].concat(options.xAxis);\n var xAxes = [];\n var yAxesOptions = [].concat(options.yAxis);\n var yAxes = [];\n for (var idx = 0; idx < xAxesOptions.length; idx++) {\n var axisPane = this$1.findPane(xAxesOptions[idx].pane);\n if (inArray(axisPane, panes)) {\n xAxes.push(this$1.createXYAxis(xAxesOptions[idx], false, idx));\n }\n }\n for (var idx$1 = 0; idx$1 < yAxesOptions.length; idx$1++) {\n var axisPane$1 = this$1.findPane(yAxesOptions[idx$1].pane);\n if (inArray(axisPane$1, panes)) {\n yAxes.push(this$1.createXYAxis(yAxesOptions[idx$1], true, idx$1));\n }\n }\n this.axisX = this.axisX || xAxes[0];\n this.axisY = this.axisY || yAxes[0];\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var allAxes = this.axes;\n var length = allAxes.length;\n var xValues = [];\n var yValues = [];\n for (var i = 0; i < length; i++) {\n var axis = allAxes[i];\n var values = axis.options.vertical ? yValues : xValues;\n var currentValue = axis.getValue(point);\n if (currentValue !== null) {\n values.push(currentValue);\n }\n }\n if (xValues.length > 0 && yValues.length > 0) {\n chart.trigger(eventType, {\n element: eventElement(e),\n originalEvent: e,\n x: singleItemOrArray(xValues),\n y: singleItemOrArray(yValues)\n });\n }\n },\n updateAxisOptions: function (axis, options) {\n var vertical = axis.options.vertical;\n var axes = this.groupAxes(this.panes);\n var index = (vertical ? axes.y : axes.x).indexOf(axis);\n updateAxisOptions$1(this.options, index, vertical, options);\n updateAxisOptions$1(this.originalOptions, index, vertical, options);\n }\n });\n function updateAxisOptions$1(targetOptions, axisIndex, vertical, options) {\n var axisOptions = [].concat(vertical ? targetOptions.yAxis : targetOptions.xAxis)[axisIndex];\n deepExtend(axisOptions, options);\n }\n setDefaultOptions(XYPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(XYPlotArea.prototype, PlotAreaEventsMixin);\n var PieSegment = ChartElement.extend({\n init: function (value, sector, options) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.sector = sector;\n },\n render: function () {\n var labels = this.options.labels;\n var chartService = this.owner.chartService;\n var labelText = this.value;\n if (this._rendered || this.visible === false) {\n return;\n }\n this._rendered = true;\n var labelTemplate = getTemplate(labels);\n var pointData = this.pointData();\n if (labelTemplate) {\n labelText = labelTemplate(pointData);\n } else if (labels.format) {\n labelText = chartService.format.auto(labels.format, labelText);\n }\n if (labels.visible && (labelText || labelText === 0)) {\n if (labels.position === CENTER || labels.position === INSIDE_END) {\n if (!labels.color) {\n var brightnessValue = new Color(this.options.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n }\n if (!labels.background) {\n labels.background = this.options.color;\n }\n } else {\n var themeLabels = chartService.theme.seriesDefaults.labels;\n labels.color = labels.color || themeLabels.color;\n labels.background = labels.background || themeLabels.background;\n }\n this.label = new TextBox(labelText, deepExtend({}, labels, {\n align: CENTER,\n vAlign: '',\n animation: {\n type: FADEIN,\n delay: this.animationDelay\n }\n }), pointData);\n this.append(this.label);\n }\n },\n reflow: function (targetBox) {\n this.render();\n this.box = targetBox;\n this.reflowLabel();\n },\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var labelsDistance = labelsOptions.distance;\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n var labelWidth = label.box.width();\n var lp;\n if (labelsOptions.position === CENTER) {\n sector.radius = Math.abs((sector.radius - labelHeight) / 2) + labelHeight;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else if (labelsOptions.position === INSIDE_END) {\n sector.radius = sector.radius - labelHeight / 2;\n lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n var x1;\n lp = sector.clone().expand(labelsDistance).point(angle);\n if (lp.x >= sector.center.x) {\n x1 = lp.x + labelWidth;\n label.orientation = RIGHT;\n } else {\n x1 = lp.x - labelWidth;\n label.orientation = LEFT;\n }\n label.reflow(new Box(x1, lp.y - labelHeight, lp.x, lp.y));\n }\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n ChartElement.fn.createVisual.call(this);\n if (this.value) {\n if (options.visual) {\n var startAngle = (sector.startAngle + 180) % 360;\n var visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n startAngle: startAngle,\n endAngle: startAngle + sector.angle,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n var group = new Group();\n this$1.createSegmentVisual(group);\n return group;\n }\n });\n if (visual) {\n this.visual.append(visual);\n }\n } else {\n this.createSegmentVisual(this.visual);\n }\n }\n },\n createSegmentVisual: function (group) {\n var ref = this;\n var sector = ref.sector;\n var options = ref.options;\n var borderOptions = options.border || {};\n var border = borderOptions.width > 0 ? {\n stroke: {\n color: borderOptions.color,\n width: borderOptions.width,\n opacity: borderOptions.opacity,\n dashType: borderOptions.dashType\n }\n } : {};\n var color = options.color;\n var fill = {\n color: color,\n opacity: options.opacity\n };\n var visual = this.createSegment(sector, deepExtend({\n fill: fill,\n stroke: { opacity: options.opacity },\n zIndex: options.zIndex\n }, border));\n group.append(visual);\n if (hasGradientOverlay(options)) {\n group.append(this.createGradientOverlay(visual, {\n baseColor: color,\n fallbackFill: fill\n }, deepExtend({\n center: [\n sector.center.x,\n sector.center.y\n ],\n innerRadius: sector.innerRadius,\n radius: sector.radius,\n userSpace: true\n }, options.overlay)));\n }\n },\n createSegment: function (sector, options) {\n if (options.singleSegment) {\n return new drawing.Circle(new geometry.Circle(new GeometryPoint(sector.center.x, sector.center.y), sector.radius), options);\n }\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n },\n createAnimation: function () {\n var ref = this;\n var options = ref.options;\n var center = ref.sector.center;\n deepExtend(options, {\n animation: {\n center: [\n center.x,\n center.y\n ],\n delay: this.animationDelay\n }\n });\n ChartElement.fn.createAnimation.call(this);\n },\n createHighlight: function (options) {\n var highlight = this.options.highlight || {};\n var border = highlight.border || {};\n return this.createSegment(this.sector, deepExtend({}, options, {\n fill: {\n color: highlight.color,\n opacity: highlight.opacity\n },\n stroke: {\n opacity: border.opacity,\n width: border.width,\n color: border.color\n }\n }));\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var sector = this.sector;\n return {\n options: this.options,\n radius: sector.radius,\n innerRadius: sector.innerRadius,\n center: new GeometryPoint(sector.center.x, sector.center.y),\n startAngle: sector.startAngle,\n endAngle: sector.angle + sector.startAngle,\n visual: this.visual\n };\n },\n tooltipAnchor: function () {\n var sector = this.sector.clone().expand(TOOLTIP_OFFSET);\n var midAndle = sector.middle();\n var midPoint = sector.point(midAndle);\n return {\n point: midPoint,\n align: tooltipAlignment(midAndle + 180)\n };\n },\n formatValue: function (format) {\n return this.owner.formatPointValue(this, format);\n },\n pointData: function () {\n return {\n dataItem: this.dataItem,\n category: this.category,\n value: this.value,\n series: this.series,\n percentage: this.percentage\n };\n }\n });\n var RAD_30 = round(dataviz.rad(30), DEFAULT_PRECISION);\n var RAD_60 = round(dataviz.rad(60), DEFAULT_PRECISION);\n function tooltipAlignment(angle) {\n var radians = dataviz.rad(angle);\n var sine = round(Math.sin(radians), DEFAULT_PRECISION);\n var cosine = round(Math.cos(radians), DEFAULT_PRECISION);\n var horizontal;\n if (Math.abs(sine) > RAD_60) {\n horizontal = CENTER;\n } else if (cosine < 0) {\n horizontal = RIGHT;\n } else {\n horizontal = LEFT;\n }\n var vertical;\n if (Math.abs(sine) < RAD_30) {\n vertical = CENTER;\n } else if (sine < 0) {\n vertical = BOTTOM;\n } else {\n vertical = TOP;\n }\n return {\n horizontal: horizontal,\n vertical: vertical\n };\n }\n setDefaultOptions(PieSegment, {\n color: WHITE,\n overlay: { gradient: 'roundedBevel' },\n border: { width: 0.5 },\n labels: {\n visible: false,\n distance: 35,\n font: datavizConstants.DEFAULT_FONT,\n margin: getSpacing(0.5),\n align: CIRCLE,\n zIndex: 1,\n position: OUTSIDE_END\n },\n animation: { type: PIE },\n highlight: {\n visible: true,\n border: { width: 1 }\n },\n visible: true\n });\n deepExtend(PieSegment.prototype, PointEventsMixin);\n var PieChartMixin = {\n createLegendItem: function (value, point, options) {\n var legendOptions = this.options.legend || {};\n var labelsOptions = legendOptions.labels || {};\n var inactiveItems = legendOptions.inactiveItems || {};\n var inactiveItemsLabels = inactiveItems.labels || {};\n if (options && options.visibleInLegend !== false) {\n var pointVisible = options.visible !== false;\n var labelTemplate = pointVisible ? getTemplate(labelsOptions) : getTemplate(inactiveItemsLabels) || getTemplate(labelsOptions);\n var text = options.category;\n if (labelTemplate) {\n text = labelTemplate({\n text: text,\n series: options.series,\n dataItem: options.dataItem,\n percentage: options.percentage,\n value: value\n });\n }\n var itemLabelOptions, markerColor;\n if (pointVisible) {\n itemLabelOptions = {};\n markerColor = point.color;\n } else {\n itemLabelOptions = {\n color: inactiveItemsLabels.color,\n font: inactiveItemsLabels.font\n };\n markerColor = (inactiveItems.markers || {}).color;\n }\n if (hasValue(text) && text !== '') {\n this.legendItems.push({\n active: pointVisible,\n pointIndex: options.index,\n text: text,\n series: options.series,\n markerColor: markerColor,\n labels: itemLabelOptions\n });\n }\n }\n }\n };\n var PIE_SECTOR_ANIM_DELAY = 70;\n var PieChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.chartService = plotArea.chartService;\n this.points = [];\n this.legendItems = [];\n this.render();\n },\n render: function () {\n this.traverseDataPoints(this.addValue.bind(this));\n },\n traverseDataPoints: function (callback) {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var colorsCount = seriesColors.length;\n var series = options.series;\n var seriesCount = series.length;\n for (var seriesIx = 0; seriesIx < seriesCount; seriesIx++) {\n var currentSeries = series[seriesIx];\n var data = currentSeries.data;\n var ref$1 = bindSegments(currentSeries);\n var total = ref$1.total;\n var points = ref$1.points;\n var count = ref$1.count;\n var anglePerValue = 360 / total;\n var constantAngle = void 0;\n if (!isFinite(anglePerValue)) {\n constantAngle = 360 / count;\n }\n var currentAngle = void 0;\n if (defined(currentSeries.startAngle)) {\n currentAngle = currentSeries.startAngle;\n } else {\n currentAngle = options.startAngle;\n }\n if (seriesIx !== seriesCount - 1) {\n if (currentSeries.labels.position === OUTSIDE_END) {\n currentSeries.labels.position = CENTER;\n }\n }\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n var value = pointData.value;\n var visible = pointData.visible;\n var angle = value !== 0 ? constantAngle || value * anglePerValue : 0;\n var explode = data.length !== 1 && Boolean(fields.explode);\n if (!isFunction(currentSeries.color)) {\n currentSeries.color = fields.color || seriesColors[i % colorsCount];\n }\n callback(pointData.valueFields.value, new dataviz.Ring(null, 0, 0, currentAngle, angle), {\n owner: this$1,\n category: defined(fields.category) ? fields.category : '',\n index: i,\n series: currentSeries,\n seriesIx: seriesIx,\n dataItem: data[i],\n percentage: total !== 0 ? value / total : 0,\n explode: explode,\n visibleInLegend: fields.visibleInLegend,\n visible: visible,\n zIndex: seriesCount - seriesIx,\n animationDelay: this$1.animationDelay(i, seriesIx, seriesCount)\n });\n if (visible !== false) {\n currentAngle += angle;\n }\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n category: fields.category,\n percentage: fields.percentage\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'visual',\n 'toggle'\n ]\n });\n },\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (fields.visible === false) {\n return;\n }\n var segment = new PieSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var points = ref.points;\n var seriesConfigs = ref.seriesConfigs;\n if (seriesConfigs === void 0) {\n seriesConfigs = [];\n }\n var count = points.length;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var newBox = new Box(box.x1, box.y1, box.x1 + minWidth, box.y1 + minWidth);\n var newBoxCenter = newBox.center();\n var boxCenter = box.center();\n var seriesCount = options.series.length;\n var leftSideLabels = [];\n var rightSideLabels = [];\n var padding = valueOrDefault(options.padding, defaultPadding);\n this.targetBox = targetBox;\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n var radius = halfMinWidth - padding;\n var center = new Point(radius + newBox.x1 + padding, radius + newBox.y1 + padding);\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n segment.reflow(newBox);\n var label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n this.box = newBox;\n },\n leftLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n rightLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n distanceBetweenLabels: function (labels) {\n var segment = last(this.points);\n var sector = segment.sector;\n var count = labels.length - 1;\n var lr = sector.radius + segment.options.labels.distance;\n var distances = [];\n var firstBox = labels[0].box;\n var distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n distances.push(distance);\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n return distances;\n },\n distributeLabels: function (distances, labels) {\n var this$1 = this;\n var count = distances.length;\n var left, right, remaining;\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n this.reflowLabels(distances, labels);\n },\n _takeDistance: function (distances, anchor, position, amount) {\n var result = amount;\n if (distances[position] > 0) {\n var available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n return result;\n },\n reflowLabels: function (distances, labels) {\n var this$1 = this;\n var segment = last(this.points);\n var sector = segment.sector;\n var labelOptions = segment.options.labels;\n var labelsCount = labels.length;\n var labelDistance = labelOptions.distance;\n var boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n var boxX;\n distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n boxY += distances[i];\n boxX = this$1.hAlignLabel(box.x2, sector.clone().expand(labelDistance), boxY, boxY + box.height(), label.orientation === RIGHT);\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n boxY += box.height();\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var connectors = ref.options.connectors;\n var points = ref.points;\n var count = points.length;\n var space = 4;\n ChartElement.fn.createVisual.call(this);\n this._connectorLines = [];\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var label = segment.label;\n var angle = sector.middle();\n var connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n if (label) {\n var connectorLine = new Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n if (label.options.position === OUTSIDE_END) {\n var box = label.box;\n var centerPoint = sector.center;\n var start = sector.point(angle);\n var middle = new Point(box.x1, box.center().y);\n var sr = void 0, end = void 0, crossing = void 0;\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n connectorLine.lineTo(end.x, end.y);\n this$1._connectorLines.push(connectorLine);\n this$1.visual.append(connectorLine);\n }\n }\n }\n },\n renderVisual: function () {\n ChartElement.fn.renderVisual.call(this);\n if (dataviz.find(this.options.series, function (options) {\n return options.autoFit;\n })) {\n var targetBox = this.targetBox;\n var pieCenter = this.box.center();\n var bbox = this.visual.bbox();\n if (!bbox) {\n return;\n }\n var bboxBottom = bbox.bottomRight();\n var scale = Math.min((pieCenter.y - targetBox.y1) / (pieCenter.y - bbox.origin.y), (targetBox.y2 - pieCenter.y) / (bboxBottom.y - pieCenter.y), (pieCenter.x - targetBox.x1) / (pieCenter.x - bbox.origin.x), (targetBox.x2 - pieCenter.x) / (bboxBottom.x - pieCenter.x));\n if (scale < 1) {\n this.visual.transform(transform().scale(scale, scale, [\n pieCenter.x,\n pieCenter.y\n ]));\n }\n }\n },\n labelComparator: function (reverse) {\n var reverseValue = reverse ? -1 : 1;\n return function (a, b) {\n var first = (a.parent.sector.middle() + 270) % 360;\n var second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n },\n hAlignLabel: function (originalX, sector, y1, y2, direction) {\n var radius = sector.radius;\n var sector_center = sector.center;\n var cx = sector_center.x;\n var cy = sector_center.y;\n var t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n if (t > radius) {\n return originalX;\n }\n return cx + Math.sqrt(radius * radius - t * t) * (direction ? 1 : -1);\n },\n pointInCircle: function (point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n animationDelay: function (categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n },\n stackRoot: function () {\n return this;\n }\n });\n function intersection(a1, a2, b1, b2) {\n var uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n var ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n var result;\n if (ub !== 0) {\n var ua = uat / ub;\n result = new Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y));\n }\n return result;\n }\n setDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n });\n deepExtend(PieChart.prototype, PieChartMixin);\n PieChart.prototype.isStackRoot = true;\n var PiePlotArea = PlotAreaBase.extend({\n render: function () {\n this.createPieChart(this.series);\n },\n createPieChart: function (series) {\n var firstSeries = series[0];\n var pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(pieChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var DonutSegment = PieSegment.extend({\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n var lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n PieSegment.fn.reflowLabel.call(this);\n }\n }\n },\n createSegment: function (sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n setDefaultOptions(DonutSegment, {\n overlay: { gradient: 'roundedGlass' },\n labels: { position: CENTER },\n animation: { type: PIE }\n });\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n var DONUT_SECTOR_ANIM_DELAY = 50;\n var DonutChart = PieChart.extend({\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (!value || fields.visible === false) {\n return;\n }\n var segment = new DonutSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var series = options.series;\n var seriesCount = series.length;\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\n for (var i = 0; i < seriesCount; i++) {\n var currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n this.seriesConfigs = [];\n for (var i$1 = 0; i$1 < seriesCount; i$1++) {\n var currentSeries$1 = series[i$1];\n size = valueOrDefault(currentSeries$1.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this$1.seriesConfigs.push({\n innerRadius: innerRadius,\n radius: radius\n });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n PieChart.fn.reflow.call(this, targetBox);\n },\n animationDelay: function (categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY + INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1);\n }\n });\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n }\n });\n var DonutPlotArea = PiePlotArea.extend({\n render: function () {\n this.createDonutChart(this.series);\n },\n createDonutChart: function (series) {\n var firstSeries = series[0];\n var donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(donutChart);\n }\n });\n var DEFAULT_PADDING = 0.15;\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function () {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function () {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n },\n alignAxes: function () {\n var axis = this.valueAxis;\n var range = axis.range();\n var crossingValue = axis.options.reverse ? range.max : range.min;\n var slot = axis.getSlot(crossingValue);\n var center = this.polarAxis.getSlot(0).center;\n var axisBox = axis.box.translate(center.x - slot.x1, center.y - slot.y1);\n axis.reflow(axisBox);\n },\n createValueAxis: function () {\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n var axisType, axisDefaultRange;\n if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = {\n min: 0.1,\n max: 1\n };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = {\n min: 0,\n max: 1\n };\n }\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var valueAxis = new axisType(range.min, range.max, axisOptions, this.chartService);\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n },\n reflowAxes: function () {\n var ref = this;\n var options = ref.options.plotArea;\n var valueAxis = ref.valueAxis;\n var polarAxis = ref.polarAxis;\n var box = ref.box;\n var defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n var padding = getSpacing(options.padding || {}, defaultPadding);\n var paddingBox = box.clone().unpad(padding);\n var axisBox = paddingBox.clone();\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n var heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n backgroundBox: function () {\n return this.box;\n },\n detachLabels: function () {\n }\n });\n var PolarScatterChart = ScatterChart.extend({\n pointSlot: function (slotX, slotY) {\n var valueRadius = slotX.center.y - slotY.y1;\n var slot = Point.onCircle(slotX.center, slotX.startAngle, valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n }\n });\n setDefaultOptions(PolarScatterChart, { clip: false });\n var PolarLineChart = ScatterLineChart.extend({});\n PolarLineChart.prototype.pointSlot = PolarScatterChart.prototype.pointSlot;\n setDefaultOptions(PolarLineChart, { clip: false });\n var SplinePolarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function (fillPath) {\n var center = this._polarAxisCenter();\n fillPath.lineTo(center.x, center.y);\n },\n _polarAxisCenter: function () {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n return center;\n },\n strokeSegments: function () {\n var segments = this._strokeSegments;\n if (!segments) {\n var center = this._polarAxisCenter();\n var curveProcessor = new CurveProcessor(false);\n var linePoints = this.points();\n linePoints.push(center);\n segments = this._strokeSegments = curveProcessor.process(linePoints);\n segments.pop();\n }\n return segments;\n }\n });\n var PolarAreaSegment = AreaSegment.extend({\n fillToAxes: function (fillPath) {\n var polarAxis = this.parent.plotArea.polarAxis;\n var center = polarAxis.box.center();\n var centerSegment = new geometry.Segment([\n center.x,\n center.y\n ]);\n fillPath.segments.unshift(centerSegment);\n fillPath.segments.push(centerSegment);\n }\n });\n var PolarAreaChart = PolarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = (currentSeries.line || {}).style;\n var segment;\n if (style === SMOOTH) {\n segment = new SplinePolarAreaSegment(linePoints, currentSeries, seriesIx);\n } else {\n segment = new PolarAreaSegment(linePoints, currentSeries, seriesIx);\n }\n return segment;\n },\n createMissingValue: function (value, missingValues) {\n var missingValue;\n if (hasValue(value.x) && missingValues !== INTERPOLATE) {\n missingValue = {\n x: value.x,\n y: value.y\n };\n if (missingValues === ZERO) {\n missingValue.y = 0;\n }\n }\n return missingValue;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n },\n _hasMissingValuesGap: function () {\n var this$1 = this;\n var series = this.options.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (this$1.seriesMissingValues(series[idx]) === GAP) {\n return true;\n }\n }\n },\n sortPoints: function (points) {\n var this$1 = this;\n points.sort(xComparer);\n if (this._hasMissingValuesGap()) {\n for (var idx = 0; idx < points.length; idx++) {\n var point = points[idx];\n if (point) {\n var value = point.value;\n if (!hasValue(value.y) && this$1.seriesMissingValues(point.series) === GAP) {\n delete points[idx];\n }\n }\n }\n }\n return points;\n }\n });\n function xComparer(a, b) {\n return a.value.x - b.value.x;\n }\n var PolarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var polarAxis = new dataviz.PolarAxis(this.options.xAxis, this.chartService);\n this.polarAxis = polarAxis;\n this.axisX = polarAxis;\n this.appendAxis(polarAxis);\n },\n valueAxisOptions: function (defaults) {\n return deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n }, this.options.yAxis);\n },\n createValueAxis: function () {\n PolarPlotAreaBase.fn.createValueAxis.call(this);\n this.axisY = this.valueAxis;\n },\n appendChart: function (chart, pane) {\n this.valueAxisRangeTracker.update(chart.yAxisRanges);\n PlotAreaBase.prototype.appendChart.call(this, chart, pane);\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createLineChart(filterSeriesByType(series, [POLAR_LINE]), pane);\n this.createScatterChart(filterSeriesByType(series, [POLAR_SCATTER]), pane);\n this.createAreaChart(filterSeriesByType(series, [POLAR_AREA]), pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new PolarLineChart(this, { series: series });\n this.appendChart(lineChart, pane);\n },\n createScatterChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var scatterChart = new PolarScatterChart(this, { series: series });\n this.appendChart(scatterChart, pane);\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new PolarAreaChart(this, { series: series });\n this.appendChart(areaChart, pane);\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var xValue = this.axisX.getValue(point);\n var yValue = this.axisY.getValue(point);\n if (xValue !== null && yValue !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n x: xValue,\n y: yValue\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n setDefaultOptions(PolarPlotArea, {\n xAxis: {},\n yAxis: {}\n });\n deepExtend(PolarPlotArea.prototype, PlotAreaEventsMixin);\n function groupBySeriesIx(segments) {\n var seriesSegments = [];\n for (var idx = 0; idx < segments.length; idx++) {\n var segment = segments[idx];\n seriesSegments[segment.seriesIx] = seriesSegments[segment.seriesIx] || [];\n seriesSegments[segment.seriesIx].push(segment);\n }\n return seriesSegments;\n }\n var RadarLineChart = LineChart.extend({\n pointSlot: function (categorySlot, valueSlot) {\n var valueRadius = categorySlot.center.y - valueSlot.y1;\n var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n renderSegments: function () {\n LineChart.fn.renderSegments.call(this);\n if (this._segments && this._segments.length > 1) {\n var seriesSegments = groupBySeriesIx(this._segments);\n for (var idx = 0; idx < seriesSegments.length; idx++) {\n var segments = seriesSegments[idx];\n if (segments && segments.length > 1) {\n var firstPoint = segments[0].linePoints[0];\n var lastSegment = last(segments);\n var lastPoint = last(lastSegment.linePoints);\n var isFirstDataPoint = firstPoint.categoryIx === 0;\n var isLastDataPoint = lastPoint.categoryIx === lastPoint.categoriesCount - 1;\n if (isFirstDataPoint && isLastDataPoint) {\n last(segments).linePoints.push(firstPoint);\n }\n }\n }\n }\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n var missingValues = this.seriesMissingValues(currentSeries);\n if (linePoints.length === currentSeries.data.length || missingValues === INTERPOLATE) {\n segment.options.closed = true;\n }\n return segment;\n }\n });\n setDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n });\n var SplineRadarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaSegment = AreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaChart = RadarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n var segment;\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n return segment;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var RadarSegment = DonutSegment.extend({\n init: function (value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n }\n });\n setDefaultOptions(RadarSegment, {\n overlay: { gradient: 'none' },\n labels: { distance: 10 }\n });\n var RadarClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n reflow: function (sector) {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var gap = options.gap;\n var spacing = options.spacing;\n var count = children.length;\n var slots = count + gap + spacing * (count - 1);\n var slotAngle = sector.angle / slots;\n var angle = sector.startAngle + slotAngle * (gap / 2);\n this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n child.reflow(slotSector);\n child.sector = slotSector;\n angle += slotAngle + slotAngle * spacing;\n });\n }\n });\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n });\n var RadarStackLayout = ChartElement.extend({\n reflow: function (sector) {\n var ref = this;\n var reverse = ref.options.reverse;\n var children = ref.children;\n var childrenCount = children.length;\n var first = reverse ? childrenCount - 1 : 0;\n var step = reverse ? -1 : 1;\n this.box = new Box();\n for (var i = first; i >= 0 && i < childrenCount; i += step) {\n var childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n });\n var RadarBarChart = BarChart.extend({\n pointType: function () {\n return RadarSegment;\n },\n clusterType: function () {\n return RadarClusterLayout;\n },\n stackType: function () {\n return RadarStackLayout;\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n pointSlot: function (categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n return slot;\n },\n reflowPoint: function (point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n createAnimation: function () {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n setDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: { type: 'pie' }\n });\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n },\n valueAxisOptions: function (defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: 'P0' }\n });\n }\n return deepExtend(defaults, this.options.valueAxis);\n },\n aggregateCategories: function () {\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n createCategoryAxesLabels: function () {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n filterSeries: function (currentSeries) {\n return currentSeries;\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createAreaChart(filterSeriesByType(series, [RADAR_AREA]), pane);\n this.createLineChart(filterSeriesByType(series, [RADAR_LINE]), pane);\n this.createBarChart(filterSeriesByType(series, [RADAR_COLUMN]), pane);\n },\n chartOptions: function (series) {\n var options = { series: series };\n var firstSeries = series[0];\n if (firstSeries) {\n var filteredSeries = this.filterVisibleSeries(series);\n var stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === '100%' && filteredSeries.length > 1;\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n return options;\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n this._hasBarCharts = true;\n },\n seriesCategoryAxis: function () {\n return this.categoryAxis;\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var category = this.categoryAxis.getCategory(point);\n var value = this.valueAxis.getValue(point);\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n deepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n seriesSourcePoints: CategoricalPlotArea.prototype.seriesSourcePoints\n });\n setDefaultOptions(RadarPlotArea, {\n categoryAxis: { categories: [] },\n valueAxis: {}\n });\n var FunnelSegment = ChartElement.extend({\n init: function (value, options, segmentOptions) {\n ChartElement.fn.init.call(this, options);\n this.value = value;\n this.options.index = segmentOptions.index;\n },\n reflow: function (chartBox) {\n var points = this.points;\n var label = this.children[0];\n this.box = new Box(points[0].x, points[0].y, points[1].x, points[2].y);\n if (label) {\n label.reflow(new Box(chartBox.x1, points[0].y, chartBox.x2, points[2].y));\n }\n },\n createVisual: function () {\n var this$1 = this;\n var options = this.options;\n var visual;\n ChartElement.fn.createVisual.call(this);\n if (options.visual) {\n visual = options.visual({\n category: this.category,\n dataItem: this.dataItem,\n value: this.value,\n series: this.series,\n percentage: this.percentage,\n points: this.points,\n options: options,\n sender: this.getSender(),\n createVisual: function () {\n return this$1.createPath();\n }\n });\n } else {\n visual = this.createPath();\n }\n if (visual) {\n this.visual.append(visual);\n }\n },\n createPath: function () {\n var options = this.options;\n var border = options.border;\n var path = Path.fromPoints(this.points, {\n fill: {\n color: options.color,\n opacity: options.opacity\n },\n stroke: {\n color: border.color,\n opacity: border.opacity,\n width: border.width\n }\n }).close();\n return path;\n },\n createHighlight: function (style) {\n return Path.fromPoints(this.points, style);\n },\n highlightVisual: function () {\n return this.visual.children[0];\n },\n highlightVisualArgs: function () {\n var path = Path.fromPoints(this.points).close();\n return {\n options: this.options,\n path: path\n };\n },\n tooltipAnchor: function () {\n var box = this.box;\n return {\n point: new Point(box.center().x, box.y1),\n align: {\n horizontal: 'center',\n vertical: 'top'\n }\n };\n },\n formatValue: function (format) {\n var point = this;\n return point.owner.formatPointValue(point, format);\n }\n });\n setDefaultOptions(FunnelSegment, {\n color: WHITE,\n border: { width: 1 }\n });\n deepExtend(FunnelSegment.prototype, PointEventsMixin);\n var FunnelChart = ChartElement.extend({\n init: function (plotArea, options) {\n ChartElement.fn.init.call(this, options);\n this.plotArea = plotArea;\n this.points = [];\n this.labels = [];\n this.legendItems = [];\n this.render();\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n render: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var seriesColors = ref.plotArea.options.seriesColors;\n if (seriesColors === void 0) {\n seriesColors = [];\n }\n var series = options.series[0];\n var data = series.data;\n if (!data) {\n return;\n }\n var ref$1 = bindSegments(series);\n var total = ref$1.total;\n var points = ref$1.points;\n for (var i = 0; i < points.length; i++) {\n var pointData = points[i];\n if (!pointData) {\n continue;\n }\n var fields = pointData.fields;\n if (!isFunction(series.color)) {\n series.color = fields.color || seriesColors[i % seriesColors.length];\n }\n fields = deepExtend({\n index: i,\n owner: this$1,\n series: series,\n dataItem: data[i],\n percentage: pointData.value / total\n }, fields, { visible: pointData.visible });\n var value = pointData.valueFields.value;\n var segment = this$1.createSegment(value, fields);\n var label = this$1.createLabel(value, fields);\n if (segment && label) {\n segment.append(label);\n }\n }\n },\n evalSegmentOptions: function (options, value, fields) {\n var series = fields.series;\n evalOptions(options, {\n value: value,\n series: series,\n dataItem: fields.dataItem,\n index: fields.index\n }, {\n defaults: series._defaults,\n excluded: [\n 'data',\n 'content',\n 'template',\n 'toggle',\n 'visual'\n ]\n });\n },\n createSegment: function (value, fields) {\n var seriesOptions = deepExtend({}, fields.series);\n this.evalSegmentOptions(seriesOptions, value, fields);\n this.createLegendItem(value, seriesOptions, fields);\n if (fields.visible !== false) {\n var segment = new FunnelSegment(value, seriesOptions, fields);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n return segment;\n }\n },\n createLabel: function (value, fields) {\n var series = fields.series;\n var dataItem = fields.dataItem;\n var labels = deepExtend({}, this.options.labels, series.labels);\n var text = value;\n if (labels.visible) {\n var labelTemplate = getTemplate(labels);\n var data = {\n dataItem: dataItem,\n value: value,\n percentage: fields.percentage,\n category: fields.category,\n series: series\n };\n if (labelTemplate) {\n text = labelTemplate(data);\n } else if (labels.format) {\n text = this.plotArea.chartService.format.auto(labels.format, text);\n }\n if (!labels.color) {\n var brightnessValue = new Color(series.color).percBrightness();\n if (brightnessValue > 180) {\n labels.color = BLACK;\n } else {\n labels.color = WHITE;\n }\n if (!labels.background) {\n labels.background = series.color;\n }\n }\n this.evalSegmentOptions(labels, value, fields);\n var textBox = new TextBox(text, deepExtend({ vAlign: labels.position }, labels), data);\n this.labels.push(textBox);\n return textBox;\n }\n },\n labelPadding: function () {\n var labels = this.labels;\n var padding = {\n left: 0,\n right: 0\n };\n for (var i = 0; i < labels.length; i++) {\n var label = labels[i];\n var align = label.options.align;\n if (align !== CENTER) {\n var width = labels[i].box.width();\n if (align === LEFT) {\n padding.left = Math.max(padding.left, width);\n } else {\n padding.right = Math.max(padding.right, width);\n }\n }\n }\n return padding;\n },\n dynamicSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var firstSegment = segments[0];\n var maxSegment = firstSegment;\n for (var idx = 0; idx < segments.length; idx++) {\n if (segments[idx].percentage > maxSegment.percentage) {\n maxSegment = segments[idx];\n }\n }\n var lastUpperSide = firstSegment.percentage / maxSegment.percentage * width;\n var previousOffset = (width - lastUpperSide) / 2;\n var previousHeight = 0;\n for (var idx$1 = 0; idx$1 < count; idx$1++) {\n var percentage = segments[idx$1].percentage;\n var nextSegment = segments[idx$1 + 1];\n var nextPercentage = nextSegment ? nextSegment.percentage : percentage;\n var points = segments[idx$1].points = [];\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n var offset = void 0;\n if (!percentage) {\n offset = nextPercentage ? 0 : width / 2;\n } else {\n offset = (width - lastUpperSide * (nextPercentage / percentage)) / 2;\n }\n offset = limitValue(offset, 0, width);\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + offset, box.y1 + height + previousHeight));\n previousOffset = offset;\n previousHeight += height + options.segmentSpacing;\n lastUpperSide = limitValue(width - 2 * offset, 0, width);\n }\n },\n constantSlopeReflow: function (box, width, totalHeight) {\n var ref = this;\n var options = ref.options;\n var segments = ref.points;\n var count = segments.length;\n var decreasingWidth = options.neckRatio <= 1;\n var neckRatio = decreasingWidth ? options.neckRatio * width : width;\n var previousOffset = decreasingWidth ? 0 : (width - width / options.neckRatio) / 2;\n var topMostWidth = decreasingWidth ? width : width - previousOffset * 2;\n var finalNarrow = (topMostWidth - neckRatio) / 2;\n var previousHeight = 0;\n for (var idx = 0; idx < count; idx++) {\n var points = segments[idx].points = [];\n var percentage = segments[idx].percentage;\n var offset = options.dynamicHeight ? finalNarrow * percentage : finalNarrow / count;\n var height = options.dynamicHeight ? totalHeight * percentage : totalHeight / count;\n points.push(new GeometryPoint(box.x1 + previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset, box.y1 + previousHeight));\n points.push(new GeometryPoint(box.x1 + width - previousOffset - offset, box.y1 + height + previousHeight));\n points.push(new GeometryPoint(box.x1 + previousOffset + offset, box.y1 + height + previousHeight));\n previousOffset += offset;\n previousHeight += height + options.segmentSpacing;\n }\n },\n reflow: function (chartBox) {\n var points = this.points;\n var count = points.length;\n if (!count) {\n return;\n }\n var options = this.options;\n var box = chartBox.clone().unpad(this.labelPadding());\n var totalHeight = box.height() - options.segmentSpacing * (count - 1);\n var width = box.width();\n if (options.dynamicSlope) {\n this.dynamicSlopeReflow(box, width, totalHeight);\n } else {\n this.constantSlopeReflow(box, width, totalHeight);\n }\n for (var idx = 0; idx < count; idx++) {\n points[idx].reflow(chartBox);\n }\n }\n });\n setDefaultOptions(FunnelChart, {\n neckRatio: 0.3,\n width: 300,\n dynamicSlope: false,\n dynamicHeight: true,\n segmentSpacing: 0,\n labels: {\n visible: false,\n align: CENTER,\n position: CENTER,\n zIndex: 1\n }\n });\n deepExtend(FunnelChart.prototype, PieChartMixin);\n var FunnelPlotArea = PlotAreaBase.extend({\n render: function () {\n this.createFunnelChart(this.series);\n },\n createFunnelChart: function (series) {\n var firstSeries = series[0];\n var funnelChart = new FunnelChart(this, {\n series: series,\n legend: this.options.legend,\n neckRatio: firstSeries.neckRatio,\n dynamicHeight: firstSeries.dynamicHeight,\n dynamicSlope: firstSeries.dynamicSlope,\n segmentSpacing: firstSeries.segmentSpacing,\n highlight: firstSeries.highlight\n });\n this.appendChart(funnelChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var COLOR = 'color';\n var FIRST = 'first';\n var FROM = 'from';\n var MAX = 'max';\n var MIN = 'min';\n var NOTE_TEXT = 'noteText';\n var SUMMARY_FIELD = 'summary';\n var TO = 'to';\n PlotAreaFactory.current.register(CategoricalPlotArea, [\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n CANDLESTICK,\n OHLC,\n BULLET,\n VERTICAL_BULLET,\n BOX_PLOT,\n VERTICAL_BOX_PLOT,\n RANGE_COLUMN,\n RANGE_BAR,\n WATERFALL,\n HORIZONTAL_WATERFALL,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ]);\n PlotAreaFactory.current.register(XYPlotArea, [\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ]);\n PlotAreaFactory.current.register(PiePlotArea, [PIE]);\n PlotAreaFactory.current.register(DonutPlotArea, [DONUT]);\n PlotAreaFactory.current.register(FunnelPlotArea, [FUNNEL]);\n PlotAreaFactory.current.register(PolarPlotArea, [\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ]);\n PlotAreaFactory.current.register(RadarPlotArea, [\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ]);\n SeriesBinder.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n ERROR_LOW_FIELD,\n ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], [\n FROM,\n TO\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], [VALUE], [\n CATEGORY,\n COLOR,\n NOTE_TEXT,\n SUMMARY_FIELD\n ]);\n SeriesBinder.current.register([\n POLAR_AREA,\n POLAR_LINE,\n POLAR_SCATTER\n ], [\n X,\n Y\n ], [COLOR]);\n SeriesBinder.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], [VALUE], [COLOR]);\n SeriesBinder.current.register([FUNNEL], [VALUE], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n 'visible'\n ]);\n DefaultAggregates.current.register([\n BAR,\n COLUMN,\n LINE,\n VERTICAL_LINE,\n AREA,\n VERTICAL_AREA,\n WATERFALL,\n HORIZONTAL_WATERFALL\n ], {\n value: MAX,\n color: FIRST,\n noteText: FIRST,\n errorLow: MIN,\n errorHigh: MAX\n });\n DefaultAggregates.current.register([\n RANGE_COLUMN,\n RANGE_BAR,\n RANGE_AREA,\n VERTICAL_RANGE_AREA\n ], {\n from: MIN,\n to: MAX,\n color: FIRST,\n noteText: FIRST\n });\n DefaultAggregates.current.register([\n RADAR_AREA,\n RADAR_COLUMN,\n RADAR_LINE\n ], {\n value: MAX,\n color: FIRST\n });\n SeriesBinder.current.register([\n SCATTER,\n SCATTER_LINE,\n BUBBLE\n ], [\n X,\n Y\n ], [\n COLOR,\n NOTE_TEXT,\n X_ERROR_LOW_FIELD,\n X_ERROR_HIGH_FIELD,\n Y_ERROR_LOW_FIELD,\n Y_ERROR_HIGH_FIELD\n ]);\n SeriesBinder.current.register([BUBBLE], [\n X,\n Y,\n 'size'\n ], [\n COLOR,\n CATEGORY,\n NOTE_TEXT\n ]);\n SeriesBinder.current.register([\n CANDLESTICK,\n OHLC\n ], [\n 'open',\n 'high',\n 'low',\n 'close'\n ], [\n CATEGORY,\n COLOR,\n 'downColor',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n CANDLESTICK,\n OHLC\n ], {\n open: MAX,\n high: MAX,\n low: MIN,\n close: MAX,\n color: FIRST,\n downColor: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], [\n 'lower',\n 'q1',\n 'median',\n 'q3',\n 'upper',\n 'mean',\n 'outliers'\n ], [\n CATEGORY,\n COLOR,\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BOX_PLOT,\n VERTICAL_BOX_PLOT\n ], {\n lower: MAX,\n q1: MAX,\n median: MAX,\n q3: MAX,\n upper: MAX,\n mean: MAX,\n outliers: FIRST,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n BULLET,\n VERTICAL_BULLET\n ], [\n 'current',\n 'target'\n ], [\n CATEGORY,\n COLOR,\n 'visibleInLegend',\n NOTE_TEXT\n ]);\n DefaultAggregates.current.register([\n BULLET,\n VERTICAL_BULLET\n ], {\n current: MAX,\n target: MAX,\n color: FIRST,\n noteText: FIRST\n });\n SeriesBinder.current.register([\n PIE,\n DONUT\n ], [VALUE], [\n CATEGORY,\n COLOR,\n 'explode',\n 'visibleInLegend',\n 'visible'\n ]);\n var AXIS_NAMES = [\n CATEGORY,\n VALUE,\n X,\n Y\n ];\n var MOUSEMOVE = 'mousemove';\n var CONTEXTMENU = 'contextmenu';\n var MOUSELEAVE = 'mouseleave';\n var MOUSEMOVE_DELAY = 20;\n var Chart = Class.extend({\n init: function (element, userOptions, themeOptions, context) {\n var this$1 = this;\n if (context === void 0) {\n context = {};\n }\n this.observers = [];\n this.addObserver(context.observer);\n this.chartService = new services.ChartService(this, context);\n this.chartService.theme = themeOptions;\n this._initElement(element);\n var options = deepExtend({}, this.options, userOptions);\n this._originalOptions = deepExtend({}, options);\n this._theme = themeOptions;\n this._initTheme(options, themeOptions);\n this._initHandlers();\n this._initSurface();\n this.bindCategories();\n dataviz.FontLoader.preloadFonts(userOptions, function () {\n this$1.fontLoaded = true;\n if (!this$1._destroyed) {\n this$1.trigger('init');\n this$1._redraw();\n this$1._attachEvents();\n }\n });\n },\n _initElement: function (element) {\n this._setElementClass(element);\n element.style.position = 'relative';\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n this.element = element;\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart');\n },\n _initTheme: function (options, themeOptions) {\n var seriesCopies = [];\n var series = options.series || [];\n for (var i = 0; i < series.length; i++) {\n seriesCopies.push($.extend({}, series[i]));\n }\n options.series = seriesCopies;\n resolveAxisAliases(options);\n this.applyDefaults(options, themeOptions);\n if (options.seriesColors === null) {\n delete options.seriesColors;\n }\n this.options = deepExtend({}, themeOptions, options);\n this.applySeriesColors();\n },\n getSize: function () {\n var chartArea = this.options.chartArea || {};\n var width = chartArea.width ? parseInt(chartArea.width, 10) : Math.floor(this.element.offsetWidth);\n var height = chartArea.height ? parseInt(chartArea.height, 10) : Math.floor(this.element.offsetHeight);\n return {\n width: width,\n height: height\n };\n },\n resize: function (force) {\n var size = this.getSize();\n var currentSize = this._size;\n var hasSize = size.width > 0 || size.height > 0;\n if (force || hasSize && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n } else if (hasSize && this._selections && dataviz.find(this._selections, function (s) {\n return !s.visible;\n })) {\n this._destroySelections();\n this._setupSelection();\n }\n },\n _resize: function () {\n this._noTransitionsRedraw();\n },\n redraw: function (paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n if (paneName) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPane(paneName);\n plotArea.redraw(pane);\n } else {\n this._redraw();\n }\n },\n getAxis: function (name) {\n return findAxisByName(name, this._plotArea.axes);\n },\n findAxisByName: function (name) {\n return this.getAxis(name);\n },\n findPaneByName: function (name) {\n var panes = this._plotArea.panes;\n for (var idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(panes[idx]);\n }\n }\n },\n findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(panes[idx]);\n }\n },\n plotArea: function () {\n return new ChartPlotArea(this._plotArea);\n },\n toggleHighlight: function (show, filter) {\n var plotArea = this._plotArea;\n var firstSeries = (plotArea.srcSeries || plotArea.series || [])[0];\n var points;\n if (isFunction(filter)) {\n points = plotArea.filterPoints(filter);\n } else {\n var seriesName, categoryName;\n if (isObject(filter)) {\n seriesName = filter.series;\n categoryName = filter.category;\n } else {\n seriesName = categoryName = filter;\n }\n if (firstSeries.type === DONUT) {\n points = pointByCategoryName(plotArea.pointsBySeriesName(seriesName), categoryName);\n } else if (firstSeries.type === PIE || firstSeries.type === FUNNEL) {\n points = pointByCategoryName((plotArea.charts[0] || {}).points, categoryName);\n } else {\n points = plotArea.pointsBySeriesName(seriesName);\n }\n }\n if (points) {\n this.togglePointsHighlight(show, points);\n }\n },\n togglePointsHighlight: function (show, points) {\n var highlight = this._highlight;\n for (var idx = 0; idx < points.length; idx++) {\n highlight.togglePointHighlight(points[idx], show);\n }\n },\n showTooltip: function (filter) {\n var shared = this._sharedTooltip();\n var ref = this;\n var tooltip = ref._tooltip;\n var plotArea = ref._plotArea;\n var point, categoryIndex;\n if (isFunction(filter)) {\n point = plotArea.findPoint(filter);\n if (point && shared) {\n categoryIndex = point.categoryIx;\n }\n } else if (shared && defined(filter)) {\n categoryIndex = plotArea.categoryAxis.categoryIndex(filter);\n }\n if (shared) {\n if (categoryIndex >= 0) {\n var points = this._plotArea.pointsByCategoryIndex(categoryIndex);\n tooltip.showAt(points);\n }\n } else if (point) {\n tooltip.show(point);\n }\n },\n hideTooltip: function () {\n this._tooltip.hide();\n },\n _initSurface: function () {\n var surface = this.surface;\n var wrap = this._surfaceWrap();\n var chartArea = this.options.chartArea || {};\n if (chartArea.width) {\n dataviz.elementSize(wrap, { width: chartArea.width });\n }\n if (chartArea.height) {\n dataviz.elementSize(wrap, { height: chartArea.height });\n }\n if (!surface || surface.options.type !== this.options.renderAs) {\n this._destroySurface();\n this.surface = drawing.Surface.create(wrap, { type: this.options.renderAs });\n this.surface.bind('mouseenter', this._surfaceMouseenterHandler);\n this.surface.bind('mouseleave', this._surfaceMouseleaveHandler);\n } else {\n this.surface.clear();\n this.surface.resize();\n }\n },\n _surfaceWrap: function () {\n return this.element;\n },\n _redraw: function () {\n var model = this._getModel();\n this._size = {\n width: model.options.width,\n height: model.options.height\n };\n this._destroyView();\n this._model = model;\n this._plotArea = model._plotArea;\n model.renderVisual();\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.setup();\n }\n });\n }\n this._initSurface();\n this.surface.draw(model.visual);\n if (this.options.transitions !== false) {\n model.traverse(function (element) {\n if (element.animation) {\n element.animation.play();\n }\n });\n }\n this._tooltip = this._createTooltip();\n this._highlight = new Highlight();\n this._setupSelection();\n this._createPannable();\n this._createZoomSelection();\n this._createMousewheelZoom();\n this.trigger(RENDER);\n triggerPaneRender(this._plotArea.panes);\n if (!this._navState) {\n this._cancelDomEvents();\n }\n },\n exportVisual: function (exportOptions) {\n var visual;\n if (exportOptions && (exportOptions.width || exportOptions.height || exportOptions.options)) {\n var currentOptions = this.options;\n var options = deepExtend({}, exportOptions.options, {\n chartArea: {\n width: exportOptions.width,\n height: exportOptions.height\n }\n });\n clearMissingValues(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions, options);\n this._initTheme(this.options, this._theme);\n this.bindCategories();\n var model = this._getModel();\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n visual = model.visual;\n this.options = currentOptions;\n } else {\n visual = this.surface.exportVisual();\n }\n return visual;\n },\n _sharedTooltip: function () {\n return this._plotArea instanceof CategoricalPlotArea && this.options.tooltip && this.options.tooltip.shared;\n },\n _createPannable: function () {\n var options = this.options;\n if (options.pannable !== false) {\n this._pannable = new Pannable(this._plotArea, options.pannable);\n }\n },\n _createZoomSelection: function () {\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n if (zoomable !== false && selection !== false) {\n this._zoomSelection = new ZoomSelection(this, selection);\n }\n },\n _createMousewheelZoom: function () {\n var zoomable = this.options.zoomable;\n var mousewheel = (zoomable || {}).mousewheel;\n if (zoomable !== false && mousewheel !== false) {\n this._mousewheelZoom = new MousewheelZoom(this, mousewheel);\n }\n },\n _toggleDragZoomEvents: function () {\n var pannable = this.options.pannable;\n var zoomable = this.options.zoomable;\n var selection = (zoomable || {}).selection;\n var mousewheel = (zoomable || {}).mousewheel;\n var allowDrag = !pannable && (zoomable === false || selection === false) && !this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ]);\n var allowZoom = (zoomable === false || mousewheel === false) && !this.requiresHandlers([\n ZOOM_START,\n ZOOM,\n ZOOM_END\n ]);\n var element = this.element;\n if (this._dragZoomEnabled && allowDrag && allowZoom) {\n element.style.touchAction = this._touchAction || '';\n this._dragZoomEnabled = false;\n } else if (!this._dragZoomEnabled && !(allowDrag && allowZoom)) {\n element.style.touchAction = 'none';\n this._dragZoomEnabled = true;\n }\n this._toggleDomEvents(!allowDrag, !allowZoom);\n },\n _toggleDomEvents: function (drag, zoom) {\n var domEvents = this.domEvents;\n if (!domEvents) {\n return;\n }\n if (domEvents.toggleDrag) {\n domEvents.toggleDrag(drag);\n }\n if (domEvents.toggleZoom) {\n domEvents.toggleZoom(zoom);\n }\n },\n _createTooltip: function () {\n var ref = this;\n var tooltipOptions = ref.options.tooltip;\n var tooltip;\n if (this._sharedTooltip()) {\n tooltip = this._createSharedTooltip(tooltipOptions);\n } else {\n tooltip = new Tooltip(this.chartService, tooltipOptions);\n }\n return tooltip;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip(this._plotArea, options);\n },\n applyDefaults: function (options, themeOptions) {\n applyAxisDefaults(options, themeOptions);\n applySeriesDefaults(options, themeOptions);\n },\n applySeriesColors: function () {\n var options = this.options;\n var series = options.series;\n var colors = options.seriesColors || [];\n for (var i = 0; i < series.length; i++) {\n var currentSeries = series[i];\n var seriesColor = colors[i % colors.length];\n var defaults = currentSeries._defaults;\n currentSeries.color = currentSeries.color || seriesColor;\n if (defaults) {\n defaults.color = defaults.color || seriesColor;\n }\n }\n },\n _getModel: function () {\n var options = this.options;\n var plotArea = this._createPlotArea();\n var model = new dataviz.RootElement(this._modelOptions());\n model.chart = this;\n model._plotArea = plotArea;\n dataviz.Title.buildTitle(options.title, model);\n if (options.legend && options.legend.visible) {\n model.append(new Legend(plotArea.options.legend, this.chartService));\n }\n model.append(plotArea);\n model.reflow();\n return model;\n },\n _modelOptions: function () {\n var options = this.options;\n var size = this.getSize();\n return deepExtend({\n transitions: options.transitions,\n width: size.width || datavizConstants.DEFAULT_WIDTH,\n height: size.height || datavizConstants.DEFAULT_HEIGHT\n }, options.chartArea);\n },\n _createPlotArea: function (skipSeries) {\n var options = this.options;\n var plotArea = PlotAreaFactory.current.create(skipSeries ? [] : options.series, options, this.chartService);\n return plotArea;\n },\n _setupSelection: function () {\n var this$1 = this;\n var ref = this;\n var axes = ref._plotArea.axes;\n var selections = this._selections = [];\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var options = axis.options;\n if (axis instanceof CategoryAxis && options.select && !options.vertical) {\n var range = axis.range();\n var selection = new Selection(this$1, axis, deepExtend({\n min: range.min,\n max: range.max\n }, options.select));\n selections.push(selection);\n }\n }\n },\n _selectStart: function (e) {\n return this.trigger(SELECT_START, e);\n },\n _select: function (e) {\n return this.trigger(SELECT, e);\n },\n _selectEnd: function (e) {\n return this.trigger(SELECT_END, e);\n },\n _initHandlers: function () {\n this._clickHandler = this._click.bind(this);\n this._mousewheelHandler = this._mousewheel.bind(this);\n this._mouseleaveHandler = this._mouseleave.bind(this);\n this._surfaceMouseenterHandler = this._mouseover.bind(this);\n this._surfaceMouseleaveHandler = this._mouseout.bind(this);\n this._mousemove = kendo.throttle(this._mousemove.bind(this), MOUSEMOVE_DELAY);\n },\n addObserver: function (observer) {\n if (observer) {\n this.observers.push(observer);\n }\n },\n removeObserver: function (observer) {\n var index = this.observers.indexOf(observer);\n if (index >= 0) {\n this.observers.splice(index, 1);\n }\n },\n requiresHandlers: function (eventNames) {\n var observers = this.observers;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].requiresHandlers(eventNames)) {\n return true;\n }\n }\n },\n trigger: function (name, args) {\n if (args === void 0) {\n args = {};\n }\n if (name === SHOW_TOOLTIP) {\n args.anchor.point = this._toDocumentCoordinates(args.anchor.point);\n }\n args.sender = this;\n var observers = this.observers;\n var isDefaultPrevented = false;\n for (var idx = 0; idx < observers.length; idx++) {\n if (observers[idx].trigger(name, args)) {\n isDefaultPrevented = true;\n }\n }\n return isDefaultPrevented;\n },\n _attachEvents: function () {\n var element = this.element;\n this._touchAction = element.style.touchAction;\n var obj;\n bindEvents(element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj[MOUSELEAVE] = this._mouseleaveHandler, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\n }\n this.domEvents = services.DomEventsBuilder.create(this.element, {\n start: this._start.bind(this),\n move: this._move.bind(this),\n end: this._end.bind(this),\n tap: this._tap.bind(this),\n gesturestart: this._gesturestart.bind(this),\n gesturechange: this._gesturechange.bind(this),\n gestureend: this._gestureend.bind(this)\n });\n this._toggleDragZoomEvents();\n },\n _mouseleave: function (e) {\n if (this._hoveredPoint) {\n this._hoveredPoint.out(this, e);\n this._hoveredPoint = null;\n }\n if (this._plotArea.hovered) {\n this.trigger(PLOT_AREA_LEAVE);\n this._plotArea.hovered = false;\n }\n },\n _cancelDomEvents: function () {\n if (this.domEvents && this.domEvents.cancel) {\n this.domEvents.cancel();\n }\n },\n _gesturestart: function (e) {\n if (this._mousewheelZoom && !this._stopChartHandlers(e)) {\n this._gestureDistance = e.distance;\n this._unsetActivePoint();\n this.surface.suspendTracking();\n }\n },\n _gestureend: function (e) {\n if (this._zooming && !this._stopChartHandlers(e)) {\n if (this.surface) {\n this.surface.resumeTracking();\n }\n this._zooming = false;\n this.trigger(ZOOM_END, {});\n }\n },\n _gesturechange: function (e) {\n var mousewheelZoom = this._mousewheelZoom;\n if (mousewheelZoom && !this._stopChartHandlers(e)) {\n e.preventDefault();\n var previousGestureDistance = this._gestureDistance;\n var scaleDelta = -e.distance / previousGestureDistance + 1;\n if (Math.abs(scaleDelta) >= 0.1) {\n scaleDelta = Math.round(scaleDelta * 10);\n this._gestureDistance = e.distance;\n var args = {\n delta: scaleDelta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n if (!this._zooming) {\n this._zooming = true;\n }\n var ranges = args.axisRanges = mousewheelZoom.updateRanges(scaleDelta);\n if (ranges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n }\n }\n }\n },\n _mouseout: function (e) {\n if (e.element) {\n var element = this._drawingChartElement(e.element, e);\n if (element && element.leave) {\n element.leave(this, e.originalEvent);\n }\n }\n },\n _start: function (e) {\n var coords = this._eventCoordinates(e);\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (this.requiresHandlers([\n DRAG_START,\n DRAG,\n DRAG_END\n ])) {\n this._startNavigation(e, coords, DRAG_START);\n }\n if (this._pannable && this._pannable.start(e)) {\n this.surface.suspendTracking();\n this._unsetActivePoint();\n this._suppressHover = true;\n this.chartService.panning = true;\n }\n if (this._zoomSelection) {\n if (this._zoomSelection.start(e)) {\n this.trigger(ZOOM_START, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n }\n }\n },\n _move: function (e) {\n var ref = this;\n var state = ref._navState;\n var pannable = ref._pannable;\n if (this._stopChartHandlers(e)) {\n return;\n }\n if (pannable) {\n var ranges = pannable.move(e);\n if (ranges && !this.trigger(DRAG, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n pannable.pan();\n }\n } else if (state) {\n var ranges$1 = {};\n var axes = state.axes;\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n var axis = currentAxis.options.vertical ? e.y : e.x;\n var delta = axis.startLocation - axis.location;\n if (delta !== 0) {\n ranges$1[currentAxis.options.name] = currentAxis.translateRange(delta);\n }\n }\n }\n state.axisRanges = ranges$1;\n this.trigger(DRAG, {\n axisRanges: ranges$1,\n originalEvent: e\n });\n }\n if (this._zoomSelection) {\n this._zoomSelection.move(e);\n }\n },\n _end: function (e) {\n if (this._stopChartHandlers(e)) {\n return;\n }\n var pannable = this._pannable;\n if (pannable && pannable.end(e)) {\n this.surface.resumeTracking();\n this.trigger(DRAG_END, {\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n });\n this._suppressHover = false;\n this.chartService.panning = false;\n } else {\n this._endNavigation(e, DRAG_END);\n }\n if (this._zoomSelection) {\n var ranges = this._zoomSelection.end(e);\n if (ranges && !this.trigger(ZOOM, {\n axisRanges: ranges,\n originalEvent: e\n })) {\n this._zoomSelection.zoom();\n this.trigger(ZOOM_END, {\n axisRanges: ranges,\n originalEvent: e\n });\n }\n }\n },\n _stopChartHandlers: function (e) {\n var selections = this._selections || [];\n if (!selections.length) {\n return false;\n }\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n if (pane) {\n for (var idx = 0; idx < selections.length; idx++) {\n if (selections[idx].onPane(pane)) {\n return true;\n }\n }\n }\n },\n _mousewheel: function (e) {\n var this$1 = this;\n var delta = dataviz.mousewheelDelta(e);\n var mousewheelZoom = this._mousewheelZoom;\n var coords = this._eventCoordinates(e);\n if (this._stopChartHandlers(e) || !this._plotArea.backgroundContainsPoint(coords)) {\n return;\n }\n if (mousewheelZoom) {\n var args = {\n delta: delta,\n axisRanges: axisRanges(this._plotArea.axes),\n originalEvent: e\n };\n if (this._zooming || !this.trigger(ZOOM_START, args)) {\n e.preventDefault();\n if (!this._zooming) {\n this._unsetActivePoint();\n this.surface.suspendTracking();\n this._zooming = true;\n }\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n args.axisRanges = mousewheelZoom.updateRanges(delta);\n if (args.axisRanges && !this.trigger(ZOOM, args)) {\n mousewheelZoom.zoom();\n }\n this._mwTimeout = setTimeout(function () {\n this$1.trigger(ZOOM_END, args);\n this$1._zooming = false;\n if (this$1.surface) {\n this$1.surface.resumeTracking();\n }\n }, MOUSEWHEEL_DELAY);\n }\n } else {\n var state = this._navState;\n if (!state) {\n var prevented = this._startNavigation(e, coords, ZOOM_START);\n if (!prevented) {\n state = this._navState;\n }\n }\n if (state) {\n var totalDelta = state.totalDelta || delta;\n state.totalDelta = totalDelta + delta;\n var axes = this._navState.axes;\n var ranges = {};\n for (var i = 0; i < axes.length; i++) {\n var currentAxis = axes[i];\n var axisName = currentAxis.options.name;\n if (axisName) {\n ranges[axisName] = currentAxis.scaleRange(-totalDelta);\n }\n }\n this.trigger(ZOOM, {\n delta: delta,\n axisRanges: ranges,\n originalEvent: e\n });\n if (this._mwTimeout) {\n clearTimeout(this._mwTimeout);\n }\n this._mwTimeout = setTimeout(function () {\n this$1._endNavigation(e, ZOOM_END);\n }, MOUSEWHEEL_DELAY);\n }\n }\n },\n _startNavigation: function (e, coords, chartEvent) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPointPane(coords);\n var axes = plotArea.axes.slice(0);\n if (!pane) {\n return;\n }\n var ranges = axisRanges(axes);\n var prevented = this.trigger(chartEvent, {\n axisRanges: ranges,\n originalEvent: e\n });\n if (prevented) {\n this._cancelDomEvents();\n } else {\n this._suppressHover = true;\n this._unsetActivePoint();\n this._navState = {\n axisRanges: ranges,\n pane: pane,\n axes: axes\n };\n }\n },\n _endNavigation: function (e, chartEvent) {\n if (this._navState) {\n this.trigger(chartEvent, {\n axisRanges: this._navState.axisRanges,\n originalEvent: e\n });\n this._suppressHover = false;\n this._navState = null;\n }\n },\n _getChartElement: function (e, match) {\n var element = this.surface.eventTarget(e);\n if (element) {\n return this._drawingChartElement(element, e, match);\n }\n },\n _drawingChartElement: function (element, e, match) {\n var current = element;\n var chartElement;\n while (current && !chartElement) {\n chartElement = current.chartElement;\n current = current.parent;\n }\n if (chartElement) {\n if (chartElement.aliasFor) {\n chartElement = chartElement.aliasFor(e, this._eventCoordinates(e));\n }\n if (match) {\n chartElement = chartElement.closest(match);\n if (chartElement && chartElement.aliasFor) {\n chartElement = chartElement.aliasFor();\n }\n }\n return chartElement;\n }\n },\n _eventCoordinates: function (e) {\n var coordinates = dataviz.eventCoordinates(e);\n return this._toModelCoordinates(coordinates.x, coordinates.y);\n },\n _elementPadding: function () {\n if (!this._padding) {\n var ref = elementStyles(this.element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n this._padding = {\n top: paddingTop,\n left: paddingLeft\n };\n }\n return this._padding;\n },\n _toDocumentCoordinates: function (point) {\n var padding = this._elementPadding();\n var offset = dataviz.elementOffset(this.element);\n return {\n left: round(point.x + padding.left + offset.left),\n top: round(point.y + padding.top + offset.top)\n };\n },\n _toModelCoordinates: function (clientX, clientY) {\n var element = this.element;\n var offset = dataviz.elementOffset(element);\n var padding = this._elementPadding();\n var inverseTransform = dataviz.elementScale(element).invert();\n var point = new GeometryPoint(clientX - offset.left - padding.left, clientY - offset.top - padding.top).transform(inverseTransform);\n return new Point(point.x, point.y);\n },\n _tap: function (e) {\n var this$1 = this;\n var drawingElement = this.surface.eventTarget(e);\n var element = this._drawingChartElement(drawingElement, e);\n var sharedTooltip = this._sharedTooltip();\n if (!this._startHover(drawingElement, e) && !sharedTooltip) {\n this._unsetActivePoint();\n }\n if (sharedTooltip) {\n this._trackSharedTooltip(this._eventCoordinates(e), e, true);\n }\n this._propagateClick(element, e);\n this.handlingTap = true;\n setTimeout(function () {\n this$1.handlingTap = false;\n }, 0);\n },\n _click: function (e) {\n var element = this._getChartElement(e);\n this._propagateClick(element, e);\n },\n _propagateClick: function (element, e) {\n var this$1 = this;\n var current = element;\n while (current) {\n if (current.click) {\n current.click(this$1, e);\n }\n current = current.parent;\n }\n },\n _startHover: function (element, e) {\n if (this._suppressHover) {\n return false;\n }\n var point = this._drawingChartElement(element, e, function (element) {\n return (element.hover || element.over) && !(element instanceof PlotAreaBase);\n });\n var activePoint = this._activePoint;\n var 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 if (point && activePoint !== point && point.hover) {\n this._activePoint = point;\n if (!this._sharedTooltip() && !point.hover(this, e)) {\n var tooltipOptions = deepExtend({}, this.options.tooltip, point.options.tooltip);\n if (tooltipOptions.visible) {\n this._tooltip.show(point);\n }\n this._highlight.show(point);\n }\n }\n return point;\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 highlight.show(items);\n },\n _shouldAttachMouseMove: function () {\n return this._plotArea.crosshairs.length || this._tooltip && this._sharedTooltip() || this.requiresHandlers([\n PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE\n ]);\n },\n updateMouseMoveHandler: function () {\n var obj;\n unbindEvents(this.element, (obj = {}, obj[MOUSEMOVE] = this._mousemove, obj));\n if (this._shouldAttachMouseMove()) {\n var obj$1;\n bindEvents(this.element, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mousemove, obj$1));\n }\n },\n applyOptions: function (options, theme) {\n clearMissingValues(this._originalOptions, options);\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n if (theme) {\n this._theme = theme;\n this.chartService.theme = theme;\n }\n this._initTheme(this.options, this._theme);\n this._toggleDragZoomEvents();\n },\n setOptions: function (options, theme) {\n this.applyOptions(options, theme);\n this.bindCategories();\n this.redraw();\n this.updateMouseMoveHandler();\n },\n setDirection: function (rtl) {\n this.chartService.rtl = Boolean(rtl);\n if (this.surface && this.surface.type === 'svg') {\n this._destroySurface();\n }\n },\n setIntlService: function (intl) {\n this.chartService.intl = intl;\n },\n noTransitionsRedraw: function () {\n this._noTransitionsRedraw();\n },\n destroy: function () {\n this._destroyed = true;\n var obj;\n unbindEvents(this.element, (obj = {}, obj[CONTEXTMENU] = this._clickHandler, obj[MOUSEWHEEL] = this._mousewheelHandler, obj[MOUSEMOVE] = this._mousemove, obj[MOUSELEAVE] = this._mouseleaveHandler, obj));\n if (this.domEvents) {\n this.domEvents.destroy();\n delete this.domEvents;\n }\n if (this._mouseMoveTrackHandler) {\n var obj$1;\n unbindEvents(document, (obj$1 = {}, obj$1[MOUSEMOVE] = this._mouseMoveTrackHandler, obj$1));\n }\n this._destroyView();\n this._destroySurface();\n this._clearRedrawTimeout();\n },\n _destroySurface: function () {\n var surface = this.surface;\n if (surface) {\n surface.unbind('mouseenter', this._surfaceMouseenterHandler);\n surface.unbind('mouseleave', this._surfaceMouseleaveHandler);\n surface.destroy();\n this.surface = null;\n }\n },\n _destroySelections: function () {\n var selections = this._selections;\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n },\n _destroyView: function () {\n var model = this._model;\n if (model) {\n model.destroy();\n this._model = null;\n }\n this._unsetActivePoint();\n this._destroySelections();\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n if (this._highlight) {\n this._highlight.destroy();\n }\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n });\n function resolveAxisAliases(options) {\n var aliases = AXIS_NAMES;\n for (var idx = 0; idx < aliases.length; idx++) {\n var alias = aliases[idx] + 'Axes';\n if (options[alias]) {\n options[aliases[idx] + 'Axis'] = options[alias];\n delete options[alias];\n }\n }\n }\n function pointByCategoryName(points, name) {\n if (points) {\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx].category === name) {\n return [points[idx]];\n }\n }\n }\n }\n function applyAxisDefaults(options, themeOptions) {\n var themeAxisDefaults = (themeOptions || {}).axisDefaults || {};\n var axisName, axisDefaults, axes;\n function mapAxisOptions(axisOptions) {\n var axisColor = (axisOptions || {}).color || axisDefaults.color;\n var result = deepExtend({}, themeAxisDefaults, themeAxisDefaults[axisName], axisDefaults, axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n }, axisOptions);\n delete result[axisName];\n return result;\n }\n for (var idx = 0; idx < AXIS_NAMES.length; idx++) {\n axisName = AXIS_NAMES[idx] + 'Axis';\n axisDefaults = options.axisDefaults || {};\n axes = [].concat(options[axisName]);\n axes = axes.map(mapAxisOptions);\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\n }\n function applySeriesDefaults(options, themeOptions) {\n var series = options.series;\n var seriesLength = series.length;\n var seriesDefaults = options.seriesDefaults;\n var commonDefaults = deepExtend({}, options.seriesDefaults);\n var themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n var commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n for (var i = 0; i < seriesLength; i++) {\n var seriesType = series[i].type || options.seriesDefaults.type;\n var baseOptions = deepExtend({ data: [] }, commonThemeDefaults, themeSeriesDefaults[seriesType], { tooltip: options.tooltip }, commonDefaults, seriesDefaults[seriesType]);\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n series[i].data = series[i].data || [];\n }\n }\n function cleanupNestedSeriesDefaults(seriesDefaults) {\n delete seriesDefaults.bar;\n delete seriesDefaults.column;\n delete seriesDefaults.rangeColumn;\n delete seriesDefaults.line;\n delete seriesDefaults.verticalLine;\n delete seriesDefaults.pie;\n delete seriesDefaults.donut;\n delete seriesDefaults.area;\n delete seriesDefaults.verticalArea;\n delete seriesDefaults.scatter;\n delete seriesDefaults.scatterLine;\n delete seriesDefaults.bubble;\n delete seriesDefaults.candlestick;\n delete seriesDefaults.ohlc;\n delete seriesDefaults.boxPlot;\n delete seriesDefaults.bullet;\n delete seriesDefaults.verticalBullet;\n delete seriesDefaults.polarArea;\n delete seriesDefaults.polarLine;\n delete seriesDefaults.radarArea;\n delete seriesDefaults.radarLine;\n delete seriesDefaults.waterfall;\n }\n function axisRanges(axes) {\n var ranges = {};\n for (var i = 0; i < axes.length; i++) {\n var axis = axes[i];\n var axisName = axis.options.name;\n if (axisName) {\n ranges[axisName] = axis.range();\n }\n }\n return ranges;\n }\n function sortDates(dates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n for (var i = 1, length = dates.length; i < length; i++) {\n if (comparer(dates[i], dates[i - 1]) < 0) {\n dates.sort(comparer);\n break;\n }\n }\n return dates;\n }\n function uniqueDates(srcDates, comparer) {\n if (comparer === void 0) {\n comparer = dataviz.dateComparer;\n }\n var dates = sortDates(srcDates, comparer);\n var length = dates.length;\n var result = length > 0 ? [dates[0]] : [];\n for (var i = 1; i < length; i++) {\n if (comparer(dates[i], last(result)) !== 0) {\n result.push(dates[i]);\n }\n }\n return result;\n }\n function transpose(rows) {\n var rowCount = rows.length;\n var result = [];\n for (var rowIx = 0; rowIx < rowCount; rowIx++) {\n var row = rows[rowIx];\n var colCount = row.length;\n for (var colIx = 0; colIx < colCount; colIx++) {\n result[colIx] = result[colIx] || [];\n result[colIx].push(row[colIx]);\n }\n }\n return result;\n }\n var DATA_FIELDS = [\n 'data',\n 'categories'\n ];\n function clearMissingValues(originalOptions, options) {\n for (var field in options) {\n if (!inArray(field, DATA_FIELDS) && options.hasOwnProperty(field)) {\n var fieldValue = options[field];\n var originalValue = originalOptions[field];\n if (defined(originalValue)) {\n var nullValue = fieldValue === null;\n if (nullValue || !defined(fieldValue)) {\n delete originalOptions[field];\n if (nullValue) {\n delete options[field];\n }\n } else if (originalValue && isObject(fieldValue)) {\n if (isObject(originalValue)) {\n clearMissingValues(originalValue, fieldValue);\n }\n }\n }\n }\n }\n }\n function triggerPaneRender(panes) {\n for (var idx = 0; idx < panes.length; idx++) {\n panes[idx].notifyRender();\n }\n }\n setDefaultOptions(Chart, {\n renderAs: '',\n chartArea: {},\n legend: {\n visible: true,\n labels: {}\n },\n categoryAxis: {},\n seriesDefaults: {\n type: COLUMN,\n data: [],\n highlight: { visible: true },\n labels: {},\n negativeValues: { visible: false }\n },\n series: [],\n seriesColors: null,\n tooltip: { visible: false },\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Aggregates: Aggregates,\n AreaChart: AreaChart,\n AreaSegment: AreaSegment,\n AxisGroupRangeTracker: AxisGroupRangeTracker,\n Bar: Bar,\n BarChart: BarChart,\n BarLabel: BarLabel,\n BoxPlotChart: BoxPlotChart,\n BoxPlot: BoxPlot,\n BubbleChart: BubbleChart,\n Bullet: Bullet,\n BulletChart: BulletChart,\n CandlestickChart: CandlestickChart,\n Candlestick: Candlestick,\n CategoricalChart: CategoricalChart,\n CategoricalErrorBar: CategoricalErrorBar,\n CategoricalPlotArea: CategoricalPlotArea,\n Chart: Chart,\n ChartContainer: ChartContainer,\n ClipAnimation: ClipAnimation,\n ClusterLayout: ClusterLayout,\n Crosshair: Crosshair,\n CrosshairTooltip: CrosshairTooltip,\n DefaultAggregates: DefaultAggregates,\n DonutChart: DonutChart,\n DonutPlotArea: DonutPlotArea,\n DonutSegment: DonutSegment,\n ErrorBarBase: ErrorBarBase,\n ErrorRangeCalculator: ErrorRangeCalculator,\n Highlight: Highlight,\n SharedTooltip: SharedTooltip,\n Legend: Legend,\n LegendItem: LegendItem,\n LegendLayout: LegendLayout,\n LineChart: LineChart,\n LinePoint: LinePoint,\n LineSegment: LineSegment,\n Pane: Pane,\n PieAnimation: PieAnimation,\n PieChart: PieChart,\n PieChartMixin: PieChartMixin,\n PiePlotArea: PiePlotArea,\n PieSegment: PieSegment,\n PlotAreaBase: PlotAreaBase,\n PlotAreaEventsMixin: PlotAreaEventsMixin,\n PlotAreaFactory: PlotAreaFactory,\n PointEventsMixin: PointEventsMixin,\n RangeBar: RangeBar,\n RangeBarChart: RangeBarChart,\n RangeAreaPoint: RangeAreaPoint,\n RangeAreaChart: RangeAreaChart,\n ScatterChart: ScatterChart,\n ScatterErrorBar: ScatterErrorBar,\n ScatterLineChart: ScatterLineChart,\n Selection: Selection,\n SeriesAggregator: SeriesAggregator,\n SeriesBinder: SeriesBinder,\n SplineSegment: SplineSegment,\n SplineAreaSegment: SplineAreaSegment,\n StackWrap: StackWrap,\n Tooltip: Tooltip,\n OHLCChart: OHLCChart,\n OHLCPoint: OHLCPoint,\n WaterfallChart: WaterfallChart,\n WaterfallSegment: WaterfallSegment,\n XYPlotArea: XYPlotArea,\n MousewheelZoom: MousewheelZoom,\n ZoomSelection: ZoomSelection,\n Pannable: Pannable,\n ChartAxis: ChartAxis,\n ChartPane: ChartPane,\n ChartPlotArea: ChartPlotArea,\n findAxisByName: findAxisByName,\n anyHasZIndex: anyHasZIndex,\n appendIfNotNull: appendIfNotNull,\n areNumbers: areNumbers,\n bindSegments: bindSegments,\n categoriesCount: categoriesCount,\n countNumbers: countNumbers,\n equalsIgnoreCase: equalsIgnoreCase,\n evalOptions: evalOptions,\n filterSeriesByType: filterSeriesByType,\n getDateField: getDateField,\n getField: getField,\n hasGradientOverlay: hasGradientOverlay,\n hasValue: hasValue,\n isDateAxis: isDateAxis,\n segmentVisible: segmentVisible,\n singleItemOrArray: singleItemOrArray,\n createOutOfRangePoints: createOutOfRangePoints\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/chart/chart', [\n 'dataviz/chart/kendo-chart',\n 'kendo.data',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.drawing',\n 'kendo.userevents'\n ], f);\n}(function () {\n (function ($, undefined) {\n var NS = '.kendoChart';\n var kendo = window.kendo;\n var Class = kendo.Class;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var KendoChart = dataviz.Chart;\n var SeriesBinder = dataviz.SeriesBinder;\n var Widget = kendo.ui.Widget;\n var DataSource = kendo.data.DataSource;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var getField = dataviz.getField;\n var InstanceObserver = dataviz.InstanceObserver;\n var inArray = dataviz.inArray;\n var services = dataviz.services;\n var proxy = $.proxy;\n var isArray = $.isArray;\n var extend = $.extend;\n var template = kendo.template;\n var MOUSELEAVE_NS = 'mouseleave' + NS;\n var AXIS_LABEL_CLICK = constants.AXIS_LABEL_CLICK;\n var LEGEND_ITEM_CLICK = constants.LEGEND_ITEM_CLICK;\n var LEGEND_ITEM_HOVER = constants.LEGEND_ITEM_HOVER;\n var LEGEND_ITEM_LEAVE = constants.LEGEND_ITEM_LEAVE;\n var SERIES_CLICK = constants.SERIES_CLICK;\n var SERIES_HOVER = constants.SERIES_HOVER;\n var SERIES_OVER = constants.SERIES_OVER;\n var SERIES_LEAVE = constants.SERIES_LEAVE;\n var PANE_RENDER = constants.PANE_RENDER;\n var PLOT_AREA_CLICK = constants.PLOT_AREA_CLICK;\n var PLOT_AREA_HOVER = constants.PLOT_AREA_HOVER;\n var PLOT_AREA_LEAVE = constants.PLOT_AREA_LEAVE;\n var DRAG = constants.DRAG;\n var DRAG_END = constants.DRAG_END;\n var DRAG_START = constants.DRAG_START;\n var ZOOM_START = constants.ZOOM_START;\n var ZOOM = constants.ZOOM;\n var ZOOM_END = constants.ZOOM_END;\n var SELECT_START = constants.SELECT_START;\n var SELECT = constants.SELECT;\n var SELECT_END = constants.SELECT_END;\n var RENDER = constants.RENDER;\n var NOTE_CLICK = constants.NOTE_CLICK;\n var NOTE_HOVER = constants.NOTE_HOVER;\n var NOTE_LEAVE = constants.NOTE_LEAVE;\n var DOCUMENT_ELEMENT = $(document.documentElement);\n var CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var LEAVE = 'leave';\n var MOUSEDOWN = 'down';\n var VALUE = constants.VALUE;\n var PIE = constants.PIE;\n var DONUT = constants.DONUT;\n var FUNNEL = constants.FUNNEL;\n var Observable = kendo.Observable;\n var TOOLTIP_ANIMATION_DURATION = 150;\n var TOOLTIP_SHOW_DELAY = 100;\n var TOOLTIP_INVERSE = 'k-chart-tooltip-inverse';\n var SHARED_TOOLTIP_CLASS = 'k-chart-shared-tooltip';\n var RTL = 'rtl';\n services.DomEventsBuilder.register({\n create: function (element, events) {\n return new kendo.UserEvents(element, deepExtend({\n global: true,\n multiTouch: true,\n fastTap: true\n }, events));\n }\n });\n var ChartInstanceObserver = InstanceObserver.extend({\n handlerMap: {\n showTooltip: '_showTooltip',\n hideTooltip: '_hideTooltip',\n legendItemClick: '_onLegendItemClick',\n render: '_onRender',\n init: '_onInit'\n }\n });\n var Chart = Widget.extend({\n init: function (element, userOptions) {\n var dataSource;\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n if (userOptions) {\n dataSource = userOptions.dataSource;\n delete userOptions.dataSource;\n }\n this.options = deepExtend({}, this.options, userOptions);\n this.wrapper = this.element;\n this._attachEvents();\n if (userOptions) {\n userOptions.dataSource = dataSource;\n }\n this._seriesVisibility = new SeriesVisibilityState();\n this.bind(this.events, this.options);\n this._initDataSource(userOptions);\n kendo.notify(this, dataviz.ui);\n },\n events: [\n DATABOUND,\n SERIES_CLICK,\n SERIES_HOVER,\n SERIES_OVER,\n SERIES_LEAVE,\n AXIS_LABEL_CLICK,\n LEGEND_ITEM_CLICK,\n LEGEND_ITEM_HOVER,\n LEGEND_ITEM_LEAVE,\n PANE_RENDER,\n PLOT_AREA_CLICK,\n PLOT_AREA_HOVER,\n PLOT_AREA_LEAVE,\n DRAG_START,\n DRAG,\n DRAG_END,\n ZOOM_START,\n ZOOM,\n ZOOM_END,\n SELECT_START,\n SELECT,\n SELECT_END,\n NOTE_CLICK,\n NOTE_HOVER,\n NOTE_LEAVE,\n RENDER\n ],\n options: {\n name: 'Chart',\n renderAs: '',\n theme: 'default',\n axisDefaults: {},\n chartArea: {},\n legend: {},\n categoryAxis: {},\n autoBind: true,\n seriesDefaults: {},\n series: [],\n seriesColors: null,\n tooltip: {},\n transitions: true,\n valueAxis: {},\n plotArea: {},\n title: {},\n xAxis: {},\n yAxis: {},\n panes: [{}],\n pannable: false,\n zoomable: false\n },\n items: function () {\n return $();\n },\n refresh: function () {\n var chart = this;\n var instance = chart._instance;\n instance.applyDefaults(chart.options);\n instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n chart.trigger(DATABOUND);\n chart._redraw();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n redraw: function (paneName) {\n this._size = null;\n this._instance.redraw(paneName);\n },\n setOptions: function (options) {\n var chart = this, dataSource = options.dataSource;\n delete options.dataSource;\n Widget.fn._setEvents.call(chart, options);\n this._instance.applyOptions(options, this._getThemeOptions(options));\n this.options = this._instance.options;\n this._tooltip.setOptions(this.options.tooltip);\n this._seriesVisibility.setOptions(this.options);\n this._sourceSeries = null;\n if (dataSource) {\n chart.setDataSource(dataSource);\n }\n if (chart._hasDataSource) {\n chart._onDataChanged();\n } else {\n chart._bindCategories();\n chart.redraw();\n }\n chart._instance.updateMouseMoveHandler();\n },\n setDataSource: function (dataSource) {\n var chart = this;\n chart.dataSource.unbind(CHANGE, chart._dataChangeHandler);\n chart.dataSource = dataSource = DataSource.create(dataSource);\n chart._hasDataSource = true;\n chart._hasData = false;\n dataSource.bind(CHANGE, chart._dataChangeHandler);\n if (chart.options.autoBind) {\n dataSource.fetch();\n }\n },\n destroy: function () {\n var chart = this, dataSource = chart.dataSource;\n chart.element.off(NS);\n if (dataSource) {\n dataSource.unbind(CHANGE, chart._dataChangeHandler);\n }\n if (chart._instance) {\n chart._instance.destroy();\n delete this._instance;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n delete this._tooltip;\n }\n this._destroyCrosshairTooltips();\n Widget.fn.destroy.call(chart);\n },\n findPaneByName: function (name) {\n var panes = this._plotArea.panes;\n for (var idx = 0; idx < panes.length; idx++) {\n if (panes[idx].options.name === name) {\n return new ChartPane(this, panes[idx]);\n }\n }\n },\n findPaneByIndex: function (idx) {\n var panes = this._plotArea.panes;\n if (panes[idx]) {\n return new ChartPane(this, panes[idx]);\n }\n },\n findSeries: function (callback) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n for (var idx = 0; idx < series.length; idx++) {\n if (callback(series[idx])) {\n return new ChartSeries(this, series[idx]);\n }\n }\n },\n findSeriesByName: function (name) {\n return this._createSeries({ name: name });\n },\n findSeriesByIndex: function (index) {\n return this._createSeries({ index: index });\n },\n exportVisual: function (options) {\n var instance = this._instance;\n if (!instance) {\n return;\n }\n var visual;\n if (options && (options.width || options.height)) {\n var chartArea = instance.options.chartArea;\n var originalChartArea = instance._originalOptions.chartArea;\n deepExtend(chartArea, options);\n var model = instance._getModel();\n chartArea.width = originalChartArea.width;\n chartArea.height = originalChartArea.height;\n model.renderVisual();\n triggerPaneRender(model._plotArea.panes);\n visual = model.visual;\n } else {\n visual = instance.exportVisual();\n }\n return visual;\n },\n _createSeries: function (options) {\n var seriesOptions = this._seriesOptions(options);\n if (seriesOptions) {\n return new ChartSeries(this, seriesOptions);\n }\n },\n _seriesOptions: function (options) {\n var plotArea = this._plotArea;\n var series = plotArea.srcSeries || plotArea.series;\n var seriesOptions;\n if (defined(options.index)) {\n seriesOptions = series[options.index];\n } else if (defined(options.name)) {\n for (var idx = 0; idx < series.length; idx++) {\n if (series[idx].name === options.name) {\n seriesOptions = series[idx];\n break;\n }\n }\n }\n return seriesOptions;\n },\n _attachEvents: function () {\n this.element.on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n },\n _mouseleave: function (e) {\n var instance = this._instance;\n var tooltip = this._tooltip;\n var target = e.relatedTarget;\n if (!(target && $(target).closest(tooltip.element).length) && instance && !instance.handlingTap) {\n instance.hideElements({ keepTooltipOpen: !tooltip.options.autoHide });\n }\n },\n _getThemeOptions: function (userOptions) {\n var themeName = (userOptions || {}).theme;\n if (themeName && dataviz.SASS_THEMES.indexOf(themeName.toLowerCase()) !== -1) {\n return dataviz.autoTheme().chart;\n }\n if (defined(themeName)) {\n var themes = dataviz.ui.themes || {};\n var theme = themes[themeName] || themes[themeName.toLowerCase()] || {};\n return theme.chart || {};\n }\n },\n _initChart: function () {\n this._createChart(this.options, this._getThemeOptions(this.options));\n this.options = this._instance.options;\n this._seriesVisibility.setOptions(this.options);\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoChart(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _onInit: function (e) {\n this._instance = e.sender;\n },\n _initDataSource: function (userOptions) {\n var chart = this, dataSource = (userOptions || {}).dataSource;\n chart._dataChangeHandler = proxy(chart._onDataChanged, chart);\n chart.dataSource = DataSource.create(dataSource).bind('change', chart._dataChangeHandler);\n chart._bindCategories();\n if (dataSource) {\n chart._hasDataSource = true;\n }\n this._initChart();\n this._initTooltip();\n if (dataSource) {\n if (chart.options.autoBind) {\n chart.dataSource.fetch();\n }\n }\n },\n _destroyCrosshairTooltips: function () {\n var tooltips = this._crosshairTooltips;\n if (tooltips) {\n for (var key in tooltips) {\n tooltips[key].destroy();\n }\n }\n this._crosshairTooltips = {};\n },\n _getCrosshairTooltip: function (name, index) {\n var tooltips = this._crosshairTooltips = this._crosshairTooltips || {};\n var key = name + index;\n var tooltip = tooltips[key];\n if (!tooltip) {\n tooltip = tooltips[key] = new CrosshairTooltip(this.element);\n }\n return tooltip;\n },\n _showTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.show(e);\n } else if (this._tooltip) {\n this._tooltip.show(e);\n }\n },\n _hideTooltip: function (e) {\n if (e.crosshair) {\n var tooltip = this._getCrosshairTooltip(e.axisName, e.axisIndex);\n tooltip.hide();\n } else if (this._tooltip) {\n this._tooltip.hide(e);\n }\n },\n _onRender: function (e) {\n this._destroyCrosshairTooltips();\n this._copyMembers(e.sender);\n if (!this._hasDataSource || this._hasData || !this.options.autoBind) {\n this.trigger(RENDER);\n }\n },\n _copyMembers: function (instance) {\n this.options = instance.options;\n this._originalOptions = instance._originalOptions;\n this.surface = instance.surface;\n this._plotArea = instance._plotArea;\n this._model = instance._model;\n this._highlight = instance._highlight;\n this._selections = instance._selections;\n this._pannable = instance._pannable;\n this._zoomSelection = instance._zoomSelection;\n this._mousewheelZoom = instance._mousewheelZoom;\n },\n requiresHandlers: function (names) {\n var events = this._events;\n for (var idx = 0; idx < names.length; idx++) {\n if (defined(events[names[idx]])) {\n return true;\n }\n }\n },\n _initTooltip: function () {\n this._tooltip = this._createTooltip();\n this._tooltip.bind(LEAVE, proxy(this._tooltipleave, this));\n },\n _onLegendItemClick: function (e) {\n if (!this.trigger(LEGEND_ITEM_CLICK, e)) {\n this._legendItemClick(e.seriesIndex, e.pointIndex);\n }\n },\n _legendItemClick: function (seriesIndex, pointIndex) {\n var chart = this._instance, plotArea = chart._plotArea, currentSeries = (plotArea.srcSeries || plotArea.series)[seriesIndex];\n if ($.inArray(currentSeries.type, [\n PIE,\n DONUT,\n FUNNEL\n ]) >= 0) {\n var point = currentSeries.data[pointIndex];\n if (point && defined(point.visible)) {\n point.visible = !point.visible;\n } else {\n var pointVisibility = currentSeries.pointVisibility = currentSeries.pointVisibility || {};\n var visible = pointVisibility[pointIndex];\n pointVisibility[pointIndex] = defined(visible) ? !visible : false;\n }\n } else {\n currentSeries.visible = !currentSeries.visible;\n this._seriesVisibility.save(currentSeries);\n }\n chart._noTransitionsRedraw();\n },\n _createTooltip: function () {\n return new Tooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n _tooltipleave: function () {\n if (this._instance) {\n this._instance.hideElements();\n }\n },\n _bindData: function (e) {\n var chart = this, options = chart.options, series = chart._sourceSeries || options.series, seriesIx, seriesLength = series.length, data = chart.dataSource.view(), grouped = (chart.dataSource.group() || []).length > 0, processedSeries = [], seriesVisibility = this._seriesVisibility, currentSeries, groupedSeries;\n seriesVisibility.read();\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (chart._isBindable(currentSeries) && grouped) {\n groupedSeries = groupSeries(currentSeries, data);\n processedSeries = processedSeries.concat(groupedSeries);\n seriesVisibility.applyByGroup(groupedSeries, e);\n } else {\n currentSeries = extend({}, currentSeries);\n processedSeries.push(currentSeries);\n seriesVisibility.applyByIndex(currentSeries, e);\n }\n }\n chart._sourceSeries = series;\n options.series = processedSeries;\n this._instance.applySeriesColors();\n chart._bindSeries();\n chart._bindCategories();\n this._hasData = true;\n },\n _onDataChanged: function (e) {\n this._bindData(e);\n this.trigger(DATABOUND);\n 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 () {\n var tooltip = this;\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n 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();\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 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 = labelsOptions.padding;\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 + padding) * (isInside ? 1 : -1);\n var cy = lp.y + Math.sin(labelAngle) * (halfHeight + padding) * (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 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 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 });\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 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 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 kendo.deepExtend(dataviz, {\n Gauge: Gauge,\n LinearGauge: LinearGaugeWidget,\n RadialGauge: RadialGaugeWidget,\n ArcGauge: ArcGaugeWidget\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;\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 }\n return visual;\n },\n _getSize: function () {\n var that = this, size;\n if (that.options.size) {\n size = parseInt(that.options.size, 10);\n } else {\n var element = that.element, min = Math.min(element.width(), element.height());\n if (min > 0) {\n size = min;\n } else {\n size = QRCodeDefaults.DEFAULT_SIZE;\n }\n }\n return size;\n },\n _calculateBaseUnit: function (size, matrixSize) {\n var baseUnit = Math.floor(size / matrixSize);\n if (baseUnit < QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n throw new Error('Insufficient size.');\n }\n if (baseUnit * matrixSize >= size && baseUnit - 1 >= QRCodeDefaults.MIN_BASE_UNIT_SIZE) {\n baseUnit--;\n }\n return baseUnit;\n },\n _renderMatrix: function (matrix, baseUnit, quietZoneSize) {\n var path = new draw.MultiPath({\n fill: { color: this.options.color },\n stroke: null\n });\n for (var row = 0; row < matrix.length; row++) {\n var y = quietZoneSize + row * baseUnit;\n var column = 0;\n while (column < matrix.length) {\n while (matrix[row][column] === 0 && column < matrix.length) {\n column++;\n }\n if (column < matrix.length) {\n var x = column;\n while (matrix[row][column] == 1) {\n column++;\n }\n var x1 = round(quietZoneSize + x * baseUnit);\n var y1 = round(y);\n var x2 = round(quietZoneSize + column * baseUnit);\n var y2 = round(y + baseUnit);\n path.moveTo(x1, y1).lineTo(x1, y2).lineTo(x2, y2).lineTo(x2, y1).close();\n }\n }\n }\n return path;\n },\n _renderBackground: function (size, border) {\n var box = new Box2D(0, 0, size, size).unpad(border.width / 2);\n return draw.Path.fromRect(box.toRect(), {\n fill: { color: this.options.background },\n stroke: {\n color: border.color,\n width: border.width\n }\n });\n },\n setOptions: function (options) {\n var that = this;\n options = options || {};\n that.options = extend(that.options, options);\n if (options.value !== undefined) {\n that._value = that.options.value + '';\n }\n that.redraw();\n },\n value: function (value) {\n var that = this;\n if (value === undefined) {\n return that._value;\n }\n that._value = value + '';\n that.redraw();\n },\n options: {\n name: 'QRCode',\n renderAs: 'svg',\n encoding: 'ISO_8859_1',\n value: '',\n errorCorrection: QRCodeDefaults.DEFAULT_ERROR_CORRECTION_LEVEL,\n background: QRCodeDefaults.DEFAULT_BACKGROUND,\n color: QRCodeDefaults.DEFAULT_DARK_MODULE_COLOR,\n size: '',\n padding: 0,\n border: {\n color: '',\n width: 0\n }\n }\n });\n dataviz.ExportMixin.extend(QRCode.fn);\n dataviz.ui.plugin(QRCode);\n kendo.deepExtend(dataviz, {\n QRCode: QRCode,\n QRCodeDefaults: QRCodeDefaults,\n QRCodeFunctions: {\n FreeCellVisitor: FreeCellVisitor,\n fillData: fillData,\n padDataString: padDataString,\n generateErrorCodewords: generateErrorCodewords,\n xorPolynomials: xorPolynomials,\n getBlocks: getBlocks,\n multiplyPolynomials: multiplyPolynomials,\n chooseMode: chooseMode,\n getModes: getModes,\n getDataCodewordsCount: getDataCodewordsCount,\n getVersion: getVersion,\n getDataString: getDataString,\n encodeFormatInformation: encodeFormatInformation,\n encodeBCH: encodeBCH,\n dividePolynomials: dividePolynomials,\n initMatrices: initMatrices,\n addFormatInformation: addFormatInformation,\n encodeVersionInformation: encodeVersionInformation,\n addVersionInformation: addVersionInformation,\n addCentricPattern: addCentricPattern,\n addFinderSeparator: addFinderSeparator,\n addFinderPatterns: addFinderPatterns,\n addAlignmentPatterns: addAlignmentPatterns,\n addTimingFunctions: addTimingFunctions,\n scoreMaskMatrixes: scoreMaskMatrixes,\n encodeData: encodeData,\n UTF8Encoder: UTF8Encoder\n },\n QRCodeFields: {\n modes: modeInstances,\n powersOfTwo: powersOfTwo,\n powersOfTwoResult: powersOfTwoResult,\n generatorPolynomials: generatorPolynomials\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/kendo-stock-chart', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var elementStyles = dataviz.elementStyles;\n var deepExtend = dataviz.deepExtend;\n var toTime = dataviz.toTime;\n var datavizConstants = dataviz.constants;\n var Chart = dataviz.Chart;\n var drawing = kendo.drawing;\n var FadeOutAnimation = drawing.Animation.extend({\n setup: function () {\n this._initialOpacity = parseFloat(elementStyles(this.element, 'opacity').opacity);\n },\n step: function (pos) {\n elementStyles(this.element, { opacity: String(dataviz.interpolateValue(this._initialOpacity, 0, pos)) });\n },\n abort: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, {\n display: 'none',\n opacity: String(this._initialOpacity)\n });\n },\n cancel: function () {\n drawing.Animation.fn.abort.call(this);\n elementStyles(this.element, { opacity: String(this._initialOpacity) });\n }\n });\n function createDiv(className, style) {\n var div = document.createElement('div');\n div.className = className;\n if (style) {\n div.style.cssText = style;\n }\n return div;\n }\n var NavigatorHint = dataviz.Class.extend({\n init: function (container, chartService, options) {\n this.options = deepExtend({}, this.options, options);\n this.container = container;\n this.chartService = chartService;\n var padding = elementStyles(container, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n this.chartPadding = {\n top: padding.paddingTop,\n left: padding.paddingLeft\n };\n this.createElements();\n container.appendChild(this.element);\n },\n createElements: function () {\n var element = this.element = createDiv('k-navigator-hint', 'display: none; position: absolute; top: 1px; left: 1px;');\n var tooltip = this.tooltip = createDiv('k-tooltip k-chart-tooltip');\n var scroll = this.scroll = createDiv('k-scroll');\n tooltip.innerHTML = ' ';\n element.appendChild(tooltip);\n element.appendChild(scroll);\n },\n show: function (from, to, bbox) {\n var ref = this;\n var element = ref.element;\n var options = ref.options;\n var scroll = ref.scroll;\n var tooltip = ref.tooltip;\n var middle = dataviz.toDate(toTime(from) + toTime(to - from) / 2);\n var scrollWidth = bbox.width() * 0.4;\n var minPos = bbox.center().x - scrollWidth;\n var maxPos = bbox.center().x;\n var posRange = maxPos - minPos;\n var range = options.max - options.min;\n var scale = posRange / range;\n var offset = middle - options.min;\n var text = this.chartService.intl.format(options.format, from, to);\n var template = dataviz.getTemplate(options);\n this.clearHideTimeout();\n if (!this._visible) {\n elementStyles(element, {\n visibility: 'hidden',\n display: 'block'\n });\n this._visible = true;\n }\n if (template) {\n text = template({\n from: from,\n to: to\n });\n }\n tooltip.innerHTML = text;\n elementStyles(tooltip, {\n left: bbox.center().x - tooltip.offsetWidth / 2,\n top: bbox.y1\n });\n var tooltipStyle = elementStyles(tooltip, [\n 'marginTop',\n 'borderTopWidth',\n 'height'\n ]);\n elementStyles(scroll, {\n width: scrollWidth,\n left: minPos + offset * scale,\n top: bbox.y1 + tooltipStyle.marginTop + tooltipStyle.borderTopWidth + tooltipStyle.height / 2\n });\n elementStyles(element, { visibility: 'visible' });\n },\n clearHideTimeout: function () {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n if (this._hideAnimation) {\n this._hideAnimation.cancel();\n }\n },\n hide: function () {\n var this$1 = this;\n this.clearHideTimeout();\n this._hideTimeout = setTimeout(function () {\n this$1._visible = false;\n this$1._hideAnimation = new FadeOutAnimation(this$1.element);\n this$1._hideAnimation.setup();\n this$1._hideAnimation.play();\n }, this.options.hideDelay);\n },\n destroy: function () {\n this.clearHideTimeout();\n if (this.container) {\n this.container.removeChild(this.element);\n }\n delete this.container;\n delete this.chartService;\n delete this.element;\n delete this.tooltip;\n delete this.scroll;\n }\n });\n dataviz.setDefaultOptions(NavigatorHint, {\n format: '{0:d} - {1:d}',\n hideDelay: 500\n });\n var NAVIGATOR_PANE = '_navigator';\n var NAVIGATOR_AXIS = NAVIGATOR_PANE;\n var constants = {\n NAVIGATOR_AXIS: NAVIGATOR_AXIS,\n NAVIGATOR_PANE: NAVIGATOR_PANE\n };\n var ZOOM_ACCELERATION = 3;\n var Navigator = dataviz.Class.extend({\n init: function (chart) {\n this.chart = chart;\n var options = this.options = deepExtend({}, this.options, chart.options.navigator);\n var select = options.select;\n if (select) {\n select.from = this.parseDate(select.from);\n select.to = this.parseDate(select.to);\n }\n if (!dataviz.defined(options.hint.visible)) {\n options.hint.visible = options.visible;\n }\n var obj;\n this.chartObserver = new dataviz.InstanceObserver(this, (obj = {}, obj[datavizConstants.DRAG] = '_drag', obj[datavizConstants.DRAG_END] = '_dragEnd', obj[datavizConstants.ZOOM] = '_zoom', obj[datavizConstants.ZOOM_END] = '_zoomEnd', obj));\n chart.addObserver(this.chartObserver);\n },\n parseDate: function (value) {\n return dataviz.parseDate(this.chart.chartService.intl, value);\n },\n clean: function () {\n if (this.selection) {\n this.selection.destroy();\n this.selection = null;\n }\n if (this.hint) {\n this.hint.destroy();\n this.hint = null;\n }\n },\n destroy: function () {\n if (this.chart) {\n this.chart.removeObserver(this.chartObserver);\n delete this.chart;\n }\n this.clean();\n },\n redraw: function () {\n this._redrawSelf();\n this.initSelection();\n },\n initSelection: function () {\n var ref = this;\n var chart = ref.chart;\n var options = ref.options;\n var axis = this.mainAxis();\n var ref$1 = axis.roundedRange();\n var min = ref$1.min;\n var max = ref$1.max;\n var ref$2 = options.select;\n var from = ref$2.from;\n var to = ref$2.to;\n var mousewheel = ref$2.mousewheel;\n var axisClone = clone(axis);\n if (axis.categoriesCount() === 0) {\n return;\n }\n this.clean();\n axisClone.box = axis.box;\n this.selection = new dataviz.Selection(chart, axisClone, {\n min: min,\n max: max,\n from: from || min,\n to: to || max,\n mousewheel: dataviz.valueOrDefault(mousewheel, { zoom: 'left' }),\n visible: options.visible\n }, new dataviz.InstanceObserver(this, {\n selectStart: '_selectStart',\n select: '_select',\n selectEnd: '_selectEnd'\n }));\n if (options.hint.visible) {\n this.hint = new NavigatorHint(chart.element, chart.chartService, {\n min: min,\n max: max,\n template: dataviz.getTemplate(options.hint),\n format: options.hint.format\n });\n }\n },\n setRange: function () {\n var plotArea = this.chart._createPlotArea(true);\n var axis = plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n var ref = axis.roundedRange();\n var min = ref.min;\n var max = ref.max;\n var select = this.options.select || {};\n var from = select.from || min;\n if (from < min) {\n from = min;\n }\n var to = select.to || max;\n if (to > max) {\n to = max;\n }\n this.options.select = deepExtend({}, select, {\n from: from,\n to: to\n });\n this.filterAxes();\n },\n _redrawSelf: function (silent) {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n plotArea.redraw(dataviz.last(plotArea.panes), silent);\n }\n },\n redrawSlaves: function () {\n var chart = this.chart;\n var plotArea = chart._plotArea;\n var slavePanes = plotArea.panes.slice(0, -1);\n plotArea.srcSeries = chart.options.series;\n plotArea.options.categoryAxis = chart.options.categoryAxis;\n plotArea.clearSeriesPointsCache();\n plotArea.redraw(slavePanes);\n },\n _drag: function (e) {\n var ref = this;\n var chart = ref.chart;\n var selection = ref.selection;\n var coords = chart._eventCoordinates(e.originalEvent);\n var navigatorAxis = this.mainAxis();\n var naviRange = navigatorAxis.roundedRange();\n var inNavigator = navigatorAxis.pane.box.containsPoint(coords);\n var axis = chart._plotArea.categoryAxis;\n var range = e.axisRanges[axis.options.name];\n var select = this.options.select;\n var duration;\n if (!range || inNavigator || !selection) {\n return;\n }\n if (select.from && select.to) {\n duration = toTime(select.to) - toTime(select.from);\n } else {\n duration = toTime(selection.options.to) - toTime(selection.options.from);\n }\n var from = dataviz.toDate(dataviz.limitValue(toTime(range.min), naviRange.min, toTime(naviRange.max) - duration));\n var to = dataviz.toDate(dataviz.limitValue(toTime(from) + duration, toTime(naviRange.min) + duration, naviRange.max));\n this.options.select = {\n from: from,\n to: to\n };\n if (this.options.liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(from, to);\n this.showHint(from, to);\n },\n _dragEnd: function () {\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n if (this.hint) {\n this.hint.hide();\n }\n },\n readSelection: function () {\n var ref = this;\n var ref_selection_options = ref.selection.options;\n var from = ref_selection_options.from;\n var to = ref_selection_options.to;\n var select = ref.options.select;\n select.from = from;\n select.to = to;\n },\n filterAxes: function () {\n var ref = this;\n var select = ref.options.select;\n if (select === void 0) {\n select = {};\n }\n var chart = ref.chart;\n var allAxes = chart.options.categoryAxis;\n var from = select.from;\n var to = select.to;\n for (var idx = 0; idx < allAxes.length; idx++) {\n var axis = allAxes[idx];\n if (axis.pane !== NAVIGATOR_PANE) {\n axis.min = from;\n axis.max = to;\n }\n }\n },\n filter: function () {\n var ref = this;\n var chart = ref.chart;\n var select = ref.options.select;\n if (!chart.requiresHandlers(['navigatorFilter'])) {\n return;\n }\n var mainAxis = this.mainAxis();\n var args = {\n from: select.from,\n to: select.to\n };\n if (mainAxis.options.type !== 'category') {\n var axisOptions = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, chart.options.categoryAxis[0], {\n categories: [\n select.from,\n select.to\n ]\n }), chart.chartService).options;\n args.from = dataviz.addDuration(axisOptions.min, -axisOptions.baseUnitStep, axisOptions.baseUnit);\n args.to = dataviz.addDuration(axisOptions.max, axisOptions.baseUnitStep, axisOptions.baseUnit);\n }\n this.chart.trigger('navigatorFilter', args);\n },\n _zoom: function (e) {\n var ref = this;\n var axis = ref.chart._plotArea.categoryAxis;\n var selection = ref.selection;\n var ref_options = ref.options;\n var select = ref_options.select;\n var liveDrag = ref_options.liveDrag;\n var mainAxis = this.mainAxis();\n var delta = e.delta;\n if (!selection) {\n return;\n }\n var fromIx = mainAxis.categoryIndex(selection.options.from);\n var toIx = mainAxis.categoryIndex(selection.options.to);\n e.originalEvent.preventDefault();\n if (Math.abs(delta) > 1) {\n delta *= ZOOM_ACCELERATION;\n }\n if (toIx - fromIx > 1) {\n selection.expand(delta);\n this.readSelection();\n } else {\n axis.options.min = select.from;\n select.from = axis.scaleRange(-e.delta).min;\n }\n if (liveDrag) {\n this.filterAxes();\n this.redrawSlaves();\n }\n selection.set(select.from, select.to);\n this.showHint(this.options.select.from, this.options.select.to);\n },\n _zoomEnd: function (e) {\n this._dragEnd(e);\n },\n showHint: function (from, to) {\n var plotArea = this.chart._plotArea;\n if (this.hint) {\n this.hint.show(from, to, plotArea.backgroundBox());\n }\n },\n _selectStart: function (e) {\n return this.chart._selectStart(e);\n },\n _select: function (e) {\n this.showHint(e.from, e.to);\n return this.chart._select(e);\n },\n _selectEnd: function (e) {\n if (this.hint) {\n this.hint.hide();\n }\n this.readSelection();\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n return this.chart._selectEnd(e);\n },\n mainAxis: function () {\n var plotArea = this.chart._plotArea;\n if (plotArea) {\n return plotArea.namedCategoryAxes[NAVIGATOR_AXIS];\n }\n },\n select: function (from, to) {\n var select = this.options.select;\n if (from && to) {\n select.from = this.parseDate(from);\n select.to = this.parseDate(to);\n this.filterAxes();\n this.filter();\n this.redrawSlaves();\n this.selection.set(from, to);\n }\n return {\n from: select.from,\n to: select.to\n };\n }\n });\n Navigator.setup = function (options, themeOptions) {\n if (options === void 0) {\n options = {};\n }\n if (themeOptions === void 0) {\n themeOptions = {};\n }\n if (options.__navi) {\n return;\n }\n options.__navi = true;\n var naviOptions = deepExtend({}, themeOptions.navigator, options.navigator);\n var panes = options.panes = [].concat(options.panes);\n var paneOptions = deepExtend({}, naviOptions.pane, { name: NAVIGATOR_PANE });\n if (!naviOptions.visible) {\n paneOptions.visible = false;\n paneOptions.height = 0.1;\n }\n panes.push(paneOptions);\n Navigator.attachAxes(options, naviOptions);\n Navigator.attachSeries(options, naviOptions, themeOptions);\n };\n Navigator.attachAxes = function (options, naviOptions) {\n var series = naviOptions.series || [];\n var categoryAxes = options.categoryAxis = [].concat(options.categoryAxis);\n var valueAxes = options.valueAxis = [].concat(options.valueAxis);\n var equallySpacedSeries = dataviz.filterSeriesByType(series, datavizConstants.EQUALLY_SPACED_SERIES);\n var justifyAxis = equallySpacedSeries.length === 0;\n var base = deepExtend({\n type: 'date',\n pane: NAVIGATOR_PANE,\n roundToBaseUnit: !justifyAxis,\n justified: justifyAxis,\n _collapse: false,\n majorTicks: { visible: true },\n tooltip: { visible: false },\n labels: { step: 1 },\n autoBind: naviOptions.autoBindElements,\n autoBaseUnitSteps: {\n minutes: [1],\n hours: [\n 1,\n 2\n ],\n days: [\n 1,\n 2\n ],\n weeks: [],\n months: [1],\n years: [1]\n }\n });\n var user = naviOptions.categoryAxis;\n categoryAxes.push(deepExtend({}, base, { maxDateGroups: 200 }, user, {\n name: NAVIGATOR_AXIS,\n title: null,\n baseUnit: 'fit',\n baseUnitStep: 'auto',\n labels: { visible: false },\n majorTicks: { visible: false }\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_labels',\n maxDateGroups: 20,\n baseUnitStep: 'auto',\n labels: { position: '' },\n plotBands: [],\n autoBaseUnitSteps: { minutes: [] },\n _overlap: true\n }), deepExtend({}, base, user, {\n name: NAVIGATOR_AXIS + '_ticks',\n maxDateGroups: 200,\n majorTicks: { width: 0.5 },\n plotBands: [],\n title: null,\n labels: {\n visible: false,\n mirror: true\n },\n _overlap: true\n }));\n valueAxes.push(deepExtend({\n name: NAVIGATOR_AXIS,\n pane: NAVIGATOR_PANE,\n majorGridLines: { visible: false },\n visible: false\n }, naviOptions.valueAxis));\n };\n Navigator.attachSeries = function (options, naviOptions, themeOptions) {\n var series = options.series = options.series || [];\n var navigatorSeries = [].concat(naviOptions.series || []);\n var seriesColors = themeOptions.seriesColors;\n var defaults = naviOptions.seriesDefaults;\n for (var idx = 0; idx < navigatorSeries.length; idx++) {\n series.push(deepExtend({\n color: seriesColors[idx % seriesColors.length],\n categoryField: naviOptions.dateField,\n visibleInLegend: false,\n tooltip: { visible: false }\n }, defaults, navigatorSeries[idx], {\n axis: NAVIGATOR_AXIS,\n categoryAxis: NAVIGATOR_AXIS,\n autoBind: naviOptions.autoBindElements\n }));\n }\n };\n function ClonedObject() {\n }\n function clone(obj) {\n ClonedObject.prototype = obj;\n return new ClonedObject();\n }\n var AUTO_CATEGORY_WIDTH = 28;\n var StockChart = Chart.extend({\n applyDefaults: function (options, themeOptions) {\n var width = dataviz.elementSize(this.element).width || datavizConstants.DEFAULT_WIDTH;\n var theme = themeOptions;\n var stockDefaults = {\n seriesDefaults: { categoryField: options.dateField },\n axisDefaults: {\n categoryAxis: {\n name: 'default',\n majorGridLines: { visible: false },\n labels: { step: 2 },\n majorTicks: { visible: false },\n maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)\n }\n }\n };\n if (theme) {\n theme = deepExtend({}, theme, stockDefaults);\n }\n Navigator.setup(options, theme);\n Chart.fn.applyDefaults.call(this, options, theme);\n },\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-chart k-stockchart');\n },\n setOptions: function (options) {\n this.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n noTransitionsRedraw: function () {\n var transitions = this.options.transitions;\n this.options.transitions = false;\n this._fullRedraw();\n this.options.transitions = transitions;\n },\n _resize: function () {\n this.noTransitionsRedraw();\n },\n _redraw: function () {\n var navigator = this.navigator;\n if (!this._dirty() && navigator && navigator.options.partialRedraw) {\n navigator.redrawSlaves();\n } else {\n this._fullRedraw();\n }\n },\n _dirty: function () {\n var options = this.options;\n var series = [].concat(options.series, options.navigator.series);\n var seriesCount = dataviz.grep(series, function (s) {\n return s && s.visible;\n }).length;\n var dirty = this._seriesCount !== seriesCount;\n this._seriesCount = seriesCount;\n return dirty;\n },\n _fullRedraw: function () {\n var navigator = this.navigator;\n if (!navigator) {\n navigator = this.navigator = new Navigator(this);\n this.trigger('navigatorCreated', { navigator: navigator });\n }\n navigator.clean();\n navigator.setRange();\n Chart.fn._redraw.call(this);\n navigator.initSelection();\n },\n _trackSharedTooltip: function (coords) {\n var plotArea = this._plotArea;\n var pane = plotArea.paneByPoint(coords);\n if (pane && pane.options.name === NAVIGATOR_PANE) {\n this._unsetActivePoint();\n } else {\n Chart.fn._trackSharedTooltip.call(this, coords);\n }\n },\n bindCategories: function () {\n Chart.fn.bindCategories.call(this);\n this.copyNavigatorCategories();\n },\n copyNavigatorCategories: function () {\n var definitions = [].concat(this.options.categoryAxis);\n var categories;\n for (var axisIx = 0; axisIx < definitions.length; axisIx++) {\n var axis = definitions[axisIx];\n if (axis.name === NAVIGATOR_AXIS) {\n categories = axis.categories;\n } else if (categories && axis.pane === NAVIGATOR_PANE) {\n axis.categories = categories;\n }\n }\n },\n destroyNavigator: function () {\n if (this.navigator) {\n this.navigator.destroy();\n this.navigator = null;\n }\n },\n destroy: function () {\n this.destroyNavigator();\n Chart.fn.destroy.call(this);\n },\n _stopChartHandlers: function (e) {\n var coords = this._eventCoordinates(e);\n var pane = this._plotArea.paneByPoint(coords);\n return Chart.fn._stopChartHandlers.call(this, e) || pane && pane.options.name === NAVIGATOR_PANE;\n },\n _toggleDragZoomEvents: function () {\n if (!this._dragZoomEnabled) {\n this.element.style.touchAction = 'none';\n this._dragZoomEnabled = true;\n }\n }\n });\n dataviz.setDefaultOptions(StockChart, {\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: { visible: true },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false }\n });\n kendo.deepExtend(kendo.dataviz, {\n constants: constants,\n Navigator: Navigator,\n NavigatorHint: NavigatorHint,\n StockChart: StockChart\n });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/stock/stock-chart', ['dataviz/stock/kendo-stock-chart'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var dataviz = kendo.dataviz;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var Chart = dataviz.ui.Chart;\n var KendoStockChart = dataviz.StockChart;\n var constants = dataviz.constants;\n var NAVIGATOR_AXIS = constants.NAVIGATOR_AXIS;\n var NAVIGATOR_PANE = constants.NAVIGATOR_PANE;\n var deepExtend = kendo.deepExtend;\n var defined = dataviz.defined;\n var proxy = $.proxy;\n var CHANGE = 'change';\n var StockInstanceObserver = ChartInstanceObserver.extend({\n handlerMap: {\n navigatorFilter: '_onNavigatorFilter',\n navigatorCreated: '_onNavigatorCreated'\n }\n });\n var StockChart = Chart.extend({\n options: {\n name: 'StockChart',\n dateField: 'date',\n axisDefaults: {\n categoryAxis: {\n type: 'date',\n baseUnit: 'fit',\n justified: true\n },\n valueAxis: {\n narrowRange: true,\n labels: { format: 'C' }\n }\n },\n navigator: {\n select: {},\n seriesDefaults: {\n markers: { visible: false },\n tooltip: {\n visible: true,\n template: '#= kendo.toString(category, \\'d\\') #'\n },\n line: { width: 2 }\n },\n hint: {},\n visible: true\n },\n tooltip: { visible: true },\n legend: { visible: false },\n persistSeriesVisibility: true\n },\n _createChart: function (options, themeOptions) {\n this._initNavigatorOptions(options);\n this._instance = new KendoStockChart(this.element[0], options, themeOptions, {\n observer: new StockInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _initNavigatorOptions: function (options) {\n var navigatorOptions = options.navigator || {};\n var support = kendo.support;\n var isTouch = support.touch;\n var isFirefox = support.browser.mozilla;\n deepExtend(navigatorOptions, {\n autoBindElements: !navigatorOptions.dataSource,\n partialRedraw: navigatorOptions.dataSource,\n liveDrag: !isTouch && !isFirefox\n });\n },\n _initDataSource: function (userOptions) {\n var options = userOptions || {}, dataSource = options.dataSource, hasServerFiltering = dataSource && dataSource.serverFiltering, mainAxis = [].concat(options.categoryAxis)[0], naviOptions = options.navigator || {}, select = naviOptions.select, hasSelect = select && select.from && select.to;\n if (hasServerFiltering && hasSelect) {\n var filter = [].concat(dataSource.filter || []);\n var from = kendo.parseDate(select.from);\n var to = kendo.parseDate(select.to);\n var dummyAxis = new dataviz.DateCategoryAxis(deepExtend({ baseUnit: 'fit' }, mainAxis, {\n categories: [\n from,\n to\n ]\n }), kendo);\n dataSource.filter = buildFilter(dummyAxis.range().min, to).concat(filter);\n }\n Chart.fn._initDataSource.call(this, userOptions);\n },\n _onNavigatorCreated: function (e) {\n this._instance = e.sender;\n this.options = e.sender.options;\n this._navigator = this.navigator = e.navigator;\n this._initNavigatorDataSource();\n },\n _initNavigatorDataSource: function () {\n var navigatorOptions = this.options.navigator;\n var autoBind = navigatorOptions.autoBind;\n var dsOptions = navigatorOptions.dataSource;\n if (dsOptions) {\n this._navigatorDataChangedHandler = this._navigatorDataChangedHandler || proxy(this._onNavigatorDataChanged, this);\n this._navigatorDataSource = kendo.data.DataSource.create(dsOptions).bind(CHANGE, this._navigatorDataChangedHandler);\n if (!defined(autoBind)) {\n autoBind = this.options.autoBind;\n }\n if (autoBind) {\n this._navigatorDataSource.fetch();\n }\n }\n },\n _bindNavigatorSeries: function (series, data) {\n var seriesIx, currentSeries, seriesLength = series.length;\n for (seriesIx = 0; seriesIx < seriesLength; seriesIx++) {\n currentSeries = series[seriesIx];\n if (currentSeries.axis == NAVIGATOR_AXIS && this._isBindable(currentSeries)) {\n currentSeries.data = data;\n }\n }\n },\n _onNavigatorDataChanged: function () {\n var chart = this, instance = chart._instance, categoryAxes = chart.options.categoryAxis, axisIx, axesLength = categoryAxes.length, data = chart._navigatorDataSource.view(), currentAxis, naviCategories;\n this._bindNavigatorSeries(chart.options.series, data);\n if (chart._sourceSeries) {\n this._bindNavigatorSeries(chart._sourceSeries, data);\n }\n for (axisIx = 0; axisIx < axesLength; axisIx++) {\n currentAxis = categoryAxes[axisIx];\n if (currentAxis.pane == NAVIGATOR_PANE) {\n if (currentAxis.name == NAVIGATOR_AXIS) {\n chart._bindCategoryAxis(currentAxis, data, axisIx);\n naviCategories = currentAxis.categories;\n } else {\n currentAxis.categories = naviCategories;\n }\n }\n }\n if (instance._model) {\n var navigator = this.navigator;\n navigator.redraw();\n navigator.setRange();\n if (!chart.options.dataSource || chart.options.dataSource && chart._dataBound) {\n navigator.redrawSlaves();\n }\n }\n },\n _bindCategories: function () {\n Chart.fn._bindCategories.call(this);\n if (this._instance) {\n this._instance.copyNavigatorCategories();\n }\n },\n _onDataChanged: function () {\n Chart.fn._onDataChanged.call(this);\n this._dataBound = true;\n },\n setOptions: function (options) {\n this._removeNavigatorDataSource();\n this._initNavigatorOptions(options);\n this._instance.destroyNavigator();\n Chart.fn.setOptions.call(this, options);\n },\n _onNavigatorFilter: function (e) {\n this.dataSource.filter(buildFilter(e.from, e.to));\n },\n requiresHandlers: function (names) {\n if (dataviz.inArray('navigatorFilter', names)) {\n var dataSource = this.dataSource;\n var hasServerFiltering = dataSource && dataSource.options.serverFiltering;\n return hasServerFiltering && this.options.navigator.dataSource;\n }\n return Chart.fn.requiresHandlers.call(this, names);\n },\n _removeNavigatorDataSource: function () {\n var navigatorDataSource = this._navigatorDataSource;\n if (navigatorDataSource) {\n navigatorDataSource.unbind(CHANGE, this._navigatorDataChangedHandler);\n delete this._navigatorDataSource;\n }\n },\n destroy: function () {\n Chart.fn.destroy.call(this);\n this._removeNavigatorDataSource();\n }\n });\n dataviz.ui.plugin(StockChart);\n function buildFilter(from, to) {\n return [\n {\n field: 'Date',\n operator: 'gte',\n value: from\n },\n {\n field: 'Date',\n operator: 'lt',\n value: to\n }\n ];\n }\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.stock', [\n 'dataviz/stock/kendo-stock-chart',\n 'dataviz/stock/stock-chart'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.stockchart',\n name: 'StockChart',\n category: 'dataviz',\n description: 'StockChart widget and associated financial series.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/kendo-sparkline', ['kendo.dataviz.chart'], f);\n}(function () {\n (function () {\n window.kendo.dataviz = window.kendo.dataviz || {};\n var dataviz = kendo.dataviz;\n var constants = dataviz.constants;\n var Chart = dataviz.Chart;\n var elementSize = dataviz.elementSize;\n var deepExtend = dataviz.deepExtend;\n var TOP_OFFSET = -2;\n var SharedTooltip$1 = dataviz.SharedTooltip.extend({\n _slotAnchor: function (coords, slot) {\n var axis = this.plotArea.categoryAxis;\n var vertical = axis.options.vertical;\n var align = vertical ? {\n horizontal: 'left',\n vertical: 'center'\n } : {\n horizontal: 'center',\n vertical: 'bottom'\n };\n var point;\n if (vertical) {\n point = new dataviz.Point(this.plotArea.box.x2, slot.center().y);\n } else {\n point = new dataviz.Point(slot.center().x, TOP_OFFSET);\n }\n return {\n point: point,\n align: align\n };\n },\n _defaultAnchor: function (point, slot) {\n return this._slotAnchor({}, slot);\n }\n });\n var DEAULT_BAR_WIDTH = 150;\n var DEAULT_BULLET_WIDTH = 150;\n var NO_CROSSHAIR = [\n constants.BAR,\n constants.BULLET\n ];\n function hide(children) {\n var state = [];\n for (var idx = 0; idx < children.length; idx++) {\n var child = children[idx];\n state[idx] = child.style.display;\n child.style.display = 'none';\n }\n return state;\n }\n function show(children, state) {\n for (var idx = 0; idx < children.length; idx++) {\n children[idx].style.display = state[idx];\n }\n }\n function wrapNumber(value) {\n return dataviz.isNumber(value) ? [value] : value;\n }\n var Sparkline = Chart.extend({\n _setElementClass: function (element) {\n dataviz.addClass(element, 'k-sparkline');\n },\n _initElement: function (element) {\n Chart.fn._initElement.call(this, element);\n this._initialWidth = Math.floor(elementSize(element).width);\n },\n _resize: function () {\n var element = this.element;\n var state = hide(element.childNodes);\n this._initialWidth = Math.floor(elementSize(element).width);\n show(element.childNodes, state);\n Chart.fn._resize.call(this);\n },\n _modelOptions: function () {\n var chartOptions = this.options;\n var stage = this._surfaceWrap();\n var displayState = hide(stage.childNodes);\n var space = document.createElement('span');\n space.innerHTML = ' ';\n stage.appendChild(space);\n var options = deepExtend({\n width: this._autoWidth,\n height: elementSize(stage).height,\n transitions: chartOptions.transitions\n }, chartOptions.chartArea, {\n inline: true,\n align: false\n });\n elementSize(stage, {\n width: options.width,\n height: options.height\n });\n stage.removeChild(space);\n show(stage.childNodes, displayState);\n if (this.surface) {\n this.surface.resize();\n }\n return options;\n },\n _surfaceWrap: function () {\n if (!this.stage) {\n var stage = this.stage = document.createElement('span');\n this.element.appendChild(stage);\n }\n return this.stage;\n },\n _createPlotArea: function (skipSeries) {\n var plotArea = Chart.fn._createPlotArea.call(this, skipSeries);\n this._autoWidth = this._initialWidth || this._calculateWidth(plotArea);\n return plotArea;\n },\n _calculateWidth: function (plotArea) {\n var options = this.options;\n var margin = dataviz.getSpacing(options.chartArea.margin);\n var charts = plotArea.charts;\n var stage = this._surfaceWrap();\n var total = 0;\n for (var i = 0; i < charts.length; i++) {\n var currentChart = charts[i];\n var firstSeries = (currentChart.options.series || [])[0];\n if (!firstSeries) {\n continue;\n }\n if (firstSeries.type === constants.BAR) {\n return DEAULT_BAR_WIDTH;\n }\n if (firstSeries.type === constants.BULLET) {\n return DEAULT_BULLET_WIDTH;\n }\n if (firstSeries.type === constants.PIE) {\n return elementSize(stage).height;\n }\n var categoryAxis = currentChart.categoryAxis;\n if (categoryAxis) {\n var pointsCount = categoryAxis.categoriesCount() * (!currentChart.options.isStacked && dataviz.inArray(firstSeries.type, [\n constants.COLUMN,\n constants.VERTICAL_BULLET\n ]) ? currentChart.seriesOptions.length : 1);\n total = Math.max(total, pointsCount);\n }\n }\n var size = total * options.pointWidth;\n if (size > 0) {\n size += margin.left + margin.right;\n }\n return size;\n },\n _createSharedTooltip: function (options) {\n return new SharedTooltip$1(this._plotArea, options);\n }\n });\n Sparkline.normalizeOptions = function (userOptions) {\n var options = wrapNumber(userOptions);\n if (dataviz.isArray(options)) {\n options = { seriesDefaults: { data: options } };\n } else {\n options = deepExtend({}, options);\n }\n if (!options.series) {\n options.series = [{ data: wrapNumber(options.data) }];\n }\n deepExtend(options, { seriesDefaults: { type: options.type } });\n if (dataviz.inArray(options.series[0].type, NO_CROSSHAIR) || dataviz.inArray(options.seriesDefaults.type, NO_CROSSHAIR)) {\n options = deepExtend({}, { categoryAxis: { crosshair: { visible: false } } }, options);\n }\n return options;\n };\n dataviz.setDefaultOptions(Sparkline, {\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n });\n kendo.deepExtend(kendo.dataviz, { Sparkline: Sparkline });\n }());\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/sparkline/sparkline', ['dataviz/sparkline/kendo-sparkline'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var Chart = dataviz.ui.Chart;\n var KendoSparkline = dataviz.Sparkline;\n var ChartInstanceObserver = dataviz.ChartInstanceObserver;\n var extend = $.extend;\n var Sparkline = Chart.extend({\n init: function (element, userOptions) {\n var options = userOptions;\n if (options instanceof kendo.data.ObservableArray) {\n options = { seriesDefaults: { data: options } };\n }\n Chart.fn.init.call(this, element, KendoSparkline.normalizeOptions(options));\n },\n _createChart: function (options, themeOptions) {\n this._instance = new KendoSparkline(this.element[0], options, themeOptions, {\n observer: new ChartInstanceObserver(this),\n sender: this,\n rtl: this._isRtl()\n });\n },\n _createTooltip: function () {\n return new SparklineTooltip(this.element, extend({}, this.options.tooltip, { rtl: this._isRtl() }));\n },\n options: {\n name: 'Sparkline',\n chartArea: { margin: 2 },\n axisDefaults: {\n visible: false,\n majorGridLines: { visible: false },\n valueAxis: { narrowRange: true }\n },\n seriesDefaults: {\n type: 'line',\n area: { line: { width: 0.5 } },\n bar: { stack: true },\n padding: 2,\n width: 0.5,\n overlay: { gradient: null },\n highlight: { visible: false },\n border: { width: 0 },\n markers: {\n size: 2,\n visible: false\n }\n },\n tooltip: {\n visible: true,\n shared: true\n },\n categoryAxis: {\n crosshair: {\n visible: true,\n tooltip: { visible: false }\n }\n },\n legend: { visible: false },\n transitions: false,\n pointWidth: 5,\n panes: [{ clip: false }]\n }\n });\n dataviz.ui.plugin(Sparkline);\n var SparklineTooltip = dataviz.Tooltip.extend({\n options: { animation: { duration: 0 } },\n _hideElement: function () {\n if (this.element) {\n this.element.hide().remove();\n }\n }\n });\n dataviz.SparklineTooltip = SparklineTooltip;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.sparkline', [\n 'dataviz/sparkline/kendo-sparkline',\n 'dataviz/sparkline/sparkline'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.sparkline',\n name: 'Sparkline',\n category: 'dataviz',\n description: 'Sparkline widgets.',\n depends: ['dataviz.chart']\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/main', ['kendo.core'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, deepExtend = kendo.deepExtend;\n function sqr(value) {\n return value * value;\n }\n var now = Date.now;\n if (!now) {\n now = function () {\n return new Date().getTime();\n };\n }\n function renderSize(size) {\n if (typeof size !== 'string') {\n size += 'px';\n }\n return size;\n }\n function renderPos(pos) {\n var result = [];\n if (pos) {\n var parts = kendo.toHyphens(pos).split('-');\n for (var i = 0; i < parts.length; i++) {\n result.push('k-pos-' + parts[i]);\n }\n }\n return result.join(' ');\n }\n function arabicToRoman(n) {\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n function romanToArabic(r) {\n r = r.toLowerCase();\n var digits = {\n i: 1,\n v: 5,\n x: 10,\n l: 50,\n c: 100,\n d: 500,\n m: 1000\n };\n var value = 0, prev = 0;\n for (var i = 0; i < r.length; ++i) {\n var v = digits[r.charAt(i)];\n if (!v) {\n return null;\n }\n value += v;\n if (v > prev) {\n value -= 2 * prev;\n }\n prev = v;\n }\n return value;\n }\n function memoize(f) {\n var cache = Object.create(null);\n return function () {\n var id = '';\n for (var i = arguments.length; --i >= 0;) {\n id += ':' + arguments[i];\n }\n return id in cache ? cache[id] : cache[id] = f.apply(this, arguments);\n };\n }\n function isUnicodeLetter(ch) {\n return RX_UNICODE_LETTER.test(ch);\n }\n function withExit(f, obj) {\n try {\n return f.call(obj, function (value) {\n throw new Return(value);\n });\n } catch (ex) {\n if (ex instanceof Return) {\n return ex.value;\n }\n throw ex;\n }\n function Return(value) {\n this.value = value;\n }\n }\n deepExtend(kendo, {\n util: {\n now: now,\n renderPos: renderPos,\n renderSize: renderSize,\n sqr: sqr,\n romanToArabic: romanToArabic,\n arabicToRoman: arabicToRoman,\n memoize: memoize,\n isUnicodeLetter: isUnicodeLetter,\n withExit: withExit\n }\n });\n var RX_UNICODE_LETTER = new RegExp('[\\\\u0041-\\\\u005A\\\\u0061-\\\\u007A\\\\u00AA\\\\u00B5\\\\u00BA\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]');\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/location', [\n 'kendo.drawing',\n 'util/main'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, abs = math.abs, atan = math.atan, atan2 = math.atan2, cos = math.cos, max = math.max, min = math.min, sin = math.sin, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, util = kendo.drawing.util, defined = util.defined, deg = util.deg, rad = util.rad, round = util.round, valueOrDefault = util.valueOrDefault, sqr = kendo.util.sqr;\n var Location = Class.extend({\n init: function (lat, lng) {\n if (arguments.length === 1) {\n this.lat = lat[0];\n this.lng = lat[1];\n } else {\n this.lat = lat;\n this.lng = lng;\n }\n },\n DISTANCE_ITERATIONS: 100,\n DISTANCE_CONVERGENCE: 1e-12,\n DISTANCE_PRECISION: 2,\n FORMAT: '{0:N6},{1:N6}',\n toArray: function () {\n return [\n this.lat,\n this.lng\n ];\n },\n equals: function (loc) {\n return loc && loc.lat === this.lat && loc.lng === this.lng;\n },\n clone: function () {\n return new Location(this.lat, this.lng);\n },\n round: function (precision) {\n this.lng = round(this.lng, precision);\n this.lat = round(this.lat, precision);\n return this;\n },\n wrap: function () {\n this.lng = this.lng % 180;\n this.lat = this.lat % 90;\n return this;\n },\n distanceTo: function (dest, datum) {\n return this.greatCircleTo(dest, datum).distance;\n },\n destination: function (distance, bearing, datum) {\n bearing = rad(bearing);\n datum = datum || dataviz.map.datums.WGS84;\n var fromLat = rad(this.lat);\n var fromLng = rad(this.lng);\n var dToR = distance / kendo.dataviz.map.datums.WGS84.a;\n var lat = math.asin(sin(fromLat) * cos(dToR) + cos(fromLat) * sin(dToR) * cos(bearing));\n var lng = fromLng + atan2(sin(bearing) * sin(dToR) * cos(fromLat), cos(dToR) - sin(fromLat) * sin(lat));\n return new Location(deg(lat), deg(lng));\n },\n greatCircleTo: function (dest, datum) {\n dest = Location.create(dest);\n datum = datum || dataviz.map.datums.WGS84;\n if (!dest || this.clone().round(8).equals(dest.clone().round(8))) {\n return {\n distance: 0,\n azimuthFrom: 0,\n azimuthTo: 0\n };\n }\n var a = datum.a;\n var b = datum.b;\n var f = datum.f;\n var L = rad(dest.lng - this.lng);\n var U1 = atan((1 - f) * tan(rad(this.lat)));\n var sinU1 = sin(U1);\n var cosU1 = cos(U1);\n var U2 = atan((1 - f) * tan(rad(dest.lat)));\n var sinU2 = sin(U2);\n var cosU2 = cos(U2);\n var lambda = L;\n var prevLambda;\n var i = this.DISTANCE_ITERATIONS;\n var converged = false;\n var sinLambda;\n var cosLambda;\n var sino;\n var cosA2;\n var coso;\n var cos2om;\n var sigma;\n while (!converged && i-- > 0) {\n sinLambda = sin(lambda);\n cosLambda = cos(lambda);\n sino = math.sqrt(sqr(cosU2 * sinLambda) + sqr(cosU1 * sinU2 - sinU1 * cosU2 * cosLambda));\n coso = sinU1 * sinU2 + cosU1 * cosU2 * cosLambda;\n sigma = atan2(sino, coso);\n var sinA = cosU1 * cosU2 * sinLambda / sino;\n cosA2 = 1 - sqr(sinA);\n cos2om = 0;\n if (cosA2 !== 0) {\n cos2om = coso - 2 * sinU1 * sinU2 / cosA2;\n }\n prevLambda = lambda;\n var C = f / 16 * cosA2 * (4 + f * (4 - 3 * cosA2));\n lambda = L + (1 - C) * f * sinA * (sigma + C * sino * (cos2om + C * coso * (-1 + 2 * sqr(cos2om))));\n converged = abs(lambda - prevLambda) <= this.DISTANCE_CONVERGENCE;\n }\n var u2 = cosA2 * (sqr(a) - sqr(b)) / sqr(b);\n var A = 1 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));\n var B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));\n var deltao = B * sino * (cos2om + B / 4 * (coso * (-1 + 2 * sqr(cos2om)) - B / 6 * cos2om * (-3 + 4 * sqr(sino)) * (-3 + 4 * sqr(cos2om))));\n var azimuthFrom = atan2(cosU2 * sinLambda, cosU1 * sinU2 - sinU1 * cosU2 * cosLambda);\n var azimuthTo = atan2(cosU1 * sinLambda, -sinU1 * cosU2 + cosU1 * sinU2 * cosLambda);\n return {\n distance: round(b * A * (sigma - deltao), this.DISTANCE_PRECISION),\n azimuthFrom: deg(azimuthFrom),\n azimuthTo: deg(azimuthTo)\n };\n }\n });\n Location.fn.toString = function () {\n return kendo.format(this.FORMAT, this.lat, this.lng);\n };\n Location.fromLngLat = function (ll) {\n return new Location(ll[1], ll[0]);\n };\n Location.fromLatLng = function (ll) {\n return new Location(ll[0], ll[1]);\n };\n Location.create = function (a, b) {\n if (defined(a)) {\n if (a instanceof Location) {\n return a.clone();\n } else if (arguments.length === 1 && a.length === 2) {\n return Location.fromLatLng(a);\n } else {\n return new Location(a, b);\n }\n }\n };\n var Extent = Class.extend({\n init: function (nw, se) {\n nw = Location.create(nw);\n se = Location.create(se);\n if (nw.lng + 180 > se.lng + 180 && nw.lat + 90 < se.lat + 90) {\n this.se = nw;\n this.nw = se;\n } else {\n this.se = se;\n this.nw = nw;\n }\n },\n contains: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n return loc && lng + 180 >= nw.lng + 180 && lng + 180 <= se.lng + 180 && lat + 90 >= se.lat + 90 && lat + 90 <= nw.lat + 90;\n },\n center: function () {\n var nw = this.nw;\n var se = this.se;\n var lng = nw.lng + (se.lng - nw.lng) / 2;\n var lat = nw.lat + (se.lat - nw.lat) / 2;\n return new Location(lat, lng);\n },\n containsAny: function (locs) {\n var result = false;\n for (var i = 0; i < locs.length; i++) {\n result = result || this.contains(locs[i]);\n }\n return result;\n },\n include: function (loc) {\n var nw = this.nw, se = this.se, lng = valueOrDefault(loc.lng, loc[1]), lat = valueOrDefault(loc.lat, loc[0]);\n nw.lng = min(nw.lng, lng);\n nw.lat = max(nw.lat, lat);\n se.lng = max(se.lng, lng);\n se.lat = min(se.lat, lat);\n },\n includeAll: function (locs) {\n for (var i = 0; i < locs.length; i++) {\n this.include(locs[i]);\n }\n },\n edges: function () {\n var nw = this.nw, se = this.se;\n return {\n nw: this.nw,\n ne: new Location(nw.lat, se.lng),\n se: this.se,\n sw: new Location(se.lat, nw.lng)\n };\n },\n toArray: function () {\n var nw = this.nw, se = this.se;\n return [\n nw,\n new Location(nw.lat, se.lng),\n se,\n new Location(se.lat, nw.lng)\n ];\n },\n overlaps: function (extent) {\n return this.containsAny(extent.toArray()) || extent.containsAny(this.toArray());\n }\n });\n Extent.World = new Extent([\n 90,\n -180\n ], [\n -90,\n 180\n ]);\n Extent.create = function (a, b) {\n if (a instanceof Extent) {\n return a;\n } else if (a && b) {\n return new Extent(a, b);\n } else if (a && a.length === 4 && !b) {\n return new Extent([\n a[0],\n a[1]\n ], [\n a[2],\n a[3]\n ]);\n }\n };\n deepExtend(dataviz, {\n map: {\n Extent: Extent,\n Location: Location\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/attribution', ['kendo.drawing'], f);\n}(function () {\n (function () {\n var kendo = window.kendo, Widget = kendo.ui.Widget, template = kendo.template, util = kendo.drawing.util, valueOrDefault = util.valueOrDefault, defined = util.defined;\n var Attribution = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.items = [];\n this.element.addClass('k-widget k-attribution');\n },\n options: {\n name: 'Attribution',\n separator: ' | ',\n itemTemplate: '#= text #'\n },\n filter: function (extent, zoom) {\n this._extent = extent;\n this._zoom = zoom;\n this._render();\n },\n add: function (item) {\n if (defined(item)) {\n if (typeof item === 'string') {\n item = { text: item };\n }\n this.items.push(item);\n this._render();\n }\n },\n remove: function (text) {\n var result = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n if (item.text !== text) {\n result.push(item);\n }\n }\n this.items = result;\n this._render();\n },\n clear: function () {\n this.items = [];\n this.element.empty();\n },\n _render: function () {\n var result = [];\n var itemTemplate = template(this.options.itemTemplate);\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var text = this._itemText(item);\n if (text !== '') {\n result.push(itemTemplate({ text: text }));\n }\n }\n if (result.length > 0) {\n this.element.empty().append(result.join(this.options.separator)).show();\n } else {\n this.element.hide();\n }\n },\n _itemText: function (item) {\n var text = '';\n var inZoomLevel = this._inZoomLevel(item.minZoom, item.maxZoom);\n var inArea = this._inArea(item.extent);\n if (inZoomLevel && inArea) {\n text += item.text;\n }\n return text;\n },\n _inZoomLevel: function (min, max) {\n var result = true;\n min = valueOrDefault(min, -Number.MAX_VALUE);\n max = valueOrDefault(max, Number.MAX_VALUE);\n result = this._zoom > min && this._zoom < max;\n return result;\n },\n _inArea: function (area) {\n var result = true;\n if (area) {\n result = area.contains(this._extent);\n }\n return result;\n }\n });\n kendo.dataviz.ui.plugin(Attribution);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/navigator', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n var NS = '.kendoNavigator';\n function button(dir) {\n return kendo.format('', dir);\n }\n var BUTTONS = button('up') + button('right') + button('down') + button('left');\n var Navigator = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-navigator').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'Navigator',\n panStep: 1\n },\n events: ['pan'],\n dispose: function () {\n this._keyroot.off('keydown', this._keydown);\n },\n _pan: function (x, y) {\n var panStep = this.options.panStep;\n this.trigger('pan', {\n x: x * panStep,\n y: y * panStep\n });\n },\n _click: function (e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n if (button.is('.k-navigator-up')) {\n y = 1;\n } else if (button.is('.k-navigator-down')) {\n y = -1;\n } else if (button.is('.k-navigator-right')) {\n x = 1;\n } else if (button.is('.k-navigator-left')) {\n x = -1;\n }\n this._pan(x, y);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(Navigator);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/zoom', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n function button(dir, iconClass) {\n return kendo.format('', dir, iconClass);\n }\n var NS = '.kendoZoomControl';\n var BUTTONS = button('in', 'k-i-plus') + button('out', 'k-i-minus');\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n var ZoomControl = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-zoom-control k-button-group k-group-horizontal').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'ZoomControl',\n zoomStep: 1\n },\n events: ['change'],\n _change: function (dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger('change', { delta: dir * zoomStep });\n },\n _click: function (e) {\n var button = $(e.currentTarget);\n var dir = 1;\n if (button.is('.k-zoom-out')) {\n dir = -1;\n }\n this._change(dir);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(ZoomControl);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/crs', [\n 'dataviz/map/location',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, atan = math.atan, exp = math.exp, pow = math.pow, sin = math.sin, log = math.log, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, map = dataviz.map, Location = map.Location, util = kendo.drawing.util, rad = util.rad, deg = util.deg, limit = util.limitValue;\n var PI = math.PI, PI_DIV_2 = PI / 2, PI_DIV_4 = PI / 4, DEG_TO_RAD = PI / 180;\n var WGS84 = {\n a: 6378137,\n b: 6356752.314245179,\n f: 0.0033528106647474805,\n e: 0.08181919084262149\n };\n var Mercator = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n forward: function (loc, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT), lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng, x = rad(lng - lng0) * r, y = proj._projectLat(lat);\n return new Point(x, y);\n },\n _projectLat: function (lat) {\n var datum = this.options.datum, ecc = datum.e, r = datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2), con = ecc * sin(y), p = pow((1 - con) / (1 + con), ecc / 2);\n return r * log(ts * p);\n },\n inverse: function (point, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lng = point.x / (DEG_TO_RAD * r) + lng0, lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n },\n _inverseY: function (y) {\n var proj = this, datum = proj.options.datum, r = datum.a, ecc = datum.e, ecch = ecc / 2, ts = exp(-y / r), phi = PI_DIV_2 - 2 * atan(ts), i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi), p = pow((1 - con) / (1 + con), ecch), dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n });\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n _projectLat: function (lat) {\n var r = this.options.datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n },\n _inverseY: function (y) {\n var r = this.options.datum.a, ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n });\n var Equirectangular = Class.extend({\n forward: function (loc) {\n return new Point(loc.lng, loc.lat);\n },\n inverse: function (point) {\n return new Location(point.y, point.x);\n }\n });\n var EPSG3857 = Class.extend({\n init: function () {\n var crs = this, proj = crs._proj = new SphericalMercator();\n var c = this.c = 2 * PI * proj.options.datum.a;\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n toPoint: function (loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n },\n toLocation: function (point, scale, clamp) {\n point = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(point, clamp);\n }\n });\n var EPSG3395 = Class.extend({\n init: function () {\n this._proj = new Mercator();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n var EPSG4326 = Class.extend({\n init: function () {\n this._proj = new Equirectangular();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: { WGS84: WGS84 },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/base', [\n 'kendo.core',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, Extent = dataviz.map.Extent, util = kendo.drawing.util, defined = util.defined;\n var Layer = Class.extend({\n init: function (map, options) {\n this._initOptions(options);\n this.map = map;\n this.element = $('
    ').css({\n 'zIndex': this.options.zIndex,\n 'opacity': this.options.opacity\n }).appendTo(map.scrollElement);\n this._beforeReset = proxy(this._beforeReset, this);\n this._reset = proxy(this._reset, this);\n this._resize = proxy(this._resize, this);\n this._panEnd = proxy(this._panEnd, this);\n this._activate();\n this._updateAttribution();\n },\n destroy: function () {\n this._deactivate();\n },\n show: function () {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n hide: function () {\n this._deactivate();\n this._setVisibility(false);\n },\n reset: function () {\n this._beforeReset();\n this._reset();\n },\n _reset: function () {\n this._applyExtent();\n },\n _beforeReset: $.noop,\n _resize: $.noop,\n _panEnd: function () {\n this._applyExtent();\n },\n _applyExtent: function () {\n var options = this.options;\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n _setVisibility: function (visible) {\n this.element.css('display', visible ? '' : 'none');\n },\n _activate: function () {\n var map = this.map;\n this._deactivate();\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _deactivate: function () {\n var map = this.map;\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n },\n _updateAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n deepExtend(dataviz, { map: { layers: { Layer: Layer } } });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/shape', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, Group = d.Group, last = d.util.last, defined = d.util.defined, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var ShapeLayer = Layer.extend({\n init: function (map, options) {\n this._pan = proxy(this._pan, this);\n Layer.fn.init.call(this, map, options);\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n this._initRoot();\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this._initDataSource();\n },\n options: { autoBind: true },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.surface.destroy();\n this.dataSource.unbind('change', this._dataChange);\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._translateSurface();\n if (this._data) {\n this._load(this._data);\n }\n },\n _initRoot: function () {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n _beforeReset: function () {\n this.surface.clear();\n this._initRoot();\n },\n _resize: function () {\n this.surface.size(this.map.size());\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n _load: function (data) {\n this._clearMarkers();\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n this._root.clear();\n this._root.append(container);\n },\n shapeCreated: function (shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n if (!cancelled) {\n var args = {\n layer: this,\n shape: shape\n };\n cancelled = this.map.trigger('shapeCreated', args);\n }\n return cancelled;\n },\n featureCreated: function (e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n },\n _createMarker: function (shape) {\n var marker = this.map.markers.bind({ location: shape.location }, shape.dataItem);\n if (marker) {\n this._markers.push(marker);\n }\n return marker;\n },\n _clearMarkers: function () {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n _pan: function () {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n _translateSurface: function () {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n },\n _handler: function (event) {\n var layer = this;\n return function (e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n layer.map.trigger(event, args);\n }\n };\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n this.map.bind('pan', this._pan);\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n this.map.unbind('pan', this._pan);\n }\n });\n var GeoJSONLoader = Class.extend({\n init: function (locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n parse: function (item) {\n var root = new Group();\n var unwrap = true;\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n return root;\n },\n _shapeCreated: function (shape) {\n var cancelled = false;\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n return cancelled;\n },\n _featureCreated: function (group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n _loadGeometryTo: function (container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n _setLineFill: function (path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n _loadShape: function (container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n return shape;\n },\n _loadPolygon: function (container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n },\n _buildPolygon: function (rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n return path;\n },\n _loadPoint: function (container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n return this._loadShape(container, shape);\n }\n });\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: 'json',\n data: function (data) {\n if (data.type === 'FeatureCollection') {\n return data.features;\n }\n if (data.type === 'GeometryCollection') {\n return data.geometries;\n }\n return data;\n }\n }\n },\n transports: { geojson: { read: { dataType: 'json' } } }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bubble', ['dataviz/map/layers/shape'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, getter = kendo.getter, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, util = d.util, defined = util.defined, map = dataviz.map, Location = map.Location, ShapeLayer = map.layers.ShapeLayer;\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle'\n },\n _load: function (data) {\n this.surface.clear();\n if (data.length === 0) {\n return;\n }\n var opt = this.options;\n var getValue = getter(opt.valueField);\n data = data.slice(0);\n data.sort(function (a, b) {\n return getValue(b) - getValue(a);\n });\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n opt.minSize,\n opt.maxSize\n ]);\n }\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n this._drawSymbol(symbol);\n }\n }\n },\n _scaleType: function () {\n var scale = this.options.scale;\n if (kendo.isFunction(scale)) {\n return scale;\n }\n return dataviz.map.scales[scale];\n },\n _createSymbol: function (args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n return symbol(args);\n },\n _drawSymbol: function (shape) {\n var args = {\n layer: this,\n shape: shape\n };\n var cancelled = this.map.trigger('shapeCreated', args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n var SqrtScale = kendo.Class.extend({\n init: function (domain, range) {\n this._domain = domain;\n this._range = range;\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n map: function (value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n var Symbols = {\n circle: function (args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n square: function (args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: { sqrt: SqrtScale },\n symbols: Symbols\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/tile', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, template = kendo.template, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, Layer = dataviz.map.layers.Layer, util = kendo.util, renderSize = util.renderSize, drawingUtil = kendo.drawing.util, round = drawingUtil.round, limit = drawingUtil.limitValue;\n var TileLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this._view.destroy();\n this._view = null;\n },\n _beforeReset: function () {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset();\n },\n _viewType: function () {\n return TileView;\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(proxy(this._render, this), 100);\n }\n this.map.bind('pan', this._pan);\n }\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n },\n _updateView: function () {\n var view = this._view, map = this.map, extent = map.extent(), extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n _resize: function () {\n this._render();\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n _render: function () {\n this._updateView();\n this._view.render();\n }\n });\n var TileView = Class.extend({\n init: function (element, options) {\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n },\n options: {\n tileSize: 256,\n subdomains: [\n 'a',\n 'b',\n 'c'\n ],\n urlTemplate: ''\n },\n center: function (center) {\n this._center = center;\n },\n extent: function (extent) {\n this._extent = extent;\n },\n viewOrigin: function (origin) {\n this._viewOrigin = origin;\n },\n zoom: function (zoom) {\n this._zoom = zoom;\n },\n pointToTileIndex: function (point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n },\n tileCount: function () {\n var size = this.size(), firstTileIndex = this.pointToTileIndex(this._extent.nw), nw = this._extent.nw, point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n size: function () {\n var nw = this._extent.nw, se = this._extent.se, diff = se.clone().translate(-nw.x, -nw.y);\n return {\n width: diff.x,\n height: diff.y\n };\n },\n indexToPoint: function (index) {\n var x = index.x, y = index.y;\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n },\n subdomainText: function () {\n var subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n destroy: function () {\n this.element.empty();\n this.pool.empty();\n },\n reset: function () {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n render: function () {\n var size = this.tileCount(), firstTileIndex = this.pointToTileIndex(this._extent.nw), tile, x, y;\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n createTile: function (currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n return tile;\n },\n tileOptions: function (currentIndex) {\n var index = this.wrapIndex(currentIndex), point = this.indexToPoint(currentIndex), origin = this._viewOrigin, offset = point.clone().translate(-origin.x, -origin.y);\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n },\n wrapIndex: function (index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n wrapValue: function (value, boundary) {\n var remainder = math.abs(value) % boundary;\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n return value;\n }\n });\n var ImageTile = Class.extend({\n init: function (id, options) {\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n options: {\n urlTemplate: '',\n errorUrlTemplate: ''\n },\n createElement: function () {\n this.element = $('\\'\\'').css({\n width: this.options.size,\n height: this.options.size\n }).on('error', proxy(function (e) {\n if (this.errorUrl()) {\n e.target.setAttribute('src', this.errorUrl());\n } else {\n e.target.removeAttribute('src');\n }\n }, this));\n },\n show: function () {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n var url = this.url();\n if (url) {\n element.setAttribute('src', url);\n }\n element.style.visibility = 'visible';\n this.visible = true;\n },\n hide: function () {\n this.element[0].style.visibility = 'hidden';\n this.visible = false;\n },\n url: function () {\n var urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n },\n errorUrl: function () {\n var urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n },\n urlOptions: function () {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n destroy: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n var TilePool = Class.extend({\n init: function () {\n this._items = [];\n },\n options: { maxSize: 100 },\n get: function (center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n return this._create(options);\n },\n empty: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n this._items = [];\n },\n reset: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n _create: function (options) {\n var items = this._items;\n var tile;\n var id = util.hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n return tile;\n },\n _remove: function (center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bing', ['dataviz/map/layers/tile'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, defined = kendo.drawing.util.defined, Extent = dataviz.map.Extent, Location = dataviz.map.Location, TileLayer = dataviz.map.layers.TileLayer, TileView = dataviz.map.layers.TileView;\n var BingLayer = TileLayer.extend({\n init: function (map, options) {\n this.options.baseUrl = this._scheme() + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/';\n TileLayer.fn.init.call(this, map, options);\n this._onMetadata = $.proxy(this._onMetadata, this);\n this._fetchMetadata();\n },\n options: { imagerySet: 'road' },\n _fetchMetadata: function () {\n var options = this.options;\n if (!options.key) {\n throw new Error('Bing tile layer: API key is required');\n }\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: 'json',\n include: 'ImageryProviders',\n key: options.key,\n uriScheme: this._scheme()\n },\n type: 'get',\n dataType: 'jsonp',\n jsonp: 'jsonp',\n success: this._onMetadata\n });\n },\n _scheme: function (proto) {\n proto = proto || window.location.protocol;\n return proto.replace(':', '') === 'https' ? 'https' : 'http';\n },\n _onMetadata: function (data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl.replace('{subdomain}', '#= subdomain #').replace('{quadkey}', '#= quadkey #').replace('{culture}', '#= culture #'),\n subdomains: resource.imageUrlSubdomains\n });\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n this._addAttribution();\n if (this.element.css('display') !== 'none') {\n this._reset();\n }\n }\n },\n _viewType: function () {\n return BingView;\n },\n _addAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(new Location(area.bbox[2], area.bbox[1]), new Location(area.bbox[0], area.bbox[3]))\n });\n }\n }\n }\n }\n },\n imagerySet: function (value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n var BingView = TileView.extend({\n options: { culture: 'en-US' },\n tileOptions: function (currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n return options;\n },\n tileQuadKey: function (index) {\n var quadKey = '', digit, mask, i;\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << i - 1;\n if ((index.x & mask) !== 0) {\n digit++;\n }\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n quadKey += digit;\n }\n return quadKey;\n }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/marker', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location',\n 'kendo.data',\n 'kendo.tooltip'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, indexOf = $.inArray, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, Tooltip = kendo.ui.Tooltip, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var MarkerLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n this._markerClick = proxy(this._markerClick, this);\n this.element.on('click', '.k-marker', this._markerClick);\n this.items = [];\n this._initDataSource();\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.element.off('click', '.k-marker', this._markerClick);\n this.dataSource.unbind('change', this._dataChange);\n this.clear();\n },\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: 'location',\n titleField: 'title'\n },\n add: function (arg) {\n if ($.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n remove: function (marker) {\n marker.destroy();\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n clear: function () {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n this.items = [];\n },\n update: function (marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n var args = {\n marker: marker,\n layer: this\n };\n this.map.trigger('markerActivate', args);\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n bind: function (options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n var args = {\n marker: marker,\n layer: this\n };\n var cancelled = this.map.trigger('markerCreated', args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _addOne: function (arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._load(e.sender.view());\n },\n _load: function (data) {\n this._data = data;\n this.clear();\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n _markerClick: function (e) {\n var args = {\n marker: $(e.target).data('kendoMarker'),\n layer: this\n };\n this.map.trigger('markerClick', args);\n }\n });\n var Marker = Class.extend({\n init: function (options) {\n this.options = options || {};\n },\n addTo: function (parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n location: function (value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n if (this.layer) {\n this.layer.update(this);\n }\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n showAt: function (point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n },\n hide: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n destroy: function () {\n this.layer = null;\n this.hide();\n },\n render: function () {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n this.element = $(doc.createElement('span')).addClass('k-marker k-icon k-i-marker-' + kendo.toHyphens(options.shape || 'pin')).attr('title', options.title).attr(options.attributes || {}).data('kendoMarker', this).css('zIndex', options.zIndex);\n if (layer) {\n layer.element.append(this.element);\n }\n this.renderTooltip();\n }\n },\n renderTooltip: function () {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function (e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n Marker.create = function (arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n return new Marker(deepExtend({}, defaults, arg));\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/main', [\n 'dataviz/map/crs',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, min = math.min, pow = math.pow, proxy = $.proxy, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, ui = dataviz.ui, g = kendo.geometry, Point = g.Point, map = dataviz.map, Extent = map.Extent, Location = map.Location, EPSG3857 = map.crs.EPSG3857, util = kendo.util, renderPos = util.renderPos, drawingUtil = kendo.drawing.util, defined = drawingUtil.defined, limit = drawingUtil.limitValue, valueOrDefault = drawingUtil.valueOrDefault;\n var CSS_PREFIX = 'k-', FRICTION = 0.9, FRICTION_MOBILE = 0.93, MOUSEWHEEL = 'DOMMouseScroll mousewheel', VELOCITY_MULTIPLIER = 5, DEFAULT_ZOOM_RATE = 1;\n var Map = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n this._initOptions(options);\n this.bind(this.events, options);\n this.crs = new EPSG3857();\n this.element.addClass(CSS_PREFIX + this.options.name.toLowerCase()).css('position', 'relative').empty().append(doc.createElement('div'));\n this._viewOrigin = this._getOrigin();\n this._initScroller();\n this._initMarkers();\n this._initControls();\n this._initLayers();\n this._reset();\n this._mousewheel = proxy(this._mousewheel, this);\n this.element.bind(MOUSEWHEEL, this._mousewheel);\n },\n options: {\n name: 'Map',\n controls: {\n attribution: true,\n navigator: { panStep: 100 },\n zoom: true\n },\n layers: [],\n layerDefaults: {\n shape: {\n style: {\n fill: { color: '#fff' },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n bubble: {\n style: {\n fill: {\n color: '#fff',\n opacity: 0.5\n },\n stroke: {\n color: '#aaa',\n width: 0.5\n }\n }\n },\n marker: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n }\n },\n center: [\n 0,\n 0\n ],\n zoom: 3,\n minSize: 256,\n minZoom: 1,\n maxZoom: 19,\n markers: [],\n markerDefaults: {\n shape: 'pinTarget',\n tooltip: { position: 'top' }\n },\n wraparound: true\n },\n events: [\n 'beforeReset',\n 'click',\n 'markerActivate',\n 'markerClick',\n 'markerCreated',\n 'pan',\n 'panEnd',\n 'reset',\n 'shapeClick',\n 'shapeCreated',\n 'shapeFeatureCreated',\n 'shapeMouseEnter',\n 'shapeMouseLeave',\n 'zoomEnd',\n 'zoomStart'\n ],\n destroy: function () {\n this.scroller.destroy();\n if (this.navigator) {\n this.navigator.destroy();\n }\n if (this.attribution) {\n this.attribution.destroy();\n }\n if (this.zoomControl) {\n this.zoomControl.destroy();\n }\n this.markers.destroy();\n for (var i = 0; i < this.layers.length; i++) {\n this.layers[i].destroy();\n }\n Widget.fn.destroy.call(this);\n },\n zoom: function (level) {\n var options = this.options;\n if (defined(level)) {\n level = math.round(limit(level, options.minZoom, options.maxZoom));\n if (options.zoom !== level) {\n options.zoom = level;\n this._reset();\n }\n return this;\n } else {\n return options.zoom;\n }\n },\n center: function (center) {\n if (center) {\n this.options.center = Location.create(center).toArray();\n this._reset();\n return this;\n } else {\n return Location.create(this.options.center);\n }\n },\n extent: function (extent) {\n if (extent) {\n this._setExtent(extent);\n return this;\n } else {\n return this._getExtent();\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._reset();\n },\n locationToLayer: function (location, zoom) {\n var clamp = !this.options.wraparound;\n location = Location.create(location);\n return this.crs.toPoint(location, this._layerSize(zoom), clamp);\n },\n layerToLocation: function (point, zoom) {\n var clamp = !this.options.wraparound;\n point = Point.create(point);\n return this.crs.toLocation(point, this._layerSize(zoom), clamp);\n },\n locationToView: function (location) {\n location = Location.create(location);\n var origin = this.locationToLayer(this._viewOrigin);\n var point = this.locationToLayer(location);\n return point.translateWith(origin.scale(-1));\n },\n viewToLocation: function (point, zoom) {\n var origin = this.locationToLayer(this._getOrigin(), zoom);\n point = Point.create(point);\n point = point.clone().translateWith(origin);\n return this.layerToLocation(point, zoom);\n },\n eventOffset: function (e) {\n var point;\n var x;\n var y;\n var offset = this.element.offset();\n if (e.x || e.y) {\n var field = 'location';\n x = e.x[field] - offset.left;\n y = e.y[field] - offset.top;\n point = new g.Point(x, y);\n } else {\n var event = e.originalEvent || e;\n x = valueOrDefault(event.pageX, event.clientX) - offset.left;\n y = valueOrDefault(event.pageY, event.clientY) - offset.top;\n point = new g.Point(x, y);\n }\n return point;\n },\n eventToView: function (e) {\n var cursor = this.eventOffset(e);\n return this.locationToView(this.viewToLocation(cursor));\n },\n eventToLayer: function (e) {\n return this.locationToLayer(this.eventToLocation(e));\n },\n eventToLocation: function (e) {\n var cursor = this.eventOffset(e);\n return this.viewToLocation(cursor);\n },\n viewSize: function () {\n var element = this.element;\n var scale = this._layerSize();\n var width = element.width();\n if (!this.options.wraparound) {\n width = min(scale, width);\n }\n return {\n width: width,\n height: min(scale, element.height())\n };\n },\n exportVisual: function () {\n this._reset();\n return false;\n },\n _setOrigin: function (origin, zoom) {\n var size = this.viewSize(), topLeft;\n origin = this._origin = Location.create(origin);\n topLeft = this.locationToLayer(origin, zoom);\n topLeft.x += size.width / 2;\n topLeft.y += size.height / 2;\n this.options.center = this.layerToLocation(topLeft, zoom).toArray();\n return this;\n },\n _getOrigin: function (invalidate) {\n var size = this.viewSize(), topLeft;\n if (invalidate || !this._origin) {\n topLeft = this.locationToLayer(this.center());\n topLeft.x -= size.width / 2;\n topLeft.y -= size.height / 2;\n this._origin = this.layerToLocation(topLeft);\n }\n return this._origin;\n },\n _setExtent: function (extent) {\n var raw = Extent.create(extent);\n var se = raw.se.clone();\n if (this.options.wraparound && se.lng < 0 && extent.nw.lng > 0) {\n se.lng = 180 + (180 + se.lng);\n }\n extent = new Extent(raw.nw, se);\n this.center(extent.center());\n var width = this.element.width();\n var height = this.element.height();\n for (var zoom = this.options.maxZoom; zoom >= this.options.minZoom; zoom--) {\n var topLeft = this.locationToLayer(extent.nw, zoom);\n var bottomRight = this.locationToLayer(extent.se, zoom);\n var layerWidth = math.abs(bottomRight.x - topLeft.x);\n var layerHeight = math.abs(bottomRight.y - topLeft.y);\n if (layerWidth <= width && layerHeight <= height) {\n break;\n }\n }\n this.zoom(zoom);\n },\n _getExtent: function () {\n var nw = this._getOrigin();\n var bottomRight = this.locationToLayer(nw);\n var size = this.viewSize();\n bottomRight.x += size.width;\n bottomRight.y += size.height;\n var se = this.layerToLocation(bottomRight);\n return new Extent(nw, se);\n },\n _zoomAround: function (pivot, level) {\n this._setOrigin(this.layerToLocation(pivot, level), level);\n this.zoom(level);\n },\n _initControls: function () {\n var controls = this.options.controls;\n if (ui.Attribution && controls.attribution) {\n this._createAttribution(controls.attribution);\n }\n if (!kendo.support.mobileOS) {\n if (ui.Navigator && controls.navigator) {\n this._createNavigator(controls.navigator);\n }\n if (ui.ZoomControl && controls.zoom) {\n this._createZoomControl(controls.zoom);\n }\n }\n },\n _createControlElement: function (options, defaultPos) {\n var pos = options.position || defaultPos;\n var posSelector = '.' + renderPos(pos).replace(' ', '.');\n var wrap = $('.k-map-controls' + posSelector, this.element);\n if (wrap.length === 0) {\n wrap = $('
    ').addClass('k-map-controls ' + renderPos(pos)).appendTo(this.element);\n }\n return $('
    ').appendTo(wrap);\n },\n _createAttribution: function (options) {\n var element = this._createControlElement(options, 'bottomRight');\n this.attribution = new ui.Attribution(element, options);\n },\n _createNavigator: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var navigator = this.navigator = new ui.Navigator(element, options);\n this._navigatorPan = proxy(this._navigatorPan, this);\n navigator.bind('pan', this._navigatorPan);\n this._navigatorCenter = proxy(this._navigatorCenter, this);\n navigator.bind('center', this._navigatorCenter);\n },\n _navigatorPan: function (e) {\n var map = this;\n var scroller = map.scroller;\n var x = scroller.scrollLeft + e.x;\n var y = scroller.scrollTop - e.y;\n var bounds = this._virtualSize;\n var height = this.element.height();\n var width = this.element.width();\n x = limit(x, bounds.x.min, bounds.x.max - width);\n y = limit(y, bounds.y.min, bounds.y.max - height);\n map.scroller.one('scroll', function (e) {\n map._scrollEnd(e);\n });\n map.scroller.scrollTo(-x, -y);\n },\n _navigatorCenter: function () {\n this.center(this.options.center);\n },\n _createZoomControl: function (options) {\n var element = this._createControlElement(options, 'topLeft');\n var zoomControl = this.zoomControl = new ui.ZoomControl(element, options);\n this._zoomControlChange = proxy(this._zoomControlChange, this);\n zoomControl.bind('change', this._zoomControlChange);\n },\n _zoomControlChange: function (e) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n this.zoom(this.zoom() + e.delta);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n },\n _initScroller: function () {\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n var zoomable = this.options.zoomable !== false;\n var scroller = this.scroller = new kendo.mobile.ui.Scroller(this.element.children(0), {\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n zoom: zoomable,\n mousewheelScrolling: false,\n supportDoubleTap: true\n });\n scroller.bind('scroll', proxy(this._scroll, this));\n scroller.bind('scrollEnd', proxy(this._scrollEnd, this));\n scroller.userEvents.bind('gesturestart', proxy(this._scaleStart, this));\n scroller.userEvents.bind('gestureend', proxy(this._scale, this));\n scroller.userEvents.bind('doubleTap', proxy(this._doubleTap, this));\n scroller.userEvents.bind('tap', proxy(this._tap, this));\n this.scrollElement = scroller.scrollElement;\n },\n _initLayers: function () {\n var defs = this.options.layers, layers = this.layers = [];\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _initMarkers: function () {\n this.markers = new map.layers.MarkerLayer(this, this.options.markerDefaults);\n this.markers.add(this.options.markers);\n },\n _scroll: function (e) {\n var origin = this.locationToLayer(this._viewOrigin).round();\n var movable = e.sender.movable;\n var offset = new g.Point(movable.x, movable.y).scale(-1).scale(1 / movable.scale);\n origin.x += offset.x;\n origin.y += offset.y;\n this._scrollOffset = offset;\n this._setOrigin(this.layerToLocation(origin));\n this.trigger('pan', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _scrollEnd: function (e) {\n if (!this._scrollOffset || !this._panComplete()) {\n return;\n }\n this._scrollOffset = null;\n this._panEndTS = new Date();\n this.trigger('panEnd', {\n originalEvent: e,\n origin: this._getOrigin(),\n center: this.center()\n });\n },\n _panComplete: function () {\n return new Date() - (this._panEndTS || 0) > 50;\n },\n _scaleStart: function (e) {\n if (this.trigger('zoomStart', { originalEvent: e })) {\n var touch = e.touches[1];\n if (touch) {\n touch.cancel();\n }\n }\n },\n _scale: function (e) {\n var scale = this.scroller.movable.scale;\n var zoom = this._scaleToZoom(scale);\n var gestureCenter = new g.Point(e.center.x, e.center.y);\n var centerLocation = this.viewToLocation(gestureCenter, zoom);\n var centerPoint = this.locationToLayer(centerLocation, zoom);\n var originPoint = centerPoint.translate(-gestureCenter.x, -gestureCenter.y);\n this._zoomAround(originPoint, zoom);\n this.trigger('zoomEnd', { originalEvent: e });\n },\n _scaleToZoom: function (scaleDelta) {\n var scale = this._layerSize() * scaleDelta;\n var tiles = scale / this.options.minSize;\n var zoom = math.log(tiles) / math.log(2);\n return math.round(zoom);\n },\n _reset: function () {\n if (this.attribution) {\n this.attribution.filter(this.center(), this.zoom());\n }\n this._viewOrigin = this._getOrigin(true);\n this._resetScroller();\n this.trigger('beforeReset');\n this.trigger('reset');\n },\n _resetScroller: function () {\n var scroller = this.scroller;\n var x = scroller.dimensions.x;\n var y = scroller.dimensions.y;\n var scale = this._layerSize();\n var nw = this.extent().nw;\n var topLeft = this.locationToLayer(nw).round();\n scroller.movable.round = true;\n scroller.reset();\n scroller.userEvents.cancel();\n var zoom = this.zoom();\n scroller.dimensions.forcedMinScale = pow(2, this.options.minZoom - zoom);\n scroller.dimensions.maxScale = pow(2, this.options.maxZoom - zoom);\n var xBounds = {\n min: -topLeft.x,\n max: scale - topLeft.x\n };\n var yBounds = {\n min: -topLeft.y,\n max: scale - topLeft.y\n };\n if (this.options.wraparound) {\n xBounds.max = 20 * scale;\n xBounds.min = -xBounds.max;\n }\n if (this.options.pannable === false) {\n var viewSize = this.viewSize();\n xBounds.min = yBounds.min = 0;\n xBounds.max = viewSize.width;\n yBounds.max = viewSize.height;\n }\n x.makeVirtual();\n y.makeVirtual();\n x.virtualSize(xBounds.min, xBounds.max);\n y.virtualSize(yBounds.min, yBounds.max);\n this._virtualSize = {\n x: xBounds,\n y: yBounds\n };\n },\n _renderLayers: function () {\n var defs = this.options.layers, layers = this.layers = [], scrollWrap = this.scrollWrap;\n scrollWrap.empty();\n for (var i = 0; i < defs.length; i++) {\n var options = defs[i];\n var type = options.type || 'shape';\n var defaults = this.options.layerDefaults[type];\n var impl = dataviz.map.layers[type];\n layers.push(new impl(this, deepExtend({}, defaults, options)));\n }\n },\n _layerSize: function (zoom) {\n zoom = valueOrDefault(zoom, this.options.zoom);\n return this.options.minSize * pow(2, zoom);\n },\n _tap: function (e) {\n if (!this._panComplete()) {\n return;\n }\n var cursor = this.eventOffset(e);\n this.trigger('click', {\n originalEvent: e,\n location: this.viewToLocation(cursor)\n });\n },\n _doubleTap: function (e) {\n var options = this.options;\n if (options.zoomable !== false) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var toZoom = this.zoom() + DEFAULT_ZOOM_RATE;\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n },\n _mousewheel: function (e) {\n e.preventDefault();\n var delta = dataviz.mwDelta(e) > 0 ? -1 : 1;\n var options = this.options;\n var fromZoom = this.zoom();\n var toZoom = limit(fromZoom + delta, options.minZoom, options.maxZoom);\n if (options.zoomable !== false && toZoom !== fromZoom) {\n if (!this.trigger('zoomStart', { originalEvent: e })) {\n var cursor = this.eventOffset(e);\n var location = this.viewToLocation(cursor);\n var postZoom = this.locationToLayer(location, toZoom);\n var origin = postZoom.translate(-cursor.x, -cursor.y);\n this._zoomAround(origin, toZoom);\n this.trigger('zoomEnd', { originalEvent: e });\n }\n }\n }\n });\n dataviz.ui.plugin(Map);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.map', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.tooltip',\n 'kendo.mobile.scroller',\n 'kendo.draganddrop',\n 'kendo.dataviz.core',\n 'dataviz/map/location',\n 'dataviz/map/attribution',\n 'dataviz/map/navigator',\n 'dataviz/map/zoom',\n 'dataviz/map/crs',\n 'dataviz/map/layers/base',\n 'dataviz/map/layers/shape',\n 'dataviz/map/layers/bubble',\n 'dataviz/map/layers/tile',\n 'dataviz/map/layers/bing',\n 'dataviz/map/layers/marker',\n 'dataviz/map/main'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.map',\n name: 'Map',\n category: 'dataviz',\n description: 'The Kendo DataViz Map displays spatial data',\n depends: [\n 'data',\n 'userevents',\n 'tooltip',\n 'dataviz.core',\n 'drawing',\n 'mobile.scroller'\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/utils', ['kendo.core'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram = {}, deepExtend = kendo.deepExtend, isArray = $.isArray, EPSILON = 0.000001;\n var Utils = {};\n deepExtend(Utils, {\n isNearZero: function (num) {\n return Math.abs(num) < EPSILON;\n },\n isDefined: function (obj) {\n return typeof obj !== 'undefined';\n },\n isUndefined: function (obj) {\n return typeof obj === 'undefined' || obj === null;\n },\n isObject: function (obj) {\n return obj === Object(obj);\n },\n has: function (obj, key) {\n return Object.hasOwnProperty.call(obj, key);\n },\n isString: function (obj) {\n return Object.prototype.toString.call(obj) == '[object String]';\n },\n isBoolean: function (obj) {\n return Object.prototype.toString.call(obj) == '[object Boolean]';\n },\n isType: function (obj, type) {\n return Object.prototype.toString.call(obj) == '[object ' + type + ']';\n },\n isNumber: function (obj) {\n return !isNaN(parseFloat(obj)) && isFinite(obj);\n },\n isEmpty: function (obj) {\n if (obj === null) {\n return true;\n }\n if (isArray(obj) || Utils.isString(obj)) {\n return obj.length === 0;\n }\n for (var key in obj) {\n if (Utils.has(obj, key)) {\n return false;\n }\n }\n return true;\n },\n simpleExtend: function (destination, source) {\n if (!Utils.isObject(source)) {\n return;\n }\n for (var name in source) {\n destination[name] = source[name];\n }\n },\n initArray: function createIdArray(size, value) {\n var array = [];\n for (var i = 0; i < size; ++i) {\n array[i] = value;\n }\n return array;\n },\n serializePoints: function (points) {\n var res = [];\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n res.push(p.x + ';' + p.y);\n }\n return res.join(';');\n },\n deserializePoints: function (s) {\n var v = s.split(';'), points = [];\n if (v.length % 2 !== 0) {\n throw 'Not an array of points.';\n }\n for (var i = 0; i < v.length; i += 2) {\n points.push(new diagram.Point(parseInt(v[i], 10), parseInt(v[i + 1], 10)));\n }\n return points;\n },\n randomInteger: function (lower, upper) {\n return parseInt(Math.floor(Math.random() * upper) + lower, 10);\n },\n DFT: function (el, func) {\n func(el);\n if (el.childNodes) {\n for (var i = 0; i < el.childNodes.length; i++) {\n var item = el.childNodes[i];\n this.DFT(item, func);\n }\n }\n },\n getMatrixAngle: function (m) {\n if (m === null || m.d === 0) {\n return 0;\n }\n return Math.atan2(m.b, m.d) * 180 / Math.PI;\n },\n getMatrixScaling: function (m) {\n var sX = Math.sqrt(m.a * m.a + m.c * m.c);\n var sY = Math.sqrt(m.b * m.b + m.d * m.d);\n return [\n sX,\n sY\n ];\n }\n });\n function Range(start, stop, step) {\n if (typeof start == 'undefined' || typeof stop == 'undefined') {\n return [];\n }\n if (step && Utils.sign(stop - start) != Utils.sign(step)) {\n throw 'The sign of the increment should allow to reach the stop-value.';\n }\n step = step || 1;\n start = start || 0;\n stop = stop || start;\n if ((stop - start) / step === Infinity) {\n throw 'Infinite range defined.';\n }\n var range = [], i = -1, j;\n function rangeIntegerScale(x) {\n var k = 1;\n while (x * k % 1) {\n k *= 10;\n }\n return k;\n }\n var k = rangeIntegerScale(Math.abs(step));\n start *= k;\n stop *= k;\n step *= k;\n if (start > stop && step > 0) {\n step = -step;\n }\n if (step < 0) {\n while ((j = start + step * ++i) >= stop) {\n range.push(j / k);\n }\n } else {\n while ((j = start + step * ++i) <= stop) {\n range.push(j / k);\n }\n }\n return range;\n }\n function findRadian(start, end) {\n if (start == end) {\n return 0;\n }\n var sngXComp = end.x - start.x, sngYComp = start.y - end.y, atan = Math.atan(sngXComp / sngYComp);\n if (sngYComp >= 0) {\n return sngXComp < 0 ? atan + 2 * Math.PI : atan;\n }\n return atan + Math.PI;\n }\n Utils.sign = function (number) {\n return number ? number < 0 ? -1 : 1 : 0;\n };\n Utils.findAngle = function (center, end) {\n return findRadian(center, end) * 180 / Math.PI;\n };\n Utils.forEach = function (arr, iterator, thisRef) {\n for (var i = 0; i < arr.length; i++) {\n iterator.call(thisRef, arr[i], i, arr);\n }\n };\n Utils.any = function (arr, predicate) {\n for (var i = 0; i < arr.length; ++i) {\n if (predicate(arr[i])) {\n return arr[i];\n }\n }\n return null;\n };\n Utils.remove = function (arr, what) {\n var ax;\n while ((ax = Utils.indexOf(arr, what)) !== -1) {\n arr.splice(ax, 1);\n }\n return arr;\n };\n Utils.contains = function (arr, obj) {\n return Utils.indexOf(arr, obj) !== -1;\n };\n Utils.indexOf = function (arr, what) {\n return $.inArray(what, arr);\n };\n Utils.fold = function (list, iterator, acc, context) {\n var initial = arguments.length > 2;\n for (var i = 0; i < list.length; i++) {\n var value = list[i];\n if (!initial) {\n acc = value;\n initial = true;\n } else {\n acc = iterator.call(context, acc, value, i, list);\n }\n }\n if (!initial) {\n throw 'Reduce of empty array with no initial value';\n }\n return acc;\n };\n Utils.find = function (arr, iterator, context) {\n var result;\n Utils.any(arr, function (value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n return false;\n });\n return result;\n };\n Utils.first = function (arr, constraint, context) {\n if (arr.length === 0) {\n return null;\n }\n if (Utils.isUndefined(constraint)) {\n return arr[0];\n }\n return Utils.find(arr, constraint, context);\n };\n Utils.insert = function (arr, element, position) {\n arr.splice(position, 0, element);\n return arr;\n };\n Utils.all = function (arr, iterator, context) {\n var result = true;\n var value;\n for (var i = 0; i < arr.length; i++) {\n value = arr[i];\n result = result && iterator.call(context, value, i, arr);\n if (!result) {\n break;\n }\n }\n return result;\n };\n Utils.clear = function (arr) {\n arr.splice(0, arr.length);\n };\n Utils.bisort = function (a, b, sortfunc) {\n if (Utils.isUndefined(a)) {\n throw 'First array is not specified.';\n }\n if (Utils.isUndefined(b)) {\n throw 'Second array is not specified.';\n }\n if (a.length != b.length) {\n throw 'The two arrays should have equal length';\n }\n var all = [], i;\n for (i = 0; i < a.length; i++) {\n all.push({\n 'x': a[i],\n 'y': b[i]\n });\n }\n if (Utils.isUndefined(sortfunc)) {\n all.sort(function (m, n) {\n return m.x - n.x;\n });\n } else {\n all.sort(function (m, n) {\n return sortfunc(m.x, n.x);\n });\n }\n Utils.clear(a);\n Utils.clear(b);\n for (i = 0; i < all.length; i++) {\n a.push(all[i].x);\n b.push(all[i].y);\n }\n };\n Utils.addRange = function (arr, range) {\n arr.push.apply(arr, range);\n };\n var Easing = {\n easeInOut: function (pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5;\n }\n };\n var Ticker = kendo.Class.extend({\n init: function () {\n this.adapters = [];\n this.target = 0;\n this.tick = 0;\n this.interval = 20;\n this.duration = 800;\n this.lastTime = null;\n this.handlers = [];\n var _this = this;\n this.transition = Easing.easeInOut;\n this.timerDelegate = function () {\n _this.onTimerEvent();\n };\n },\n addAdapter: function (a) {\n this.adapters.push(a);\n },\n onComplete: function (handler) {\n this.handlers.push(handler);\n },\n removeHandler: function (handler) {\n this.handlers = $.grep(this.handlers, function (h) {\n return h !== handler;\n });\n },\n trigger: function () {\n var _this = this;\n if (this.handlers) {\n Utils.forEach(this.handlers, function (h) {\n return h.call(_this.caller !== null ? _this.caller : _this);\n });\n }\n },\n onStep: function () {\n },\n seekTo: function (to) {\n this.seekFromTo(this.tick, to);\n },\n seekFromTo: function (from, to) {\n this.target = Math.max(0, Math.min(1, to));\n this.tick = Math.max(0, Math.min(1, from));\n this.lastTime = new Date().getTime();\n if (!this.intervalId) {\n this.intervalId = window.setInterval(this.timerDelegate, this.interval);\n }\n },\n stop: function () {\n if (this.intervalId) {\n window.clearInterval(this.intervalId);\n this.intervalId = null;\n this.trigger();\n }\n },\n play: function (origin) {\n if (this.adapters.length === 0) {\n return;\n }\n if (origin !== null) {\n this.caller = origin;\n }\n this.initState();\n this.seekFromTo(0, 1);\n },\n reverse: function () {\n this.seekFromTo(1, 0);\n },\n initState: function () {\n if (this.adapters.length === 0) {\n return;\n }\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].initState();\n }\n },\n propagate: function () {\n var value = this.transition(this.tick);\n for (var i = 0; i < this.adapters.length; i++) {\n this.adapters[i].update(value);\n }\n },\n onTimerEvent: function () {\n var now = new Date().getTime();\n var timePassed = now - this.lastTime;\n this.lastTime = now;\n var movement = timePassed / this.duration * (this.tick < this.target ? 1 : -1);\n if (Math.abs(movement) >= Math.abs(this.tick - this.target)) {\n this.tick = this.target;\n } else {\n this.tick += movement;\n }\n try {\n this.propagate();\n } finally {\n this.onStep.call(this);\n if (this.target == this.tick) {\n this.stop();\n }\n }\n }\n });\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Utils: Utils,\n Range: Range,\n Ticker: Ticker\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/math', [\n 'dataviz/diagram/utils',\n 'kendo.dataviz.core'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, Utils = diagram.Utils, Point = dataviz.Point2D, isFunction = kendo.isFunction, contains = Utils.contains, map = $.map;\n var HITTESTAREA = 3, EPSILON = 0.000001;\n deepExtend(Point.fn, {\n plus: function (p) {\n return new Point(this.x + p.x, this.y + p.y);\n },\n minus: function (p) {\n return new Point(this.x - p.x, this.y - p.y);\n },\n offset: function (value) {\n return new Point(this.x - value, this.y - value);\n },\n times: function (s) {\n return new Point(this.x * s, this.y * s);\n },\n normalize: function () {\n if (this.length() === 0) {\n return new Point();\n }\n return this.times(1 / this.length());\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n toString: function () {\n return '(' + this.x + ',' + this.y + ')';\n },\n lengthSquared: function () {\n return this.x * this.x + this.y * this.y;\n },\n middleOf: function MiddleOf(p, q) {\n return new Point(q.x - p.x, q.y - p.y).times(0.5).plus(p);\n },\n toPolar: function (useDegrees) {\n var factor = 1;\n if (useDegrees) {\n factor = 180 / Math.PI;\n }\n var a = Math.atan2(Math.abs(this.y), Math.abs(this.x));\n var halfpi = Math.PI / 2;\n var len = this.length();\n if (this.x === 0) {\n if (this.y === 0) {\n return new Polar(0, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * halfpi);\n }\n if (this.y < 0) {\n return new Polar(len, factor * 3 * halfpi);\n }\n } else if (this.x > 0) {\n if (this.y === 0) {\n return new Polar(len, 0);\n }\n if (this.y > 0) {\n return new Polar(len, factor * a);\n }\n if (this.y < 0) {\n return new Polar(len, factor * (4 * halfpi - a));\n }\n } else {\n if (this.y === 0) {\n return new Polar(len, 2 * halfpi);\n }\n if (this.y > 0) {\n return new Polar(len, factor * (2 * halfpi - a));\n }\n if (this.y < 0) {\n return new Polar(len, factor * (2 * halfpi + a));\n }\n }\n },\n isOnLine: function (from, to) {\n if (from.x > to.x) {\n var temp = to;\n to = from;\n from = temp;\n }\n var r1 = new Rect(from.x, from.y).inflate(HITTESTAREA, HITTESTAREA), r2 = new Rect(to.x, to.y).inflate(HITTESTAREA, HITTESTAREA), o1, u1;\n if (r1.union(r2).contains(this)) {\n if (from.x === to.x || from.y === to.y) {\n return true;\n } else if (from.y < to.y) {\n o1 = r1.x + (r2.x - r1.x) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - r1.y) / (r2.y - r1.y);\n } else {\n o1 = r1.x + (r2.x - r1.x) * (this.y - r1.y) / (r2.y - r1.y);\n u1 = r1.x + r1.width + (r2.x + r2.width - (r1.x + r1.width)) * (this.y - (r1.y + r1.height)) / (r2.y + r2.height - (r1.y + r1.height));\n }\n return this.x > o1 && this.x < u1;\n }\n return false;\n }\n });\n deepExtend(Point, {\n parse: function (str) {\n var tempStr = str.slice(1, str.length - 1), xy = tempStr.split(','), x = parseInt(xy[0], 10), y = parseInt(xy[1], 10);\n if (!isNaN(x) && !isNaN(y)) {\n return new Point(x, y);\n }\n }\n });\n var PathDefiner = Class.extend({\n init: function (p, left, right) {\n this.point = p;\n this.left = left;\n this.right = right;\n }\n });\n var Rect = Class.extend({\n init: function (x, y, width, height) {\n this.x = x || 0;\n this.y = y || 0;\n this.width = width || 0;\n this.height = height || 0;\n },\n contains: function (point) {\n return point.x >= this.x && point.x <= this.x + this.width && point.y >= this.y && point.y <= this.y + this.height;\n },\n inflate: function (dx, dy) {\n if (dy === undefined) {\n dy = dx;\n }\n this.x -= dx;\n this.y -= dy;\n this.width += 2 * dx + 1;\n this.height += 2 * dy + 1;\n return this;\n },\n offset: function (dx, dy) {\n var x = dx, y = dy;\n if (dx instanceof Point) {\n x = dx.x;\n y = dx.y;\n }\n this.x += x;\n this.y += y;\n return this;\n },\n union: function (r) {\n var x1 = Math.min(this.x, r.x);\n var y1 = Math.min(this.y, r.y);\n var x2 = Math.max(this.x + this.width, r.x + r.width);\n var y2 = Math.max(this.y + this.height, r.y + r.height);\n return new Rect(x1, y1, x2 - x1, y2 - y1);\n },\n center: function () {\n return new Point(this.x + this.width / 2, this.y + this.height / 2);\n },\n top: function () {\n return new Point(this.x + this.width / 2, this.y);\n },\n right: function () {\n return new Point(this.x + this.width, this.y + this.height / 2);\n },\n bottom: function () {\n return new Point(this.x + this.width / 2, this.y + this.height);\n },\n left: function () {\n return new Point(this.x, this.y + this.height / 2);\n },\n topLeft: function () {\n return new Point(this.x, this.y);\n },\n topRight: function () {\n return new Point(this.x + this.width, this.y);\n },\n bottomLeft: function () {\n return new Point(this.x, this.y + this.height);\n },\n bottomRight: function () {\n return new Point(this.x + this.width, this.y + this.height);\n },\n clone: function () {\n return new Rect(this.x, this.y, this.width, this.height);\n },\n isEmpty: function () {\n return !this.width && !this.height;\n },\n equals: function (rect) {\n return this.x === rect.x && this.y === rect.y && this.width === rect.width && this.height === rect.height;\n },\n rotatedBounds: function (angle) {\n var rect = this.clone(), points = this.rotatedPoints(angle), tl = points[0], tr = points[1], br = points[2], bl = points[3];\n rect.x = Math.min(br.x, tl.x, tr.x, bl.x);\n rect.y = Math.min(br.y, tl.y, tr.y, bl.y);\n rect.width = Math.max(br.x, tl.x, tr.x, bl.x) - rect.x;\n rect.height = Math.max(br.y, tl.y, tr.y, bl.y) - rect.y;\n return rect;\n },\n rotatedPoints: function (angle) {\n var rect = this, c = rect.center(), br = rect.bottomRight().rotate(c, 360 - angle), tl = rect.topLeft().rotate(c, 360 - angle), tr = rect.topRight().rotate(c, 360 - angle), bl = rect.bottomLeft().rotate(c, 360 - angle);\n return [\n tl,\n tr,\n br,\n bl\n ];\n },\n toString: function (delimiter) {\n delimiter = delimiter || ' ';\n return this.x + delimiter + this.y + delimiter + this.width + delimiter + this.height;\n },\n scale: function (scaleX, scaleY, staicPoint, adornerCenter, angle) {\n var tl = this.topLeft();\n var thisCenter = this.center();\n tl.rotate(thisCenter, 360 - angle).rotate(adornerCenter, angle);\n var delta = staicPoint.minus(tl);\n var scaled = new Point(delta.x * scaleX, delta.y * scaleY);\n var position = delta.minus(scaled);\n tl = tl.plus(position);\n tl.rotate(adornerCenter, 360 - angle).rotate(thisCenter, angle);\n this.x = tl.x;\n this.y = tl.y;\n this.width *= scaleX;\n this.height *= scaleY;\n },\n zoom: function (zoom) {\n this.x *= zoom;\n this.y *= zoom;\n this.width *= zoom;\n this.height *= zoom;\n return this;\n },\n overlaps: function (rect) {\n var bottomRight = this.bottomRight();\n var rectBottomRight = rect.bottomRight();\n var overlaps = !(bottomRight.x < rect.x || bottomRight.y < rect.y || rectBottomRight.x < this.x || rectBottomRight.y < this.y);\n return overlaps;\n }\n });\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width;\n this.height = height;\n }\n });\n Size.prototype.Empty = new Size(0, 0);\n Rect.toRect = function (rect) {\n if (!(rect instanceof Rect)) {\n rect = new Rect(rect.x, rect.y, rect.width, rect.height);\n }\n return rect;\n };\n Rect.empty = function () {\n return new Rect(0, 0, 0, 0);\n };\n Rect.fromPoints = function (p, q) {\n if (isNaN(p.x) || isNaN(p.y) || isNaN(q.x) || isNaN(q.y)) {\n throw 'Some values are NaN.';\n }\n return new Rect(Math.min(p.x, q.x), Math.min(p.y, q.y), Math.abs(p.x - q.x), Math.abs(p.y - q.y));\n };\n function isNearZero(num) {\n return Math.abs(num) < EPSILON;\n }\n function intersectLine(start1, end1, start2, end2, isSegment) {\n var tangensdiff = (end1.x - start1.x) * (end2.y - start2.y) - (end1.y - start1.y) * (end2.x - start2.x);\n if (isNearZero(tangensdiff)) {\n return;\n }\n var num1 = (start1.y - start2.y) * (end2.x - start2.x) - (start1.x - start2.x) * (end2.y - start2.y);\n var num2 = (start1.y - start2.y) * (end1.x - start1.x) - (start1.x - start2.x) * (end1.y - start1.y);\n var r = num1 / tangensdiff;\n var s = num2 / tangensdiff;\n if (isSegment && (r < 0 || r > 1 || s < 0 || s > 1)) {\n return;\n }\n return new Point(start1.x + r * (end1.x - start1.x), start1.y + r * (end1.y - start1.y));\n }\n var Intersect = {\n lines: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2);\n },\n segments: function (start1, end1, start2, end2) {\n return intersectLine(start1, end1, start2, end2, true);\n },\n rectWithLine: function (rect, start, end) {\n return Intersect.segments(start, end, rect.topLeft(), rect.topRight()) || Intersect.segments(start, end, rect.topRight(), rect.bottomRight()) || Intersect.segments(start, end, rect.bottomLeft(), rect.bottomRight()) || Intersect.segments(start, end, rect.topLeft(), rect.bottomLeft());\n },\n rects: function (rect1, rect2, angle) {\n var tl = rect2.topLeft(), tr = rect2.topRight(), bl = rect2.bottomLeft(), br = rect2.bottomRight();\n var center = rect2.center();\n if (angle) {\n tl = tl.rotate(center, angle);\n tr = tr.rotate(center, angle);\n bl = bl.rotate(center, angle);\n br = br.rotate(center, angle);\n }\n var intersect = rect1.contains(tl) || rect1.contains(tr) || rect1.contains(bl) || rect1.contains(br) || Intersect.rectWithLine(rect1, tl, tr) || Intersect.rectWithLine(rect1, tl, bl) || Intersect.rectWithLine(rect1, tr, br) || Intersect.rectWithLine(rect1, bl, br);\n if (!intersect) {\n tl = rect1.topLeft();\n tr = rect1.topRight();\n bl = rect1.bottomLeft();\n br = rect1.bottomRight();\n if (angle) {\n var reverseAngle = 360 - angle;\n tl = tl.rotate(center, reverseAngle);\n tr = tr.rotate(center, reverseAngle);\n bl = bl.rotate(center, reverseAngle);\n br = br.rotate(center, reverseAngle);\n }\n intersect = rect2.contains(tl) || rect2.contains(tr) || rect2.contains(bl) || rect2.contains(br);\n }\n return intersect;\n }\n };\n var RectAlign = Class.extend({\n init: function (container) {\n this.container = Rect.toRect(container);\n },\n align: function (content, alignment) {\n var alignValues = alignment.toLowerCase().split(' ');\n for (var i = 0; i < alignValues.length; i++) {\n content = this._singleAlign(content, alignValues[i]);\n }\n return content;\n },\n _singleAlign: function (content, alignment) {\n if (isFunction(this[alignment])) {\n return this[alignment](content);\n } else {\n return content;\n }\n },\n left: function (content) {\n return this._align(content, this._left);\n },\n center: function (content) {\n return this._align(content, this._center);\n },\n right: function (content) {\n return this._align(content, this._right);\n },\n stretch: function (content) {\n return this._align(content, this._stretch);\n },\n top: function (content) {\n return this._align(content, this._top);\n },\n middle: function (content) {\n return this._align(content, this._middle);\n },\n bottom: function (content) {\n return this._align(content, this._bottom);\n },\n _left: function (container, content) {\n content.x = container.x;\n },\n _center: function (container, content) {\n content.x = (container.width - content.width) / 2 || 0;\n },\n _right: function (container, content) {\n content.x = container.width - content.width;\n },\n _top: function (container, content) {\n content.y = container.y;\n },\n _middle: function (container, content) {\n content.y = (container.height - content.height) / 2 || 0;\n },\n _bottom: function (container, content) {\n content.y = container.height - content.height;\n },\n _stretch: function (container, content) {\n content.x = 0;\n content.y = 0;\n content.height = container.height;\n content.width = container.width;\n },\n _align: function (content, alignCalc) {\n content = Rect.toRect(content);\n alignCalc(this.container, content);\n return content;\n }\n });\n var Polar = Class.extend({\n init: function (r, a) {\n this.r = r;\n this.angle = a;\n }\n });\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n plus: function (m) {\n this.a += m.a;\n this.b += m.b;\n this.c += m.c;\n this.d += m.d;\n this.e += m.e;\n this.f += m.f;\n },\n minus: function (m) {\n this.a -= m.a;\n this.b -= m.b;\n this.c -= m.c;\n this.d -= m.d;\n this.e -= m.e;\n this.f -= m.f;\n },\n times: function (m) {\n return new Matrix(this.a * m.a + this.c * m.b, this.b * m.a + this.d * m.b, this.a * m.c + this.c * m.d, this.b * m.c + this.d * m.d, this.a * m.e + this.c * m.f + this.e, this.b * m.e + this.d * m.f + this.f);\n },\n apply: function (p) {\n return new Point(this.a * p.x + this.c * p.y + this.e, this.b * p.x + this.d * p.y + this.f);\n },\n applyRect: function (r) {\n return Rect.fromPoints(this.apply(r.topLeft()), this.apply(r.bottomRight()));\n },\n toString: function () {\n return 'matrix(' + this.a + ' ' + this.b + ' ' + this.c + ' ' + this.d + ' ' + this.e + ' ' + this.f + ')';\n }\n });\n deepExtend(Matrix, {\n fromSVGMatrix: function (vm) {\n var m = new Matrix();\n m.a = vm.a;\n m.b = vm.b;\n m.c = vm.c;\n m.d = vm.d;\n m.e = vm.e;\n m.f = vm.f;\n return m;\n },\n fromMatrixVector: function (v) {\n var m = new Matrix();\n m.a = v.a;\n m.b = v.b;\n m.c = v.c;\n m.d = v.d;\n m.e = v.e;\n m.f = v.f;\n return m;\n },\n fromList: function (v) {\n if (v.length !== 6) {\n throw 'The given list should consist of six elements.';\n }\n var m = new Matrix();\n m.a = v[0];\n m.b = v[1];\n m.c = v[2];\n m.d = v[3];\n m.e = v[4];\n m.f = v[5];\n return m;\n },\n translation: function (x, y) {\n var m = new Matrix();\n m.a = 1;\n m.b = 0;\n m.c = 0;\n m.d = 1;\n m.e = x;\n m.f = y;\n return m;\n },\n unit: function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n },\n rotation: function (angle, x, y) {\n var m = new Matrix();\n m.a = Math.cos(angle * Math.PI / 180);\n m.b = Math.sin(angle * Math.PI / 180);\n m.c = -m.b;\n m.d = m.a;\n m.e = x - x * m.a + y * m.b || 0;\n m.f = y - y * m.a - x * m.b || 0;\n return m;\n },\n scaling: function (scaleX, scaleY) {\n var m = new Matrix();\n m.a = scaleX;\n m.b = 0;\n m.c = 0;\n m.d = scaleY;\n m.e = 0;\n m.f = 0;\n return m;\n },\n parse: function (v) {\n var parts, nums;\n if (v) {\n v = v.trim();\n if (v.slice(0, 6).toLowerCase() === 'matrix') {\n nums = v.slice(7, v.length - 1).trim();\n parts = nums.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n parts = nums.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.slice(0, 1) === '(' && v.slice(v.length - 1) === ')') {\n v = v.substr(1, v.length - 1);\n }\n if (v.indexOf(',') > 0) {\n parts = v.split(',');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n if (v.indexOf(' ') > 0) {\n parts = v.split(' ');\n if (parts.length === 6) {\n return Matrix.fromList(map(parts, function (p) {\n return parseFloat(p);\n }));\n }\n }\n }\n return parts;\n }\n });\n var MatrixVector = Class.extend({\n init: function (a, b, c, d, e, f) {\n this.a = a || 0;\n this.b = b || 0;\n this.c = c || 0;\n this.d = d || 0;\n this.e = e || 0;\n this.f = f || 0;\n },\n fromMatrix: function FromMatrix(m) {\n var v = new MatrixVector();\n v.a = m.a;\n v.b = m.b;\n v.c = m.c;\n v.d = m.d;\n v.e = m.e;\n v.f = m.f;\n return v;\n }\n });\n function normalVariable(mean, deviation) {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);\n }\n function randomId(length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n var result = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n for (var i = length; i > 0; --i) {\n result += chars.charAt(Math.round(Math.random() * (chars.length - 1)));\n }\n return result;\n }\n var Geometry = {\n _distanceToLineSquared: function (p, a, b) {\n function d2(pt1, pt2) {\n return (pt1.x - pt2.x) * (pt1.x - pt2.x) + (pt1.y - pt2.y) * (pt1.y - pt2.y);\n }\n if (a === b) {\n return d2(p, a);\n }\n var vx = b.x - a.x, vy = b.y - a.y, dot = (p.x - a.x) * vx + (p.y - a.y) * vy;\n if (dot < 0) {\n return d2(a, p);\n }\n dot = (b.x - p.x) * vx + (b.y - p.y) * vy;\n if (dot < 0) {\n return d2(b, p);\n }\n dot = (b.x - p.x) * vy - (b.y - p.y) * vx;\n return dot * dot / (vx * vx + vy * vy);\n },\n distanceToLine: function (p, a, b) {\n return Math.sqrt(this._distanceToLineSquared(p, a, b));\n },\n distanceToPolyline: function (p, points) {\n var minimum = Number.MAX_VALUE;\n if (Utils.isUndefined(points) || points.length === 0) {\n return Number.MAX_VALUE;\n }\n for (var s = 0; s < points.length - 1; s++) {\n var p1 = points[s];\n var p2 = points[s + 1];\n var d = this._distanceToLineSquared(p, p1, p2);\n if (d < minimum) {\n minimum = d;\n }\n }\n return Math.sqrt(minimum);\n }\n };\n var HashTable = kendo.Class.extend({\n init: function () {\n this._buckets = [];\n this.length = 0;\n },\n add: function (key, value) {\n var obj = this._createGetBucket(key);\n if (Utils.isDefined(value)) {\n obj.value = value;\n }\n return obj;\n },\n get: function (key) {\n if (this._bucketExists(key)) {\n return this._createGetBucket(key);\n }\n return null;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n containsKey: function (key) {\n return this._bucketExists(key);\n },\n remove: function (key) {\n if (this._bucketExists(key)) {\n var hashId = this._hash(key);\n delete this._buckets[hashId];\n this.length--;\n return key;\n }\n },\n forEach: function (func) {\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n func(bucket);\n }\n },\n clone: function () {\n var ht = new HashTable();\n var hashes = this._hashes();\n for (var i = 0, len = hashes.length; i < len; i++) {\n var hash = hashes[i];\n var bucket = this._buckets[hash];\n if (Utils.isUndefined(bucket)) {\n continue;\n }\n ht.add(bucket.key, bucket.value);\n }\n return ht;\n },\n _hashes: function () {\n var hashes = [];\n for (var hash in this._buckets) {\n if (this._buckets.hasOwnProperty(hash)) {\n hashes.push(hash);\n }\n }\n return hashes;\n },\n _bucketExists: function (key) {\n var hashId = this._hash(key);\n return Utils.isDefined(this._buckets[hashId]);\n },\n _createGetBucket: function (key) {\n var hashId = this._hash(key);\n var bucket = this._buckets[hashId];\n if (Utils.isUndefined(bucket)) {\n bucket = { key: key };\n this._buckets[hashId] = bucket;\n this.length++;\n }\n return bucket;\n },\n _hash: function (key) {\n if (Utils.isNumber(key)) {\n return key;\n }\n if (Utils.isString(key)) {\n return this._hashString(key);\n }\n if (Utils.isObject(key)) {\n return this._objectHashId(key);\n }\n throw 'Unsupported key type.';\n },\n _hashString: function (s) {\n var result = 0;\n if (s.length === 0) {\n return result;\n }\n for (var i = 0; i < s.length; i++) {\n var ch = s.charCodeAt(i);\n result = result * 32 - result + ch;\n }\n return result;\n },\n _objectHashId: function (key) {\n var id = key._hashId;\n if (Utils.isUndefined(id)) {\n id = randomId();\n key._hashId = id;\n }\n return id;\n }\n });\n var Dictionary = kendo.Observable.extend({\n init: function (dictionary) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(dictionary)) {\n if ($.isArray(dictionary)) {\n for (var i = 0; i < dictionary.length; i++) {\n this.add(dictionary[i]);\n }\n } else {\n dictionary.forEach(function (k, v) {\n this.add(k, v);\n }, this);\n }\n }\n },\n add: function (key, value) {\n var entry = this._hashTable.get(key);\n if (!entry) {\n entry = this._hashTable.add(key);\n this.length++;\n this.trigger('changed');\n }\n entry.value = value;\n },\n set: function (key, value) {\n this.add(key, value);\n },\n get: function (key) {\n var entry = this._hashTable.get(key);\n if (entry) {\n return entry.value;\n }\n throw new Error('Cannot find key ' + key);\n },\n containsKey: function (key) {\n return this._hashTable.containsKey(key);\n },\n remove: function (key) {\n if (this.containsKey(key)) {\n this.trigger('changed');\n this.length--;\n return this._hashTable.remove(key);\n }\n },\n forEach: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key, entry.value);\n });\n },\n forEachValue: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.value);\n });\n },\n forEachKey: function (func, thisRef) {\n this._hashTable.forEach(function (entry) {\n func.call(thisRef, entry.key);\n });\n },\n keys: function () {\n var keys = [];\n this.forEachKey(function (key) {\n keys.push(key);\n });\n return keys;\n }\n });\n var Queue = kendo.Class.extend({\n init: function () {\n this._tail = null;\n this._head = null;\n this.length = 0;\n },\n enqueue: function (value) {\n var entry = {\n value: value,\n next: null\n };\n if (!this._head) {\n this._head = entry;\n this._tail = this._head;\n } else {\n this._tail.next = entry;\n this._tail = this._tail.next;\n }\n this.length++;\n },\n dequeue: function () {\n if (this.length < 1) {\n throw new Error('The queue is empty.');\n }\n var value = this._head.value;\n this._head = this._head.next;\n this.length--;\n return value;\n },\n contains: function (item) {\n var current = this._head;\n while (current) {\n if (current.value === item) {\n return true;\n }\n current = current.next;\n }\n return false;\n }\n });\n var Set = kendo.Observable.extend({\n init: function (resource) {\n var that = this;\n kendo.Observable.fn.init.call(that);\n this._hashTable = new HashTable();\n this.length = 0;\n if (Utils.isDefined(resource)) {\n if (resource instanceof HashTable) {\n resource.forEach(function (d) {\n this.add(d);\n });\n } else if (resource instanceof Dictionary) {\n resource.forEach(function (k, v) {\n this.add({\n key: k,\n value: v\n });\n }, this);\n }\n }\n },\n contains: function (item) {\n return this._hashTable.containsKey(item);\n },\n add: function (item) {\n var entry = this._hashTable.get(item);\n if (!entry) {\n this._hashTable.add(item, item);\n this.length++;\n this.trigger('changed');\n }\n },\n get: function (item) {\n if (this.contains(item)) {\n return this._hashTable.get(item).value;\n } else {\n return null;\n }\n },\n hash: function (item) {\n return this._hashTable._hash(item);\n },\n remove: function (item) {\n if (this.contains(item)) {\n this._hashTable.remove(item);\n this.length--;\n this.trigger('changed');\n }\n },\n forEach: function (func, context) {\n this._hashTable.forEach(function (kv) {\n func(kv.value);\n }, context);\n },\n toArray: function () {\n var r = [];\n this.forEach(function (d) {\n r.push(d);\n });\n return r;\n }\n });\n var Node = kendo.Class.extend({\n init: function (id, shape) {\n this.links = [];\n this.outgoing = [];\n this.incoming = [];\n this.weight = 1;\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(shape)) {\n this.associatedShape = shape;\n var b = shape.bounds();\n this.width = b.width;\n this.height = b.height;\n this.x = b.x;\n this.y = b.y;\n } else {\n this.associatedShape = null;\n }\n this.data = null;\n this.type = 'Node';\n this.shortForm = 'Node \\'' + this.id + '\\'';\n this.isVirtual = false;\n },\n isIsolated: function () {\n return Utils.isEmpty(this.links);\n },\n bounds: function (r) {\n if (!Utils.isDefined(r)) {\n return new diagram.Rect(this.x, this.y, this.width, this.height);\n }\n this.x = r.x;\n this.y = r.y;\n this.width = r.width;\n this.height = r.height;\n },\n isLinkedTo: function (node) {\n var that = this;\n return Utils.any(that.links, function (link) {\n return link.getComplement(that) === node;\n });\n },\n getChildren: function () {\n if (this.outgoing.length === 0) {\n return [];\n }\n var children = [];\n for (var i = 0, len = this.outgoing.length; i < len; i++) {\n var link = this.outgoing[i];\n children.push(link.getComplement(this));\n }\n return children;\n },\n getParents: function () {\n if (this.incoming.length === 0) {\n return [];\n }\n var parents = [];\n for (var i = 0, len = this.incoming.length; i < len; i++) {\n var link = this.incoming[i];\n parents.push(link.getComplement(this));\n }\n return parents;\n },\n clone: function () {\n var copy = new Node();\n if (Utils.isDefined(this.weight)) {\n copy.weight = this.weight;\n }\n if (Utils.isDefined(this.balance)) {\n copy.balance = this.balance;\n }\n if (Utils.isDefined(this.owner)) {\n copy.owner = this.owner;\n }\n copy.associatedShape = this.associatedShape;\n copy.x = this.x;\n copy.y = this.y;\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n },\n adjacentTo: function (node) {\n return this.isLinkedTo(node) !== null;\n },\n removeLink: function (link) {\n if (link.source === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.outgoing, link);\n link.source = null;\n }\n if (link.target === this) {\n Utils.remove(this.links, link);\n Utils.remove(this.incoming, link);\n link.target = null;\n }\n },\n hasLinkTo: function (node) {\n return Utils.any(this.outgoing, function (link) {\n return link.target === node;\n });\n },\n degree: function () {\n return this.links.length;\n },\n incidentWith: function (link) {\n return contains(this.links, link);\n },\n getLinksWith: function (node) {\n return Utils.all(this.links, function (link) {\n return link.getComplement(this) === node;\n }, this);\n },\n getNeighbors: function () {\n var neighbors = [];\n Utils.forEach(this.incoming, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n Utils.forEach(this.outgoing, function (e) {\n neighbors.push(e.getComplement(this));\n }, this);\n return neighbors;\n }\n });\n var Link = kendo.Class.extend({\n init: function (source, target, id, connection) {\n if (Utils.isUndefined(source)) {\n throw 'The source of the new link is not set.';\n }\n if (Utils.isUndefined(target)) {\n throw 'The target of the new link is not set.';\n }\n var sourceFound, targetFound;\n if (Utils.isString(source)) {\n sourceFound = new Node(source);\n } else {\n sourceFound = source;\n }\n if (Utils.isString(target)) {\n targetFound = new Node(target);\n } else {\n targetFound = target;\n }\n this.source = sourceFound;\n this.target = targetFound;\n this.source.links.push(this);\n this.target.links.push(this);\n this.source.outgoing.push(this);\n this.target.incoming.push(this);\n if (Utils.isDefined(id)) {\n this.id = id;\n } else {\n this.id = randomId();\n }\n if (Utils.isDefined(connection)) {\n this.associatedConnection = connection;\n } else {\n this.associatedConnection = null;\n }\n this.type = 'Link';\n this.shortForm = 'Link \\'' + this.source.id + '->' + this.target.id + '\\'';\n },\n getComplement: function (node) {\n if (this.source !== node && this.target !== node) {\n throw 'The given node is not incident with this link.';\n }\n return this.source === node ? this.target : this.source;\n },\n getCommonNode: function (link) {\n if (this.source === link.source || this.source === link.target) {\n return this.source;\n }\n if (this.target === link.source || this.target === link.target) {\n return this.target;\n }\n return null;\n },\n isBridging: function (v1, v2) {\n return this.source === v1 && this.target === v2 || this.source === v2 && this.target === v1;\n },\n getNodes: function () {\n return [\n this.source,\n this.target\n ];\n },\n incidentWith: function (node) {\n return this.source === node || this.target === node;\n },\n adjacentTo: function (link) {\n return contains(this.source.links, link) || contains(this.target.links, link);\n },\n changeSource: function (node) {\n Utils.remove(this.source.links, this);\n Utils.remove(this.source.outgoing, this);\n node.links.push(this);\n node.outgoing.push(this);\n this.source = node;\n },\n changeTarget: function (node) {\n Utils.remove(this.target.links, this);\n Utils.remove(this.target.incoming, this);\n node.links.push(this);\n node.incoming.push(this);\n this.target = node;\n },\n changesNodes: function (v, w) {\n if (this.source === v) {\n this.changeSource(w);\n } else if (this.target === v) {\n this.changeTarget(w);\n }\n },\n reverse: function () {\n var oldSource = this.source;\n var oldTarget = this.target;\n this.source = oldTarget;\n Utils.remove(oldSource.outgoing, this);\n this.source.outgoing.push(this);\n this.target = oldSource;\n Utils.remove(oldTarget.incoming, this);\n this.target.incoming.push(this);\n return this;\n },\n directTo: function (target) {\n if (this.source !== target && this.target !== target) {\n throw 'The given node is not incident with this link.';\n }\n if (this.target !== target) {\n this.reverse();\n }\n },\n createReverseEdge: function () {\n var r = this.clone();\n r.reverse();\n r.reversed = true;\n return r;\n },\n clone: function () {\n var clone = new Link(this.source, this.target);\n return clone;\n }\n });\n var Graph = kendo.Class.extend({\n init: function (idOrDiagram) {\n this.links = [];\n this.nodes = [];\n this._nodeMap = new Dictionary();\n this.diagram = null;\n this._root = null;\n if (Utils.isDefined(idOrDiagram)) {\n if (Utils.isString(idOrDiagram)) {\n this.id = idOrDiagram;\n } else {\n this.diagram = idOrDiagram;\n this.id = idOrDiagram.id;\n }\n } else {\n this.id = randomId();\n }\n this.bounds = new Rect();\n this._hasCachedRelationships = false;\n this.type = 'Graph';\n },\n cacheRelationships: function (forceRebuild) {\n if (Utils.isUndefined(forceRebuild)) {\n forceRebuild = false;\n }\n if (this._hasCachedRelationships && !forceRebuild) {\n return;\n }\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n node.children = this.getChildren(node);\n node.parents = this.getParents(node);\n }\n this._hasCachedRelationships = true;\n },\n assignLevels: function (startNode, offset, visited) {\n if (!startNode) {\n throw 'Start node not specified.';\n }\n if (Utils.isUndefined(offset)) {\n offset = 0;\n }\n this.cacheRelationships();\n if (Utils.isUndefined(visited)) {\n visited = new Dictionary();\n Utils.forEach(this.nodes, function (n) {\n visited.add(n, false);\n });\n }\n visited.set(startNode, true);\n startNode.level = offset;\n var children = startNode.children;\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (!child || visited.get(child)) {\n continue;\n }\n this.assignLevels(child, offset + 1, visited);\n }\n },\n root: function (value) {\n if (Utils.isUndefined(value)) {\n if (!this._root) {\n var found = Utils.first(this.nodes, function (n) {\n return n.incoming.length === 0;\n });\n if (found) {\n return found;\n }\n return Utils.first(this.nodes);\n } else {\n return this._root;\n }\n } else {\n this._root = value;\n }\n },\n getConnectedComponents: function () {\n this.componentIndex = 0;\n this.setItemIndices();\n var componentId = Utils.initArray(this.nodes.length, -1);\n for (var v = 0; v < this.nodes.length; v++) {\n if (componentId[v] === -1) {\n this._collectConnectedNodes(componentId, v);\n this.componentIndex++;\n }\n }\n var components = [], i;\n for (i = 0; i < this.componentIndex; ++i) {\n components[i] = new Graph();\n }\n for (i = 0; i < componentId.length; ++i) {\n var graph = components[componentId[i]];\n graph.addNodeAndOutgoings(this.nodes[i]);\n }\n components.sort(function (a, b) {\n return b.nodes.length - a.nodes.length;\n });\n return components;\n },\n _collectConnectedNodes: function (setIds, nodeIndex) {\n setIds[nodeIndex] = this.componentIndex;\n var node = this.nodes[nodeIndex];\n Utils.forEach(node.links, function (link) {\n var next = link.getComplement(node);\n var nextId = next.index;\n if (setIds[nextId] === -1) {\n this._collectConnectedNodes(setIds, nextId);\n }\n }, this);\n },\n calcBounds: function () {\n if (this.isEmpty()) {\n this.bounds = new Rect();\n return this.bounds;\n }\n var b = null;\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (!b) {\n b = node.bounds();\n } else {\n b = b.union(node.bounds());\n }\n }\n this.bounds = b;\n return this.bounds;\n },\n getSpanningTree: function (root) {\n var tree = new Graph();\n var map = new Dictionary(), source, target;\n tree.root = root.clone();\n tree.root.level = 0;\n tree.root.id = root.id;\n map.add(root, tree.root);\n root.level = 0;\n var visited = [];\n var remaining = [];\n tree._addNode(tree.root);\n visited.push(root);\n remaining.push(root);\n var levelCount = 1;\n while (remaining.length > 0) {\n var next = remaining.pop();\n for (var ni = 0; ni < next.links.length; ni++) {\n var link = next.links[ni];\n var cn = link.getComplement(next);\n if (contains(visited, cn)) {\n continue;\n }\n cn.level = next.level + 1;\n if (levelCount < cn.level + 1) {\n levelCount = cn.level + 1;\n }\n if (!contains(remaining, cn)) {\n remaining.push(cn);\n }\n if (!contains(visited, cn)) {\n visited.push(cn);\n }\n if (map.containsKey(next)) {\n source = map.get(next);\n } else {\n source = next.clone();\n source.level = next.level;\n source.id = next.id;\n map.add(next, source);\n }\n if (map.containsKey(cn)) {\n target = map.get(cn);\n } else {\n target = cn.clone();\n target.level = cn.level;\n target.id = cn.id;\n map.add(cn, target);\n }\n var newLink = new Link(source, target);\n tree.addLink(newLink);\n }\n }\n var treeLevels = [];\n for (var i = 0; i < levelCount; i++) {\n treeLevels.push([]);\n }\n Utils.forEach(tree.nodes, function (node) {\n treeLevels[node.level].push(node);\n });\n tree.treeLevels = treeLevels;\n tree.cacheRelationships();\n return tree;\n },\n takeRandomNode: function (excludedNodes, incidenceLessThan) {\n if (Utils.isUndefined(excludedNodes)) {\n excludedNodes = [];\n }\n if (Utils.isUndefined(incidenceLessThan)) {\n incidenceLessThan = 4;\n }\n if (this.nodes.length === 0) {\n return null;\n }\n if (this.nodes.length === 1) {\n return contains(excludedNodes, this.nodes[0]) ? null : this.nodes[0];\n }\n var pool = $.grep(this.nodes, function (node) {\n return !contains(excludedNodes, node) && node.degree() <= incidenceLessThan;\n });\n if (Utils.isEmpty(pool)) {\n return null;\n }\n return pool[Utils.randomInteger(0, pool.length)];\n },\n isEmpty: function () {\n return Utils.isEmpty(this.nodes);\n },\n isHealthy: function () {\n return Utils.all(this.links, function (link) {\n return contains(this.nodes, link.source) && contains(this.nodes, link.target);\n }, this);\n },\n getParents: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getParents();\n },\n getChildren: function (n) {\n if (!this.hasNode(n)) {\n throw 'The given node is not part of this graph.';\n }\n return n.getChildren();\n },\n addLink: function (sourceOrLink, target, owner) {\n if (Utils.isUndefined(sourceOrLink)) {\n throw 'The source of the link is not defined.';\n }\n if (Utils.isUndefined(target)) {\n if (Utils.isDefined(sourceOrLink.type) && sourceOrLink.type === 'Link') {\n this.addExistingLink(sourceOrLink);\n return;\n } else {\n throw 'The target of the link is not defined.';\n }\n }\n var foundSource = this.getNode(sourceOrLink);\n if (Utils.isUndefined(foundSource)) {\n foundSource = this.addNode(sourceOrLink);\n }\n var foundTarget = this.getNode(target);\n if (Utils.isUndefined(foundTarget)) {\n foundTarget = this.addNode(target);\n }\n var newLink = new Link(foundSource, foundTarget);\n if (Utils.isDefined(owner)) {\n newLink.owner = owner;\n }\n this.links.push(newLink);\n return newLink;\n },\n removeAllLinks: function () {\n while (this.links.length > 0) {\n var link = this.links[0];\n this.removeLink(link);\n }\n },\n addExistingLink: function (link) {\n if (this.hasLink(link)) {\n return;\n }\n this.links.push(link);\n if (this.hasNode(link.source.id)) {\n var s = this.getNode(link.source.id);\n link.changeSource(s);\n } else {\n this.addNode(link.source);\n }\n if (this.hasNode(link.target.id)) {\n var t = this.getNode(link.target.id);\n link.changeTarget(t);\n } else {\n this.addNode(link.target);\n }\n },\n hasLink: function (linkOrId) {\n if (Utils.isString(linkOrId)) {\n return Utils.any(this.links, function (link) {\n return link.id === linkOrId;\n });\n }\n if (linkOrId.type === 'Link') {\n return contains(this.links, linkOrId);\n }\n throw 'The given object is neither an identifier nor a Link.';\n },\n getNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n if (this._nodeMap.containsKey(id)) {\n return this._nodeMap.get(id);\n }\n },\n hasNode: function (nodeOrId) {\n var id = nodeOrId.id || nodeOrId;\n return this._nodeMap.containsKey(id);\n },\n _addNode: function (node) {\n this.nodes.push(node);\n this._nodeMap.add(node.id, node);\n },\n _removeNode: function (node) {\n Utils.remove(this.nodes, node);\n this._nodeMap.remove(node.id);\n },\n removeNode: function (nodeOrId) {\n var n = nodeOrId;\n if (Utils.isString(nodeOrId)) {\n n = this.getNode(nodeOrId);\n }\n if (Utils.isDefined(n)) {\n var links = n.links;\n n.links = [];\n for (var i = 0, len = links.length; i < len; i++) {\n var link = links[i];\n this.removeLink(link);\n }\n this._removeNode(n);\n } else {\n throw 'The identifier should be a Node or the Id (string) of a node.';\n }\n },\n areConnected: function (n1, n2) {\n return Utils.any(this.links, function (link) {\n return link.source == n1 && link.target == n2 || link.source == n2 && link.target == n1;\n });\n },\n removeLink: function (link) {\n Utils.remove(this.links, link);\n Utils.remove(link.source.outgoing, link);\n Utils.remove(link.source.links, link);\n Utils.remove(link.target.incoming, link);\n Utils.remove(link.target.links, link);\n },\n addNode: function (nodeOrId, layoutRect, owner) {\n var newNode = null;\n if (!Utils.isDefined(nodeOrId)) {\n throw 'No Node or identifier for a new Node is given.';\n }\n if (Utils.isString(nodeOrId)) {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = new Node(nodeOrId);\n } else {\n if (this.hasNode(nodeOrId)) {\n return this.getNode(nodeOrId);\n }\n newNode = nodeOrId;\n }\n if (Utils.isDefined(layoutRect)) {\n newNode.bounds(layoutRect);\n }\n if (Utils.isDefined(owner)) {\n newNode.owner = owner;\n }\n this._addNode(newNode);\n return newNode;\n },\n addNodeAndOutgoings: function (node) {\n if (!this.hasNode(node)) {\n this._addNode(node);\n }\n var newLinks = node.outgoing;\n node.outgoing = [];\n Utils.forEach(newLinks, function (link) {\n this.addExistingLink(link);\n }, this);\n },\n setItemIndices: function () {\n var i;\n for (i = 0; i < this.nodes.length; ++i) {\n this.nodes[i].index = i;\n }\n for (i = 0; i < this.links.length; ++i) {\n this.links[i].index = i;\n }\n },\n clone: function (saveMapping) {\n var copy = new Graph();\n var save = Utils.isDefined(saveMapping) && saveMapping === true;\n if (save) {\n copy.nodeMap = new Dictionary();\n copy.linkMap = new Dictionary();\n }\n var map = new Dictionary();\n Utils.forEach(this.nodes, function (nOriginal) {\n var nCopy = nOriginal.clone();\n map.set(nOriginal, nCopy);\n copy._addNode(nCopy);\n if (save) {\n copy.nodeMap.set(nCopy, nOriginal);\n }\n });\n Utils.forEach(this.links, function (linkOriginal) {\n if (map.containsKey(linkOriginal.source) && map.containsKey(linkOriginal.target)) {\n var linkCopy = copy.addLink(map.get(linkOriginal.source), map.get(linkOriginal.target));\n if (save) {\n copy.linkMap.set(linkCopy, linkOriginal);\n }\n }\n });\n return copy;\n },\n linearize: function (addIds) {\n return Graph.Utils.linearize(this, addIds);\n },\n depthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var visited = [];\n this._dftIterator(foundNode, action, visited);\n },\n _dftIterator: function (node, action, visited) {\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child)) {\n continue;\n }\n this._dftIterator(child, action, visited);\n }\n },\n breadthFirstTraversal: function (startNode, action) {\n if (Utils.isUndefined(startNode)) {\n throw 'You need to supply a starting node.';\n }\n if (Utils.isUndefined(action)) {\n throw 'You need to supply an action.';\n }\n if (!this.hasNode(startNode)) {\n throw 'The given start-node is not part of this graph';\n }\n var foundNode = this.getNode(startNode);\n var queue = new Queue();\n var visited = [];\n queue.enqueue(foundNode);\n while (queue.length > 0) {\n var node = queue.dequeue();\n action(node);\n visited.push(node);\n var children = node.getChildren();\n for (var i = 0, len = children.length; i < len; i++) {\n var child = children[i];\n if (contains(visited, child) || contains(queue, child)) {\n continue;\n }\n queue.enqueue(child);\n }\n }\n },\n _stronglyConnectedComponents: function (excludeSingleItems, node, indices, lowLinks, connected, stack, index) {\n indices.add(node, index);\n lowLinks.add(node, index);\n index++;\n stack.push(node);\n var children = node.getChildren(), next;\n for (var i = 0, len = children.length; i < len; i++) {\n next = children[i];\n if (!indices.containsKey(next)) {\n this._stronglyConnectedComponents(excludeSingleItems, next, indices, lowLinks, connected, stack, index);\n lowLinks.add(node, Math.min(lowLinks.get(node), lowLinks.get(next)));\n } else if (contains(stack, next)) {\n lowLinks.add(node, Math.min(lowLinks.get(node), indices.get(next)));\n }\n }\n if (lowLinks.get(node) === indices.get(node)) {\n var component = [];\n do {\n next = stack.pop();\n component.push(next);\n } while (next !== node);\n if (!excludeSingleItems || component.length > 1) {\n connected.push(component);\n }\n }\n },\n findCycles: function (excludeSingleItems) {\n if (Utils.isUndefined(excludeSingleItems)) {\n excludeSingleItems = true;\n }\n var indices = new Dictionary();\n var lowLinks = new Dictionary();\n var connected = [];\n var stack = [];\n for (var i = 0, len = this.nodes.length; i < len; i++) {\n var node = this.nodes[i];\n if (indices.containsKey(node)) {\n continue;\n }\n this._stronglyConnectedComponents(excludeSingleItems, node, indices, lowLinks, connected, stack, 0);\n }\n return connected;\n },\n isAcyclic: function () {\n return Utils.isEmpty(this.findCycles());\n },\n isSubGraph: function (other) {\n var otherArray = other.linearize();\n var thisArray = this.linearize();\n return Utils.all(otherArray, function (s) {\n return contains(thisArray, s);\n });\n },\n makeAcyclic: function () {\n if (this.isEmpty() || this.nodes.length <= 1 || this.links.length <= 1) {\n return [];\n }\n if (this.nodes.length == 2) {\n var result = [];\n if (this.links.length > 1) {\n var oneLink = this.links[0];\n var oneNode = oneLink.source;\n for (var i = 0, len = this.links.length; i < len; i++) {\n var link = this.links[i];\n if (link.source == oneNode) {\n continue;\n }\n var rev = link.reverse();\n result.push(rev);\n }\n }\n return result;\n }\n var copy = this.clone(true);\n var N = this.nodes.length;\n var intensityCatalog = new Dictionary();\n var flowIntensity = function (node) {\n if (node.outgoing.length === 0) {\n return 2 - N;\n } else if (node.incoming.length === 0) {\n return N - 2;\n } else {\n return node.outgoing.length - node.incoming.length;\n }\n };\n var catalogEqualIntensity = function (node, intensityCatalog) {\n var intensity = flowIntensity(node, N);\n if (!intensityCatalog.containsKey(intensity)) {\n intensityCatalog.set(intensity, []);\n }\n intensityCatalog.get(intensity).push(node);\n };\n Utils.forEach(copy.nodes, function (v) {\n catalogEqualIntensity(v, intensityCatalog);\n });\n var sourceStack = [];\n var targetStack = [];\n while (copy.nodes.length > 0) {\n var source, target, intensity;\n if (intensityCatalog.containsKey(2 - N)) {\n var targets = intensityCatalog.get(2 - N);\n while (targets.length > 0) {\n target = targets.pop();\n for (var li = 0; li < target.links.length; li++) {\n var targetLink = target.links[li];\n source = targetLink.getComplement(target);\n intensity = flowIntensity(source, N);\n Utils.remove(intensityCatalog.get(intensity), source);\n source.removeLink(targetLink);\n catalogEqualIntensity(source, intensityCatalog);\n }\n copy._removeNode(target);\n targetStack.unshift(target);\n }\n }\n if (intensityCatalog.containsKey(N - 2)) {\n var sources = intensityCatalog.get(N - 2);\n while (sources.length > 0) {\n source = sources.pop();\n for (var si = 0; si < source.links.length; si++) {\n var sourceLink = source.links[si];\n target = sourceLink.getComplement(source);\n intensity = flowIntensity(target, N);\n Utils.remove(intensityCatalog.get(intensity), target);\n target.removeLink(sourceLink);\n catalogEqualIntensity(target, intensityCatalog);\n }\n sourceStack.push(source);\n copy._removeNode(source);\n }\n }\n if (copy.nodes.length > 0) {\n for (var k = N - 3; k > 2 - N; k--) {\n if (intensityCatalog.containsKey(k) && intensityCatalog.get(k).length > 0) {\n var maxdiff = intensityCatalog.get(k);\n var v = maxdiff.pop();\n for (var ri = 0; ri < v.links.length; ri++) {\n var ril = v.links[ri];\n var u = ril.getComplement(v);\n intensity = flowIntensity(u, N);\n Utils.remove(intensityCatalog.get(intensity), u);\n u.removeLink(ril);\n catalogEqualIntensity(u, intensityCatalog);\n }\n sourceStack.push(v);\n copy._removeNode(v);\n break;\n }\n }\n }\n }\n sourceStack = sourceStack.concat(targetStack);\n var vertexOrder = new Dictionary();\n for (var kk = 0; kk < this.nodes.length; kk++) {\n vertexOrder.set(copy.nodeMap.get(sourceStack[kk]), kk);\n }\n var reversedEdges = [];\n Utils.forEach(this.links, function (link) {\n if (vertexOrder.get(link.source) > vertexOrder.get(link.target)) {\n link.reverse();\n reversedEdges.push(link);\n }\n });\n return reversedEdges;\n }\n });\n Graph.Predefined = {\n EightGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->4',\n '4->1',\n '3->5',\n '5->6',\n '6->7',\n '7->3'\n ]);\n },\n Mindmap: function () {\n return Graph.Utils.parse([\n '0->1',\n '0->2',\n '0->3',\n '0->4',\n '0->5',\n '1->6',\n '1->7',\n '7->8',\n '2->9',\n '9->10',\n '9->11',\n '3->12',\n '12->13',\n '13->14',\n '4->15',\n '4->16',\n '15->17',\n '15->18',\n '18->19',\n '18->20',\n '14->21',\n '14->22',\n '5->23',\n '23->24',\n '23->25',\n '6->26'\n ]);\n },\n ThreeGraph: function () {\n return Graph.Utils.parse([\n '1->2',\n '2->3',\n '3->1'\n ]);\n },\n BinaryTree: function (levels) {\n if (Utils.isUndefined(levels)) {\n levels = 5;\n }\n return Graph.Utils.createBalancedTree(levels, 2);\n },\n Linear: function (length) {\n if (Utils.isUndefined(length)) {\n length = 10;\n }\n return Graph.Utils.createBalancedTree(length, 1);\n },\n Tree: function (levels, siblingsCount) {\n return Graph.Utils.createBalancedTree(levels, siblingsCount);\n },\n Forest: function (levels, siblingsCount, trees) {\n return Graph.Utils.createBalancedForest(levels, siblingsCount, trees);\n },\n Workflow: function () {\n return Graph.Utils.parse([\n '0->1',\n '1->2',\n '2->3',\n '1->4',\n '4->3',\n '3->5',\n '5->6',\n '6->3',\n '6->7',\n '5->4'\n ]);\n },\n Grid: function (n, m) {\n var g = new diagram.Graph();\n if (n <= 0 && m <= 0) {\n return g;\n }\n for (var i = 0; i < n + 1; i++) {\n var previous = null;\n for (var j = 0; j < m + 1; j++) {\n var node = new Node(i.toString() + '.' + j.toString());\n g.addNode(node);\n if (previous) {\n g.addLink(previous, node);\n }\n if (i > 0) {\n var left = g.getNode((i - 1).toString() + '.' + j.toString());\n g.addLink(left, node);\n }\n previous = node;\n }\n }\n return g;\n }\n };\n Graph.Utils = {\n parse: function (graphString) {\n var previousLink, graph = new diagram.Graph(), parts = graphString.slice();\n for (var i = 0, len = parts.length; i < len; i++) {\n var part = parts[i];\n if (Utils.isString(part)) {\n if (part.indexOf('->') < 0) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n var p = part.split('->');\n if (p.length != 2) {\n throw 'The link should be specified as \\'a->b\\'.';\n }\n previousLink = new Link(p[0], p[1]);\n graph.addLink(previousLink);\n }\n if (Utils.isObject(part)) {\n if (!previousLink) {\n throw 'Specification found before Link definition.';\n }\n kendo.deepExtend(previousLink, part);\n }\n }\n return graph;\n },\n linearize: function (graph, addIds) {\n if (Utils.isUndefined(graph)) {\n throw 'Expected an instance of a Graph object in slot one.';\n }\n if (Utils.isUndefined(addIds)) {\n addIds = false;\n }\n var lin = [];\n for (var i = 0, len = graph.links.length; i < len; i++) {\n var link = graph.links[i];\n lin.push(link.source.id + '->' + link.target.id);\n if (addIds) {\n lin.push({ id: link.id });\n }\n }\n return lin;\n },\n _addShape: function (kendoDiagram, p, id, shapeDefaults) {\n if (Utils.isUndefined(p)) {\n p = new diagram.Point(0, 0);\n }\n if (Utils.isUndefined(id)) {\n id = randomId();\n }\n shapeDefaults = kendo.deepExtend({\n width: 20,\n height: 20,\n id: id,\n radius: 10,\n fill: '#778899',\n data: 'circle',\n undoable: false,\n x: p.x,\n y: p.y\n }, shapeDefaults);\n return kendoDiagram.addShape(shapeDefaults);\n },\n _addConnection: function (diagram, from, to, options) {\n return diagram.connect(from, to, options);\n },\n createDiagramFromGraph: function (diagram, graph, doLayout, randomSize) {\n if (Utils.isUndefined(diagram)) {\n throw 'The diagram surface is undefined.';\n }\n if (Utils.isUndefined(graph)) {\n throw 'No graph specification defined.';\n }\n if (Utils.isUndefined(doLayout)) {\n doLayout = true;\n }\n if (Utils.isUndefined(randomSize)) {\n randomSize = false;\n }\n var width = diagram.element.clientWidth || 200;\n var height = diagram.element.clientHeight || 200;\n var map = [], node, shape;\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n node = graph.nodes[i];\n var p = node.position;\n if (Utils.isUndefined(p)) {\n if (Utils.isDefined(node.x) && Utils.isDefined(node.y)) {\n p = new Point(node.x, node.y);\n } else {\n p = new Point(Utils.randomInteger(10, width - 20), Utils.randomInteger(10, height - 20));\n }\n }\n var opt = {};\n if (node.id === '0') {\n } else if (randomSize) {\n kendo.deepExtend(opt, {\n width: Math.random() * 150 + 20,\n height: Math.random() * 80 + 50,\n data: 'rectangle',\n fill: { color: '#778899' }\n });\n }\n shape = this._addShape(diagram, p, node.id, opt);\n var bounds = shape.bounds();\n if (Utils.isDefined(bounds)) {\n node.x = bounds.x;\n node.y = bounds.y;\n node.width = bounds.width;\n node.height = bounds.height;\n }\n map[node.id] = shape;\n }\n for (var gli = 0; gli < graph.links.length; gli++) {\n var link = graph.links[gli];\n var sourceShape = map[link.source.id];\n if (Utils.isUndefined(sourceShape)) {\n continue;\n }\n var targetShape = map[link.target.id];\n if (Utils.isUndefined(targetShape)) {\n continue;\n }\n this._addConnection(diagram, sourceShape, targetShape, { id: link.id });\n }\n if (doLayout) {\n var l = new diagram.SpringLayout(diagram);\n l.layoutGraph(graph, { limitToView: false });\n for (var shi = 0; shi < graph.nodes.length; shi++) {\n node = graph.nodes[shi];\n shape = map[node.id];\n shape.bounds(new Rect(node.x, node.y, node.width, node.height));\n }\n }\n },\n createBalancedTree: function (levels, siblingsCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n g.root = root;\n lastAdded.push(root);\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n return g;\n },\n createBalancedForest: function (levels, siblingsCount, treeCount) {\n if (Utils.isUndefined(levels)) {\n levels = 3;\n }\n if (Utils.isUndefined(siblingsCount)) {\n siblingsCount = 3;\n }\n if (Utils.isUndefined(treeCount)) {\n treeCount = 5;\n }\n var g = new diagram.Graph(), counter = -1, lastAdded = [], news;\n if (levels <= 0 || siblingsCount <= 0 || treeCount <= 0) {\n return g;\n }\n for (var t = 0; t < treeCount; t++) {\n var root = new Node((++counter).toString());\n g.addNode(root);\n lastAdded = [root];\n for (var i = 0; i < levels; i++) {\n news = [];\n for (var j = 0; j < lastAdded.length; j++) {\n var parent = lastAdded[j];\n for (var k = 0; k < siblingsCount; k++) {\n var item = new Node((++counter).toString());\n g.addLink(parent, item);\n news.push(item);\n }\n }\n lastAdded = news;\n }\n }\n return g;\n },\n createRandomConnectedGraph: function (nodeCount, maxIncidence, isTree) {\n if (Utils.isUndefined(nodeCount)) {\n nodeCount = 40;\n }\n if (Utils.isUndefined(maxIncidence)) {\n maxIncidence = 4;\n }\n if (Utils.isUndefined(isTree)) {\n isTree = false;\n }\n var g = new diagram.Graph(), counter = -1;\n if (nodeCount <= 0) {\n return g;\n }\n var root = new Node((++counter).toString());\n g.addNode(root);\n if (nodeCount === 1) {\n return g;\n }\n if (nodeCount > 1) {\n for (var i = 1; i < nodeCount; i++) {\n var poolNode = g.takeRandomNode([], maxIncidence);\n if (!poolNode) {\n break;\n }\n var newNode = g.addNode(i.toString());\n g.addLink(poolNode, newNode);\n }\n if (!isTree && nodeCount > 1) {\n var randomAdditions = Utils.randomInteger(1, nodeCount);\n for (var ri = 0; ri < randomAdditions; ri++) {\n var n1 = g.takeRandomNode([], maxIncidence);\n var n2 = g.takeRandomNode([], maxIncidence);\n if (n1 && n2 && !g.areConnected(n1, n2)) {\n g.addLink(n1, n2);\n }\n }\n }\n return g;\n }\n },\n randomDiagram: function (diagram, shapeCount, maxIncidence, isTree, randomSize) {\n var g = kendo.dataviz.diagram.Graph.Utils.createRandomConnectedGraph(shapeCount, maxIncidence, isTree);\n Graph.Utils.createDiagramFromGraph(diagram, g, false, randomSize);\n }\n };\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n Point: Point,\n Intersect: Intersect,\n Geometry: Geometry,\n Rect: Rect,\n Size: Size,\n RectAlign: RectAlign,\n Matrix: Matrix,\n MatrixVector: MatrixVector,\n normalVariable: normalVariable,\n randomId: randomId,\n Dictionary: Dictionary,\n HashTable: HashTable,\n Queue: Queue,\n Set: Set,\n Node: Node,\n Link: Link,\n Graph: Graph,\n PathDefiner: PathDefiner\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/svg', [\n 'kendo.drawing',\n 'dataviz/diagram/math'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Class = kendo.Class, deepExtend = kendo.deepExtend, Point = diagram.Point, Rect = diagram.Rect, Matrix = diagram.Matrix, Utils = diagram.Utils, isNumber = Utils.isNumber, isString = Utils.isString, MatrixVector = diagram.MatrixVector, g = kendo.geometry, d = kendo.drawing, defined = d.util.defined, inArray = $.inArray;\n var TRANSPARENT = 'transparent', Markers = {\n none: 'none',\n arrowStart: 'ArrowStart',\n filledCircle: 'FilledCircle',\n arrowEnd: 'ArrowEnd'\n }, FULL_CIRCLE_ANGLE = 360, START = 'start', END = 'end', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y';\n diagram.Markers = Markers;\n function diffNumericOptions(options, fields) {\n var elementOptions = this.options;\n var hasChanges = false;\n var value, field;\n for (var i = 0; i < fields.length; i++) {\n field = fields[i];\n value = options[field];\n if (isNumber(value) && elementOptions[field] !== value) {\n elementOptions[field] = value;\n hasChanges = true;\n }\n }\n return hasChanges;\n }\n var Scale = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrix: function () {\n return Matrix.scaling(this.x, this.y);\n },\n toString: function () {\n return kendo.format('scale({0},{1})', this.x, this.y);\n },\n invert: function () {\n return new Scale(1 / this.x, 1 / this.y);\n }\n });\n var Translation = Class.extend({\n init: function (x, y) {\n this.x = x;\n this.y = y;\n },\n toMatrixVector: function () {\n return new MatrixVector(0, 0, 0, 0, this.x, this.y);\n },\n toMatrix: function () {\n return Matrix.translation(this.x, this.y);\n },\n toString: function () {\n return kendo.format('translate({0},{1})', this.x, this.y);\n },\n plus: function (delta) {\n this.x += delta.x;\n this.y += delta.y;\n },\n times: function (factor) {\n this.x *= factor;\n this.y *= factor;\n },\n length: function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n normalize: function () {\n if (this.Length === 0) {\n return;\n }\n this.times(1 / this.length());\n },\n invert: function () {\n return new Translation(-this.x, -this.y);\n }\n });\n var Rotation = Class.extend({\n init: function (angle, x, y) {\n this.x = x || 0;\n this.y = y || 0;\n this.angle = angle;\n },\n toString: function () {\n if (this.x && this.y) {\n return kendo.format('rotate({0},{1},{2})', this.angle, this.x, this.y);\n } else {\n return kendo.format('rotate({0})', this.angle);\n }\n },\n toMatrix: function () {\n return Matrix.rotation(this.angle, this.x, this.y);\n },\n center: function () {\n return new Point(this.x, this.y);\n },\n invert: function () {\n return new Rotation(FULL_CIRCLE_ANGLE - this.angle, this.x, this.y);\n }\n });\n Rotation.ZERO = new Rotation(0);\n Rotation.create = function (rotation) {\n return new Rotation(rotation.angle, rotation.x, rotation.y);\n };\n Rotation.parse = function (str) {\n var values = str.slice(1, str.length - 1).split(','), angle = values[0], x = values[1], y = values[2];\n var rotation = new Rotation(angle, x, y);\n return rotation;\n };\n var CompositeTransform = Class.extend({\n init: function (x, y, scaleX, scaleY, angle, center) {\n this.translate = new Translation(x, y);\n if (scaleX !== undefined && scaleY !== undefined) {\n this.scale = new Scale(scaleX, scaleY);\n }\n if (angle !== undefined) {\n this.rotate = center ? new Rotation(angle, center.x, center.y) : new Rotation(angle);\n }\n },\n toString: function () {\n var toString = function (transform) {\n return transform ? transform.toString() : '';\n };\n return toString(this.translate) + toString(this.rotate) + toString(this.scale);\n },\n render: function (visual) {\n visual._transform = this;\n visual._renderTransform();\n },\n toMatrix: function () {\n var m = Matrix.unit();\n if (this.translate) {\n m = m.times(this.translate.toMatrix());\n }\n if (this.rotate) {\n m = m.times(this.rotate.toMatrix());\n }\n if (this.scale) {\n m = m.times(this.scale.toMatrix());\n }\n return m;\n },\n invert: function () {\n var rotate = this.rotate ? this.rotate.invert() : undefined, rotateMatrix = rotate ? rotate.toMatrix() : Matrix.unit(), scale = this.scale ? this.scale.invert() : undefined, scaleMatrix = scale ? scale.toMatrix() : Matrix.unit();\n var translatePoint = new Point(-this.translate.x, -this.translate.y);\n translatePoint = rotateMatrix.times(scaleMatrix).apply(translatePoint);\n var translate = new Translation(translatePoint.x, translatePoint.y);\n var transform = new CompositeTransform();\n transform.translate = translate;\n transform.rotate = rotate;\n transform.scale = scale;\n return transform;\n }\n });\n var AutoSizeableMixin = {\n _setScale: function () {\n var options = this.options;\n var originWidth = this._originWidth;\n var originHeight = this._originHeight;\n var scaleX = options.width / originWidth;\n var scaleY = options.height / originHeight;\n if (!isNumber(scaleX)) {\n scaleX = 1;\n }\n if (!isNumber(scaleY)) {\n scaleY = 1;\n }\n this._transform.scale = new Scale(scaleX, scaleY);\n },\n _setTranslate: function () {\n var options = this.options;\n var x = options.x || 0;\n var y = options.y || 0;\n this._transform.translate = new Translation(x, y);\n },\n _initSize: function () {\n var options = this.options;\n var transform = false;\n if (options.autoSize !== false && (defined(options.width) || defined(options.height))) {\n this._measure(true);\n this._setScale();\n transform = true;\n }\n if (defined(options.x) || defined(options.y)) {\n this._setTranslate();\n transform = true;\n }\n if (transform) {\n this._renderTransform();\n }\n },\n _updateSize: function (options) {\n var update = false;\n if (this.options.autoSize !== false && this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n update = true;\n this._measure(true);\n this._setScale();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n update = true;\n this._setTranslate();\n }\n if (update) {\n this._renderTransform();\n }\n return update;\n }\n };\n var Element = Class.extend({\n init: function (options) {\n var element = this;\n element.options = deepExtend({}, element.options, options);\n element.id = element.options.id;\n element._originSize = Rect.empty();\n element._transform = new CompositeTransform();\n },\n visible: function (value) {\n return this.drawingContainer().visible(value);\n },\n redraw: function (options) {\n if (options && options.id) {\n this.id = options.id;\n }\n },\n position: function (x, y) {\n var options = this.options;\n if (!defined(x)) {\n return new Point(options.x, options.y);\n }\n if (defined(y)) {\n options.x = x;\n options.y = y;\n } else if (x instanceof Point) {\n options.x = x.x;\n options.y = x.y;\n }\n this._transform.translate = new Translation(options.x, options.y);\n this._renderTransform();\n },\n rotate: function (angle, center) {\n if (defined(angle)) {\n this._transform.rotate = new Rotation(angle, center.x, center.y);\n this._renderTransform();\n }\n return this._transform.rotate || Rotation.ZERO;\n },\n drawingContainer: function () {\n return this.drawingElement;\n },\n _renderTransform: function () {\n var matrix = this._transform.toMatrix();\n this.drawingContainer().transform(new g.Matrix(matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f));\n },\n _hover: function () {\n },\n _diffNumericOptions: diffNumericOptions,\n _measure: function (force) {\n var rect;\n if (!this._measured || force) {\n var box = this._boundingBox() || new g.Rect();\n var startPoint = box.topLeft();\n rect = new Rect(startPoint.x, startPoint.y, box.width(), box.height());\n this._originSize = rect;\n this._originWidth = rect.width;\n this._originHeight = rect.height;\n this._measured = true;\n } else {\n rect = this._originSize;\n }\n return rect;\n },\n _boundingBox: function () {\n return this.drawingElement.rawBBox();\n }\n });\n var VisualBase = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n options = this.options;\n options.fill = normalizeDrawingOptions(options.fill);\n options.stroke = normalizeDrawingOptions(options.stroke);\n },\n options: {\n stroke: {\n color: 'gray',\n width: 1\n },\n fill: { color: TRANSPARENT }\n },\n fill: function (color, opacity) {\n this._fill({\n color: getColor(color),\n opacity: opacity\n });\n },\n stroke: function (color, width, opacity) {\n this._stroke({\n color: getColor(color),\n width: width,\n opacity: opacity\n });\n },\n redraw: function (options) {\n if (options) {\n var stroke = options.stroke;\n var fill = options.fill;\n if (stroke) {\n this._stroke(normalizeDrawingOptions(stroke));\n }\n if (fill) {\n this._fill(normalizeDrawingOptions(fill));\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _hover: function (show) {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var hover = options.hover;\n if (hover && hover.fill) {\n var fill = show ? normalizeDrawingOptions(hover.fill) : options.fill;\n drawingElement.fill(fill.color, fill.opacity);\n }\n },\n _stroke: function (strokeOptions) {\n var options = this.options;\n deepExtend(options, { stroke: strokeOptions });\n strokeOptions = options.stroke;\n var stroke = null;\n if (strokeOptions.width > 0) {\n stroke = {\n color: strokeOptions.color,\n width: strokeOptions.width,\n opacity: strokeOptions.opacity,\n dashType: strokeOptions.dashType\n };\n }\n this.drawingElement.options.set('stroke', stroke);\n },\n _fill: function (fillOptions) {\n var options = this.options;\n deepExtend(options, { fill: fillOptions || {} });\n var fill = options.fill;\n if (fill.gradient) {\n var gradient = fill.gradient;\n var GradientClass = gradient.type === 'radial' ? d.RadialGradient : d.LinearGradient;\n this.drawingElement.fill(new GradientClass(gradient));\n } else {\n this.drawingElement.fill(fill.color, fill.opacity);\n }\n }\n });\n var TextBlock = VisualBase.extend({\n init: function (options) {\n options = this._textColor(options);\n VisualBase.fn.init.call(this, options);\n this._font();\n this._initText();\n this._initSize();\n },\n options: {\n fontSize: 15,\n fontFamily: 'sans-serif',\n stroke: { width: 0 },\n fill: { color: 'black' },\n autoSize: true\n },\n _initText: function () {\n var options = this.options;\n this.drawingElement = new d.Text(defined(options.text) ? options.text : '', new g.Point(), { font: options.font });\n this._fill();\n this._stroke();\n },\n _textColor: function (options) {\n if (options && options.color) {\n options = deepExtend({}, options, { fill: { color: options.color } });\n }\n return options;\n },\n _font: function () {\n var options = this.options;\n if (options.fontFamily && defined(options.fontSize)) {\n var fontOptions = [];\n if (options.fontStyle) {\n fontOptions.push(options.fontStyle);\n }\n if (options.fontWeight) {\n fontOptions.push(options.fontWeight);\n }\n fontOptions.push(options.fontSize + (isNumber(options.fontSize) ? 'px' : ''));\n fontOptions.push(options.fontFamily);\n options.font = fontOptions.join(' ');\n } else {\n delete options.font;\n }\n },\n content: function (text) {\n return this.drawingElement.content(text);\n },\n redraw: function (options) {\n if (options) {\n var sizeChanged = false;\n var textOptions = this.options;\n options = this._textColor(options);\n VisualBase.fn.redraw.call(this, options);\n if (options.fontFamily || defined(options.fontSize) || options.fontStyle || options.fontWeight) {\n deepExtend(textOptions, {\n fontFamily: options.fontFamily,\n fontSize: options.fontSize,\n fontStyle: options.fontStyle,\n fontWeight: options.fontWeight\n });\n this._font();\n this.drawingElement.options.set('font', textOptions.font);\n sizeChanged = true;\n }\n if (options.text) {\n this.content(options.text);\n sizeChanged = true;\n }\n if (!this._updateSize(options) && sizeChanged) {\n this._initSize();\n }\n }\n }\n });\n deepExtend(TextBlock.fn, AutoSizeableMixin);\n var Rectangle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initPath();\n this._setPosition();\n },\n _setPosition: function () {\n var options = this.options;\n var x = options.x;\n var y = options.y;\n if (defined(x) || defined(y)) {\n this.position(x || 0, y || 0);\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT\n ])) {\n this._drawPath();\n }\n if (this._diffNumericOptions(options, [\n X,\n Y\n ])) {\n this._setPosition();\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({\n stroke: options.stroke,\n closed: true\n });\n this._fill();\n this._drawPath();\n },\n _drawPath: function () {\n var drawingElement = this.drawingElement;\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var width = sizeOptions.width;\n var height = sizeOptions.height;\n drawingElement.segments.elements([\n createSegment(0, 0),\n createSegment(width, 0),\n createSegment(width, height),\n createSegment(0, height)\n ]);\n }\n });\n var MarkerBase = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n var anchor = this.options.anchor;\n this.anchor = new g.Point(anchor.x, anchor.y);\n this.createElement();\n },\n options: {\n stroke: {\n color: TRANSPARENT,\n width: 0\n },\n fill: { color: 'black' }\n },\n _transformToPath: function (point, path) {\n var transform = path.transform();\n if (point && transform) {\n point = point.transformCopy(transform);\n }\n return point;\n },\n redraw: function (options) {\n if (options) {\n if (options.position) {\n this.options.position = options.position;\n }\n VisualBase.fn.redraw.call(this, options);\n }\n }\n });\n var CircleMarker = MarkerBase.extend({\n options: {\n radius: 4,\n anchor: {\n x: 0,\n y: 0\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = new d.Circle(new g.Circle(this.anchor, options.radius), {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var options = this.options;\n var position = options.position;\n var segments = path.segments;\n var targetSegment;\n var point;\n if (position == START) {\n targetSegment = segments[0];\n } else {\n targetSegment = segments[segments.length - 1];\n }\n if (targetSegment) {\n point = this._transformToPath(targetSegment.anchor(), path);\n this.drawingElement.transform(g.transform().translate(point.x, point.y));\n }\n }\n });\n var ArrowMarker = MarkerBase.extend({\n options: {\n path: 'M 0 0 L 10 5 L 0 10 L 3 5 z',\n anchor: {\n x: 10,\n y: 5\n }\n },\n createElement: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.path, {\n fill: options.fill,\n stroke: options.stroke\n });\n },\n positionMarker: function (path) {\n var points = this._linePoints(path);\n var start = points.start;\n var end = points.end;\n var transform = g.transform();\n if (start) {\n transform.rotate(lineAngle(start, end), end);\n }\n if (end) {\n var anchor = this.anchor;\n var translate = end.clone().translate(-anchor.x, -anchor.y);\n transform.translate(translate.x, translate.y);\n }\n this.drawingElement.transform(transform);\n },\n _linePoints: function (path) {\n var options = this.options;\n var segments = path.segments;\n var startPoint, endPoint, targetSegment;\n if (options.position == START) {\n targetSegment = segments[0];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlOut();\n var nextSegment = segments[1];\n if (!startPoint && nextSegment) {\n startPoint = nextSegment.anchor();\n }\n }\n } else {\n targetSegment = segments[segments.length - 1];\n if (targetSegment) {\n endPoint = targetSegment.anchor();\n startPoint = targetSegment.controlIn();\n var prevSegment = segments[segments.length - 2];\n if (!startPoint && prevSegment) {\n startPoint = prevSegment.anchor();\n }\n }\n }\n if (endPoint) {\n return {\n start: this._transformToPath(startPoint, path),\n end: this._transformToPath(endPoint, path)\n };\n }\n }\n });\n var MarkerPathMixin = {\n _getPath: function (position) {\n var path = this.drawingElement;\n if (path instanceof d.MultiPath) {\n if (position == START) {\n path = path.paths[0];\n } else {\n path = path.paths[path.paths.length - 1];\n }\n }\n if (path && path.segments.length) {\n return path;\n }\n },\n _normalizeMarkerOptions: function (options) {\n var startCap = options.startCap;\n var endCap = options.endCap;\n if (isString(startCap)) {\n options.startCap = { type: startCap };\n }\n if (isString(endCap)) {\n options.endCap = { type: endCap };\n }\n },\n _removeMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n this.drawingContainer().remove(marker.drawingElement);\n delete this._markers[position];\n }\n },\n _createMarkers: function () {\n var options = this.options;\n this._normalizeMarkerOptions(options);\n this._markers = {};\n this._markers[START] = this._createMarker(options.startCap, START);\n this._markers[END] = this._createMarker(options.endCap, END);\n },\n _createMarker: function (options, position) {\n var type = (options || {}).type;\n var path = this._getPath(position);\n var markerType, marker;\n if (!path) {\n this._removeMarker(position);\n return;\n }\n if (type == Markers.filledCircle) {\n markerType = CircleMarker;\n } else if (type == Markers.arrowStart || type == Markers.arrowEnd) {\n markerType = ArrowMarker;\n } else {\n this._removeMarker(position);\n }\n if (markerType) {\n marker = new markerType(deepExtend({}, options, { position: position }));\n marker.positionMarker(path);\n this.drawingContainer().append(marker.drawingElement);\n return marker;\n }\n },\n _positionMarker: function (position) {\n var marker = this._markers[position];\n if (marker) {\n var path = this._getPath(position);\n if (path) {\n marker.positionMarker(path);\n } else {\n this._removeMarker(position);\n }\n }\n },\n _capMap: {\n start: 'startCap',\n end: 'endCap'\n },\n _redrawMarker: function (pathChange, position, options) {\n this._normalizeMarkerOptions(options);\n var pathOptions = this.options;\n var cap = this._capMap[position];\n var pathCapType = (pathOptions[cap] || {}).type;\n var optionsCap = options[cap];\n var created = false;\n if (optionsCap) {\n pathOptions[cap] = deepExtend({}, pathOptions[cap], optionsCap);\n if (optionsCap.type && pathCapType != optionsCap.type) {\n this._removeMarker(position);\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n } else if (this._markers[position]) {\n this._markers[position].redraw(optionsCap);\n }\n } else if (pathChange && !this._markers[position] && pathOptions[cap]) {\n this._markers[position] = this._createMarker(pathOptions[cap], position);\n created = true;\n }\n return created;\n },\n _redrawMarkers: function (pathChange, options) {\n if (!this._redrawMarker(pathChange, START, options) && pathChange) {\n this._positionMarker(START);\n }\n if (!this._redrawMarker(pathChange, END, options) && pathChange) {\n this._positionMarker(END);\n }\n }\n };\n var Path = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._createElements();\n this._initSize();\n },\n options: { autoSize: true },\n drawingContainer: function () {\n return this.container;\n },\n data: function (value) {\n var options = this.options;\n if (value) {\n if (options.data != value) {\n options.data = value;\n this._setData(value);\n this._initSize();\n this._redrawMarkers(true, {});\n }\n } else {\n return options.data;\n }\n },\n redraw: function (options) {\n if (options) {\n VisualBase.fn.redraw.call(this, options);\n var pathOptions = this.options;\n var data = options.data;\n if (defined(data) && pathOptions.data != data) {\n pathOptions.data = data;\n this._setData(data);\n if (!this._updateSize(options)) {\n this._initSize();\n }\n this._redrawMarkers(true, options);\n } else {\n this._updateSize(options);\n this._redrawMarkers(false, options);\n }\n }\n },\n _createElements: function () {\n var options = this.options;\n this.drawingElement = d.Path.parse(options.data || '', { stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n this._createMarkers();\n },\n _setData: function (data) {\n var drawingElement = this.drawingElement;\n var multipath = d.Path.parse(data || '');\n var paths = multipath.paths.slice(0);\n multipath.paths.elements([]);\n drawingElement.paths.elements(paths);\n }\n });\n deepExtend(Path.fn, AutoSizeableMixin);\n deepExtend(Path.fn, MarkerPathMixin);\n var Line = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n redraw: function (options) {\n if (options) {\n options = options || {};\n var from = options.from;\n var to = options.to;\n if (from) {\n this.options.from = from;\n }\n if (to) {\n this.options.to = to;\n }\n if (from || to) {\n this._drawPath();\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this._drawPath();\n this.container.append(drawingElement);\n },\n _drawPath: function () {\n var options = this.options;\n var drawingElement = this.drawingElement;\n var from = options.from || new Point();\n var to = options.to || new Point();\n drawingElement.segments.elements([\n createSegment(from.x, from.y),\n createSegment(to.x, to.y)\n ]);\n }\n });\n deepExtend(Line.fn, MarkerPathMixin);\n var Polyline = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this.container = new d.Group();\n this._initPath();\n this._createMarkers();\n },\n drawingContainer: function () {\n return this.container;\n },\n points: function (points) {\n var options = this.options;\n if (points) {\n options.points = points;\n this._updatePath();\n } else {\n return options.points;\n }\n },\n redraw: function (options) {\n if (options) {\n var points = options.points;\n VisualBase.fn.redraw.call(this, options);\n if (points && this._pointsDiffer(points)) {\n this.points(points);\n this._redrawMarkers(true, options);\n } else {\n this._redrawMarkers(false, options);\n }\n }\n },\n _initPath: function () {\n var options = this.options;\n this.drawingElement = new d.Path({ stroke: options.stroke });\n this._fill();\n this.container.append(this.drawingElement);\n if (options.points) {\n this._updatePath();\n }\n },\n _pointsDiffer: function (points) {\n var currentPoints = this.options.points;\n var differ = currentPoints.length !== points.length;\n if (!differ) {\n for (var i = 0; i < points.length; i++) {\n if (currentPoints[i].x !== points[i].x || currentPoints[i].y !== points[i].y) {\n differ = true;\n break;\n }\n }\n }\n return differ;\n },\n _updatePath: function () {\n var drawingElement = this.drawingElement;\n var options = this.options;\n var points = options.points;\n var segments = [];\n var point;\n for (var i = 0; i < points.length; i++) {\n point = points[i];\n segments.push(createSegment(point.x, point.y));\n }\n drawingElement.segments.elements(segments);\n },\n options: { points: [] }\n });\n deepExtend(Polyline.fn, MarkerPathMixin);\n var Image = Element.extend({\n init: function (options) {\n Element.fn.init.call(this, options);\n this._initImage();\n },\n redraw: function (options) {\n if (options) {\n if (options.source) {\n this.drawingElement.src(options.source);\n }\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.drawingElement.rect(this._rect());\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _initImage: function () {\n var options = this.options;\n var rect = this._rect();\n this.drawingElement = new d.Image(options.source, rect, {});\n },\n _rect: function () {\n var sizeOptions = sizeOptionsOrDefault(this.options);\n var origin = new g.Point(sizeOptions.x, sizeOptions.y);\n var size = new g.Size(sizeOptions.width, sizeOptions.height);\n return new g.Rect(origin, size);\n }\n });\n var Group = Element.extend({\n init: function (options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Group();\n this._initSize();\n },\n options: { autoSize: false },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n this.children.push(visual);\n this._childrenChange = true;\n },\n remove: function (visual) {\n if (this._remove(visual)) {\n this._childrenChange = true;\n }\n },\n _remove: function (visual) {\n var index = inArray(visual, this.children);\n if (index >= 0) {\n this.drawingElement.removeAt(index);\n this.children.splice(index, 1);\n return true;\n }\n },\n clear: function () {\n this.drawingElement.clear();\n this.children = [];\n this._childrenChange = true;\n },\n toFront: function (visuals) {\n var visual;\n for (var i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n if (this._remove(visual)) {\n this.append(visual);\n }\n }\n },\n toBack: function (visuals) {\n this._reorderChildren(visuals, 0);\n },\n toIndex: function (visuals, indices) {\n this._reorderChildren(visuals, indices);\n },\n _reorderChildren: function (visuals, indices) {\n var group = this.drawingElement;\n var drawingChildren = group.children.slice(0);\n var children = this.children;\n var fixedPosition = isNumber(indices);\n var i, index, toIndex, drawingElement, visual;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n drawingElement = visual.drawingContainer();\n index = inArray(visual, children);\n if (index >= 0) {\n drawingChildren.splice(index, 1);\n children.splice(index, 1);\n toIndex = fixedPosition ? indices : indices[i];\n drawingChildren.splice(toIndex, 0, drawingElement);\n children.splice(toIndex, 0, visual);\n }\n }\n group.clear();\n group.append.apply(group, drawingChildren);\n },\n redraw: function (options) {\n if (options) {\n if (this._childrenChange) {\n this._childrenChange = false;\n if (!this._updateSize(options)) {\n this._initSize();\n }\n } else {\n this._updateSize(options);\n }\n Element.fn.redraw.call(this, options);\n }\n },\n _boundingBox: function () {\n var children = this.children;\n var boundingBox;\n var visual, childBoundingBox;\n for (var i = 0; i < children.length; i++) {\n visual = children[i];\n if (visual.visible() && visual._includeInBBox !== false) {\n childBoundingBox = visual.drawingContainer().clippedBBox(null);\n if (childBoundingBox) {\n if (boundingBox) {\n boundingBox = g.Rect.union(boundingBox, childBoundingBox);\n } else {\n boundingBox = childBoundingBox;\n }\n }\n }\n }\n return boundingBox;\n }\n });\n deepExtend(Group.fn, AutoSizeableMixin);\n var Layout = Group.extend({\n init: function (rect, options) {\n this.children = [];\n Element.fn.init.call(this, options);\n this.drawingElement = new d.Layout(toDrawingRect(rect), options);\n this._initSize();\n },\n rect: function (rect) {\n if (rect) {\n this.drawingElement.rect(toDrawingRect(rect));\n } else {\n var drawingRect = this.drawingElement.rect();\n if (drawingRect) {\n return new Rect(drawingRect.origin.x, drawingRect.origin.y, drawingRect.size.width, drawingRect.size.height);\n }\n }\n },\n reflow: function () {\n this.drawingElement.reflow();\n },\n redraw: function (options) {\n kendo.deepExtend(this.drawingElement.options, options);\n Group.fn.redraw.call(this, options);\n }\n });\n var Circle = VisualBase.extend({\n init: function (options) {\n VisualBase.fn.init.call(this, options);\n this._initCircle();\n this._initSize();\n },\n redraw: function (options) {\n if (options) {\n var circleOptions = this.options;\n if (options.center) {\n deepExtend(circleOptions, { center: options.center });\n this._center.move(circleOptions.center.x, circleOptions.center.y);\n }\n if (this._diffNumericOptions(options, ['radius'])) {\n this._circle.setRadius(circleOptions.radius);\n }\n this._updateSize(options);\n VisualBase.fn.redraw.call(this, options);\n }\n },\n _initCircle: function () {\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var radius = options.radius;\n if (!defined(radius)) {\n if (!defined(width)) {\n width = height;\n }\n if (!defined(height)) {\n height = width;\n }\n options.radius = radius = Math.min(width, height) / 2;\n }\n var center = options.center || {\n x: radius,\n y: radius\n };\n this._center = new g.Point(center.x, center.y);\n this._circle = new g.Circle(this._center, radius);\n this.drawingElement = new d.Circle(this._circle, { stroke: options.stroke });\n this._fill();\n }\n });\n deepExtend(Circle.fn, AutoSizeableMixin);\n var Canvas = Class.extend({\n init: function (element, options) {\n options = options || {};\n this.element = element;\n this.surface = d.Surface.create(element, options);\n if (kendo.isFunction(this.surface.translate)) {\n this.translate = this._translate;\n }\n this.drawingElement = new d.Group();\n this._viewBox = new Rect(0, 0, options.width, options.height);\n this.size(this._viewBox);\n },\n bounds: function () {\n var box = this.drawingElement.clippedBBox();\n return new Rect(0, 0, box.width(), box.height());\n },\n size: function (size) {\n var viewBox = this._viewBox;\n if (defined(size)) {\n viewBox.width = size.width;\n viewBox.height = size.height;\n this.surface.setSize(size);\n }\n return {\n width: viewBox.width,\n height: viewBox.height\n };\n },\n _translate: function (x, y) {\n var viewBox = this._viewBox;\n if (defined(x) && defined(y)) {\n viewBox.x = x;\n viewBox.y = y;\n this.surface.translate({\n x: x,\n y: y\n });\n }\n return {\n x: viewBox.x,\n y: viewBox.y\n };\n },\n draw: function () {\n this.surface.draw(this.drawingElement);\n },\n append: function (visual) {\n this.drawingElement.append(visual.drawingContainer());\n return this;\n },\n remove: function (visual) {\n this.drawingElement.remove(visual.drawingContainer());\n },\n insertBefore: function () {\n },\n clear: function () {\n this.drawingElement.clear();\n },\n destroy: function (clearHtml) {\n this.surface.destroy();\n if (clearHtml) {\n $(this.element).remove();\n }\n }\n });\n function sizeOptionsOrDefault(options) {\n return {\n x: options.x || 0,\n y: options.y || 0,\n width: options.width || 0,\n height: options.height || 0\n };\n }\n function normalizeDrawingOptions(options) {\n if (options) {\n var drawingOptions = options;\n if (isString(drawingOptions)) {\n drawingOptions = { color: drawingOptions };\n }\n if (drawingOptions.color) {\n drawingOptions.color = getColor(drawingOptions.color);\n }\n return drawingOptions;\n }\n }\n function getColor(value) {\n var color;\n if (value != TRANSPARENT) {\n color = new d.Color(value).toHex();\n } else {\n color = value;\n }\n return color;\n }\n function lineAngle(p1, p2) {\n var xDiff = p2.x - p1.x;\n var yDiff = p2.y - p1.y;\n var angle = d.util.deg(Math.atan2(yDiff, xDiff));\n return angle;\n }\n function createSegment(x, y) {\n return new d.Segment(new g.Point(x, y));\n }\n function toDrawingRect(rect) {\n if (rect) {\n return new g.Rect([\n rect.x,\n rect.y\n ], [\n rect.width,\n rect.height\n ]);\n }\n }\n kendo.deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n diffNumericOptions: diffNumericOptions,\n Element: Element,\n Scale: Scale,\n Translation: Translation,\n Rotation: Rotation,\n Circle: Circle,\n Group: Group,\n Rectangle: Rectangle,\n Canvas: Canvas,\n Path: Path,\n Layout: Layout,\n Line: Line,\n MarkerBase: MarkerBase,\n ArrowMarker: ArrowMarker,\n CircleMarker: CircleMarker,\n Polyline: Polyline,\n CompositeTransform: CompositeTransform,\n TextBlock: TextBlock,\n Image: Image,\n VisualBase: VisualBase\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/services', [\n 'kendo.drawing',\n 'dataviz/diagram/svg'\n ], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, diagram = dataviz.diagram, Class = kendo.Class, Group = diagram.Group, Rect = diagram.Rect, Rectangle = diagram.Rectangle, Utils = diagram.Utils, isUndefined = Utils.isUndefined, Point = diagram.Point, Circle = diagram.Circle, Ticker = diagram.Ticker, deepExtend = kendo.deepExtend, Movable = kendo.ui.Movable, browser = kendo.support.browser, util = kendo.drawing.util, defined = util.defined, inArray = $.inArray, proxy = $.proxy;\n var Cursors = {\n arrow: 'default',\n grip: 'pointer',\n cross: 'pointer',\n add: 'pointer',\n move: 'move',\n select: 'pointer',\n south: 's-resize',\n east: 'e-resize',\n west: 'w-resize',\n north: 'n-resize',\n rowresize: 'row-resize',\n colresize: 'col-resize'\n }, HIT_TEST_DISTANCE = 10, AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', DEFAULT_SNAP_SIZE = 10, DEFAULT_SNAP_ANGLE = 10, DRAG_START = 'dragStart', DRAG = 'drag', DRAG_END = 'dragEnd', ITEMROTATE = 'itemRotate', ITEMBOUNDSCHANGE = 'itemBoundsChange', MIN_SNAP_SIZE = 5, MIN_SNAP_ANGLE = 5, MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', SCROLL_MIN = -20000, SCROLL_MAX = 20000, FRICTION = 0.9, FRICTION_MOBILE = 0.93, VELOCITY_MULTIPLIER = 5, TRANSPARENT = 'transparent', PAN = 'pan', ROTATED = 'rotated', SOURCE = 'source', TARGET = 'target', HANDLE_NAMES = {\n '-1': SOURCE,\n '1': TARGET\n };\n diagram.Cursors = Cursors;\n var PositionAdapter = kendo.Class.extend({\n init: function (layoutState) {\n this.layoutState = layoutState;\n this.diagram = layoutState.diagram;\n },\n initState: function () {\n this.froms = [];\n this.tos = [];\n this.subjects = [];\n function pusher(id, bounds) {\n var shape = this.diagram.getShapeById(id);\n if (shape) {\n this.subjects.push(shape);\n this.froms.push(shape.bounds().topLeft());\n this.tos.push(bounds.topLeft());\n }\n }\n this.layoutState.nodeMap.forEach(pusher, this);\n },\n update: function (tick) {\n if (this.subjects.length <= 0) {\n return;\n }\n for (var i = 0; i < this.subjects.length; i++) {\n this.subjects[i].position(new Point(this.froms[i].x + (this.tos[i].x - this.froms[i].x) * tick, this.froms[i].y + (this.tos[i].y - this.froms[i].y) * tick));\n }\n }\n });\n var LayoutUndoUnit = Class.extend({\n init: function (initialState, finalState, animate) {\n if (isUndefined(animate)) {\n this.animate = false;\n } else {\n this.animate = animate;\n }\n this._initialState = initialState;\n this._finalState = finalState;\n this.title = 'Diagram layout';\n },\n undo: function () {\n this.setState(this._initialState);\n },\n redo: function () {\n this.setState(this._finalState);\n },\n setState: function (state) {\n var diagram = state.diagram;\n if (this.animate) {\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n conn.visible(false);\n if (conn) {\n conn.points(points);\n }\n });\n var ticker = new Ticker();\n ticker.addAdapter(new PositionAdapter(state));\n ticker.onComplete(function () {\n state.linkMap.forEach(function (id) {\n var conn = diagram.getShapeById(id);\n conn.visible(true);\n });\n });\n ticker.play();\n } else {\n state.nodeMap.forEach(function (id, bounds) {\n var shape = diagram.getShapeById(id);\n if (shape) {\n shape.position(bounds.topLeft());\n }\n });\n state.linkMap.forEach(function (id, points) {\n var conn = diagram.getShapeById(id);\n if (conn) {\n conn.points(points);\n }\n });\n }\n }\n });\n var CompositeUnit = Class.extend({\n init: function (unit) {\n this.units = [];\n this.title = 'Composite unit';\n if (unit !== undefined) {\n this.units.push(unit);\n }\n },\n add: function (undoUnit) {\n this.units.push(undoUnit);\n },\n undo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].undo();\n }\n },\n redo: function () {\n for (var i = 0; i < this.units.length; i++) {\n this.units[i].redo();\n }\n }\n });\n var ConnectionEditUnit = Class.extend({\n init: function (item, redoSource, redoTarget) {\n this.item = item;\n this._redoSource = redoSource;\n this._redoTarget = redoTarget;\n if (defined(redoSource)) {\n this._undoSource = item.source();\n }\n if (defined(redoTarget)) {\n this._undoTarget = item.target();\n }\n this.title = 'Connection Editing';\n },\n undo: function () {\n if (this._undoSource !== undefined) {\n this.item._updateConnector(this._undoSource, 'source');\n }\n if (this._undoTarget !== undefined) {\n this.item._updateConnector(this._undoTarget, 'target');\n }\n this.item.updateModel();\n },\n redo: function () {\n if (this._redoSource !== undefined) {\n this.item._updateConnector(this._redoSource, 'source');\n }\n if (this._redoTarget !== undefined) {\n this.item._updateConnector(this._redoTarget, 'target');\n }\n this.item.updateModel();\n }\n });\n var ConnectionEditUndoUnit = Class.extend({\n init: function (item, undoSource, undoTarget) {\n this.item = item;\n this._undoSource = undoSource;\n this._undoTarget = undoTarget;\n this._redoSource = item.source();\n this._redoTarget = item.target();\n this.title = 'Connection Editing';\n },\n undo: function () {\n this.item._updateConnector(this._undoSource, 'source');\n this.item._updateConnector(this._undoTarget, 'target');\n this.item.updateModel();\n },\n redo: function () {\n this.item._updateConnector(this._redoSource, 'source');\n this.item._updateConnector(this._redoTarget, 'target');\n this.item.updateModel();\n }\n });\n var DeleteConnectionUnit = Class.extend({\n init: function (connection) {\n this.connection = connection;\n this.diagram = connection.diagram;\n this.targetConnector = connection.targetConnector;\n this.title = 'Delete connection';\n },\n undo: function () {\n this.diagram._addConnection(this.connection, false);\n },\n redo: function () {\n this.diagram.remove(this.connection, false);\n }\n });\n var DeleteShapeUnit = Class.extend({\n init: function (shape) {\n this.shape = shape;\n this.diagram = shape.diagram;\n this.title = 'Deletion';\n },\n undo: function () {\n this.diagram._addShape(this.shape, false);\n this.shape.select(false);\n },\n redo: function () {\n this.shape.select(false);\n this.diagram.remove(this.shape, false);\n }\n });\n var TransformUnit = Class.extend({\n init: function (shapes, undoStates, adorner) {\n this.shapes = shapes;\n this.undoStates = undoStates;\n this.title = 'Transformation';\n this.redoStates = [];\n this.adorner = adorner;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoStates.push(shape.bounds());\n }\n },\n undo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.undoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.redoStates[i], this.undoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n },\n redo: function () {\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n shape.bounds(this.redoStates[i]);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, this.undoStates[i], this.redoStates[i]);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner.refreshBounds();\n this.adorner.refresh();\n }\n }\n });\n var AddConnectionUnit = Class.extend({\n init: function (connection, diagram) {\n this.connection = connection;\n this.diagram = diagram;\n this.title = 'New connection';\n },\n undo: function () {\n this.diagram.remove(this.connection, false);\n },\n redo: function () {\n this.diagram._addConnection(this.connection, false);\n }\n });\n var AddShapeUnit = Class.extend({\n init: function (shape, diagram) {\n this.shape = shape;\n this.diagram = diagram;\n this.title = 'New shape';\n },\n undo: function () {\n this.diagram.deselect();\n this.diagram.remove(this.shape, false);\n },\n redo: function () {\n this.diagram._addShape(this.shape, false);\n }\n });\n var PanUndoUnit = Class.extend({\n init: function (initialPosition, finalPosition, diagram) {\n this.initial = initialPosition;\n this.finalPos = finalPosition;\n this.diagram = diagram;\n this.title = 'Pan Unit';\n },\n undo: function () {\n this.diagram.pan(this.initial);\n },\n redo: function () {\n this.diagram.pan(this.finalPos);\n }\n });\n var RotateUnit = Class.extend({\n init: function (adorner, shapes, undoRotates) {\n this.shapes = shapes;\n this.undoRotates = undoRotates;\n this.title = 'Rotation';\n this.redoRotates = [];\n this.redoAngle = adorner._angle;\n this.adorner = adorner;\n this.center = adorner._innerBounds.center();\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.redoRotates.push(shape.rotate().angle);\n }\n },\n undo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.undoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n },\n redo: function () {\n var i, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.rotate(this.redoRotates[i], this.center, false);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n shape.updateModel();\n }\n if (this.adorner) {\n this.adorner._initialize();\n this.adorner.refresh();\n }\n }\n });\n var ToFrontUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toFront(this.items, false);\n }\n });\n var ToBackUnit = Class.extend({\n init: function (diagram, items, initialIndices) {\n this.diagram = diagram;\n this.indices = initialIndices;\n this.items = items;\n this.title = 'Rotate Unit';\n },\n undo: function () {\n this.diagram._toIndex(this.items, this.indices);\n },\n redo: function () {\n this.diagram.toBack(this.items, false);\n }\n });\n var UndoRedoService = kendo.Observable.extend({\n init: function (options) {\n kendo.Observable.fn.init.call(this, options);\n this.bind(this.events, options);\n this.stack = [];\n this.index = 0;\n this.capacity = 100;\n },\n events: [\n 'undone',\n 'redone'\n ],\n begin: function () {\n this.composite = new CompositeUnit();\n },\n cancel: function () {\n this.composite = undefined;\n },\n commit: function (execute) {\n if (this.composite.units.length > 0) {\n this._restart(this.composite, execute);\n }\n this.composite = undefined;\n },\n addCompositeItem: function (undoUnit) {\n if (this.composite) {\n this.composite.add(undoUnit);\n } else {\n this.add(undoUnit);\n }\n },\n add: function (undoUnit, execute) {\n this._restart(undoUnit, execute);\n },\n pop: function () {\n if (this.index > 0) {\n this.stack.pop();\n this.index--;\n }\n },\n count: function () {\n return this.stack.length;\n },\n undo: function () {\n if (this.index > 0) {\n this.index--;\n this.stack[this.index].undo();\n this.trigger('undone');\n }\n },\n redo: function () {\n if (this.stack.length > 0 && this.index < this.stack.length) {\n this.stack[this.index].redo();\n this.index++;\n this.trigger('redone');\n }\n },\n _restart: function (composite, execute) {\n this.stack.splice(this.index, this.stack.length - this.index);\n this.stack.push(composite);\n if (execute !== false) {\n this.redo();\n } else {\n this.index++;\n }\n if (this.stack.length > this.capacity) {\n this.stack.splice(0, this.stack.length - this.capacity);\n this.index = this.capacity;\n }\n },\n clear: function () {\n this.stack = [];\n this.index = 0;\n }\n });\n var EmptyTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n start: function () {\n },\n move: function () {\n },\n end: function () {\n },\n tryActivate: function () {\n return false;\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ScrollerTool = EmptyTool.extend({\n init: function (toolService) {\n var tool = this;\n var friction = kendo.support.mobileOS ? FRICTION_MOBILE : FRICTION;\n EmptyTool.fn.init.call(tool, toolService);\n var diagram = tool.toolService.diagram, canvas = diagram.canvas;\n var scroller = diagram.scroller = tool.scroller = $(diagram.scrollable).kendoMobileScroller({\n friction: friction,\n velocityMultiplier: VELOCITY_MULTIPLIER,\n mousewheelScrolling: false,\n zoom: false,\n scroll: proxy(tool._move, tool)\n }).data('kendoMobileScroller');\n if (canvas.translate) {\n tool.movableCanvas = new Movable(canvas.element);\n }\n var virtualScroll = function (dimension, min, max) {\n dimension.makeVirtual();\n dimension.virtualSize(min || SCROLL_MIN, max || SCROLL_MAX);\n };\n virtualScroll(scroller.dimensions.x);\n virtualScroll(scroller.dimensions.y);\n scroller.disable();\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var options = toolService.diagram.options.pannable;\n var enabled = meta.ctrlKey;\n if (defined(options.key)) {\n if (!options.key || options.key == 'none') {\n enabled = noMeta(meta) && !defined(toolService.hoveredItem);\n } else {\n enabled = meta[options.key + 'Key'];\n }\n }\n return options !== false && enabled && !defined(toolService.hoveredAdorner) && !defined(toolService._hoveredConnector);\n },\n start: function () {\n this.scroller.enable();\n },\n move: function () {\n },\n _move: function (args) {\n var tool = this, diagram = tool.toolService.diagram, canvas = diagram.canvas, scrollPos = new Point(args.scrollLeft, args.scrollTop);\n if (canvas.translate) {\n diagram._storePan(scrollPos.times(-1));\n tool.movableCanvas.moveTo(scrollPos);\n canvas.translate(scrollPos.x, scrollPos.y);\n } else {\n scrollPos = scrollPos.plus(diagram._pan.times(-1));\n }\n diagram.trigger(PAN, { pan: scrollPos });\n },\n end: function () {\n this.scroller.disable();\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n var PointerTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function () {\n return true;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, hoveredItem = toolService.hoveredItem;\n if (hoveredItem) {\n toolService.selectSingle(hoveredItem, meta);\n if (hoveredItem.adorner) {\n this.adorner = hoveredItem.adorner;\n this.handle = this.adorner._hitTest(p);\n }\n }\n if (!this.handle) {\n this.handle = diagram._resizingAdorner._hitTest(p);\n if (this.handle) {\n this.adorner = diagram._resizingAdorner;\n }\n }\n if (this.adorner) {\n if (!this.adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_START, {\n shapes: this.adorner.shapes,\n connections: []\n })) {\n this.adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n }\n },\n move: function (p) {\n if (this.adorner) {\n this.adorner.move(this.handle, p);\n if (this.adorner.isDragHandle(this.handle)) {\n this.toolService.diagram.trigger(DRAG, {\n shapes: this.adorner.shapes,\n connections: []\n });\n }\n }\n },\n end: function () {\n var diagram = this.toolService.diagram, adorner = this.adorner, unit;\n if (adorner) {\n if (!adorner.isDragHandle(this.handle) || !diagram.trigger(DRAG_END, {\n shapes: adorner.shapes,\n connections: []\n })) {\n unit = adorner.stop();\n if (unit) {\n diagram.undoRedoService.add(unit, false);\n }\n } else {\n adorner.cancel();\n }\n }\n this.adorner = undefined;\n this.handle = undefined;\n },\n getCursor: function (p) {\n return this.toolService.hoveredItem ? this.toolService.hoveredItem._getCursor(p) : Cursors.arrow;\n }\n });\n var SelectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService;\n var selectable = toolService.diagram.options.selectable;\n var enabled = selectable && selectable.multiple !== false;\n if (enabled) {\n if (selectable.key && selectable.key != 'none') {\n enabled = meta[selectable.key + 'Key'];\n } else {\n enabled = noMeta(meta);\n }\n }\n return enabled && !defined(toolService.hoveredItem) && !defined(toolService.hoveredAdorner);\n },\n start: function (p) {\n var diagram = this.toolService.diagram;\n diagram.deselect();\n diagram.selector.start(p);\n },\n move: function (p) {\n var diagram = this.toolService.diagram;\n diagram.selector.move(p);\n },\n end: function (p, meta) {\n var diagram = this.toolService.diagram, hoveredItem = this.toolService.hoveredItem;\n var rect = diagram.selector.bounds();\n if ((!hoveredItem || !hoveredItem.isSelected) && !meta.ctrlKey) {\n diagram.deselect();\n }\n if (!rect.isEmpty()) {\n diagram.selectArea(rect);\n }\n diagram.selector.end();\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function () {\n return this.toolService._hoveredConnector;\n },\n start: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, connector = toolService._hoveredConnector, connection = diagram._createConnection({}, connector._c, p);\n if (canDrag(connection) && !diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n }) && diagram._addConnection(connection)) {\n toolService._connectionManipulation(connection, connector._c.shape, true);\n toolService._removeHover();\n toolService.selectSingle(toolService.activeConnection, meta);\n if (meta.type == 'touchmove') {\n diagram._cachedTouchTarget = connector.visual;\n }\n } else {\n connection.source(null);\n toolService.end(p);\n }\n },\n move: function (p) {\n var toolService = this.toolService;\n var connection = toolService.activeConnection;\n connection.target(p);\n toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n });\n return true;\n },\n end: function (p) {\n var toolService = this.toolService, d = toolService.diagram, connection = toolService.activeConnection, hoveredItem = toolService.hoveredItem, connector = toolService._hoveredConnector, target, cachedTouchTarget = d._cachedTouchTarget;\n if (!connection) {\n return;\n }\n if (connector && connector._c != connection.sourceConnector) {\n target = connector._c;\n } else if (hoveredItem && hoveredItem instanceof diagram.Shape) {\n target = hoveredItem.getConnector(AUTO) || hoveredItem.getConnector(p);\n } else {\n target = p;\n }\n connection.target(target);\n if (!d.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: TARGET\n })) {\n connection.updateModel();\n d._syncConnectionChanges();\n } else {\n d.remove(connection, false);\n d.undoRedoService.pop();\n }\n toolService._connectionManipulation();\n if (cachedTouchTarget) {\n d._connectorsAdorner.visual.remove(cachedTouchTarget);\n d._cachedTouchTarget = null;\n }\n },\n getCursor: function () {\n return Cursors.arrow;\n }\n });\n var ConnectionEditTool = Class.extend({\n init: function (toolService) {\n this.toolService = toolService;\n this.type = 'ConnectionTool';\n },\n tryActivate: function (p, meta) {\n var toolService = this.toolService, diagram = toolService.diagram, selectable = diagram.options.selectable, item = toolService.hoveredItem, isActive = selectable !== false && item && item.path && !(item.isSelected && meta.ctrlKey);\n if (isActive) {\n this._c = item;\n }\n return isActive;\n },\n start: function (p, meta) {\n var toolService = this.toolService;\n var connection = this._c;\n toolService.selectSingle(connection, meta);\n var adorner = connection.adorner;\n var handle, name;\n if (adorner) {\n handle = adorner._hitTest(p);\n name = HANDLE_NAMES[handle];\n }\n if (canDrag(connection) && adorner && !toolService.diagram.trigger(DRAG_START, {\n shapes: [],\n connections: [connection],\n connectionHandle: name\n })) {\n this.handle = handle;\n this.handleName = name;\n adorner.start(p);\n } else {\n toolService.startPoint = p;\n toolService.end(p);\n }\n },\n move: function (p) {\n var adorner = this._c.adorner;\n if (canDrag(this._c) && adorner) {\n adorner.move(this.handle, p);\n this.toolService.diagram.trigger(DRAG, {\n shapes: [],\n connections: [this._c],\n connectionHandle: this.handleName\n });\n return true;\n }\n },\n end: function (p) {\n var connection = this._c;\n var adorner = connection.adorner;\n var toolService = this.toolService;\n var diagram = toolService.diagram;\n if (adorner) {\n if (canDrag(connection)) {\n var unit = adorner.stop(p);\n if (!diagram.trigger(DRAG_END, {\n shapes: [],\n connections: [connection],\n connectionHandle: this.handleName\n })) {\n diagram.undoRedoService.add(unit, false);\n connection.updateModel();\n diagram._syncConnectionChanges();\n } else {\n unit.undo();\n }\n }\n }\n },\n getCursor: function () {\n return Cursors.move;\n }\n });\n function testKey(key, str) {\n return str.charCodeAt(0) == key || str.toUpperCase().charCodeAt(0) == key;\n }\n var ToolService = Class.extend({\n init: function (diagram) {\n this.diagram = diagram;\n this.tools = [\n new ScrollerTool(this),\n new ConnectionEditTool(this),\n new ConnectionTool(this),\n new SelectionTool(this),\n new PointerTool(this)\n ];\n this.activeTool = undefined;\n },\n start: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this._updateHoveredItem(p);\n this._activateTool(p, meta);\n this.activeTool.start(p, meta);\n this._updateCursor(p);\n this.diagram.focus();\n this.diagram.canvas.surface.suspendTracking();\n this.startPoint = p;\n return true;\n },\n move: function (p, meta) {\n meta = deepExtend({}, meta);\n var updateHovered = true;\n if (this.activeTool) {\n updateHovered = this.activeTool.move(p, meta);\n }\n if (updateHovered) {\n this._updateHoveredItem(p);\n }\n this._updateCursor(p);\n return true;\n },\n end: function (p, meta) {\n meta = deepExtend({}, meta);\n if (this.activeTool) {\n this.activeTool.end(p, meta);\n }\n this.diagram.canvas.surface.resumeTracking();\n this.activeTool = undefined;\n this._updateCursor(p);\n return true;\n },\n keyDown: function (key, meta) {\n var diagram = this.diagram;\n meta = deepExtend({\n ctrlKey: false,\n metaKey: false,\n altKey: false\n }, meta);\n if ((meta.ctrlKey || meta.metaKey) && !meta.altKey) {\n if (testKey(key, 'a')) {\n diagram.selectAll();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'z')) {\n diagram.undo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'y')) {\n diagram.redo();\n diagram._destroyToolBar();\n return true;\n } else if (testKey(key, 'c')) {\n diagram.copy();\n diagram._destroyToolBar();\n } else if (testKey(key, 'x')) {\n diagram.cut();\n diagram._destroyToolBar();\n } else if (testKey(key, 'v')) {\n diagram.paste();\n diagram._destroyToolBar();\n } else if (testKey(key, 'l')) {\n diagram.layout();\n diagram._destroyToolBar();\n } else if (testKey(key, 'd')) {\n diagram._destroyToolBar();\n diagram.copy();\n diagram.paste();\n }\n } else if (key === 46 || key === 8) {\n var toRemove = this.diagram._triggerRemove(diagram.select());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n this.diagram._destroyToolBar();\n }\n return true;\n } else if (key === 27) {\n this._discardNewConnection();\n diagram.deselect();\n diagram._destroyToolBar();\n return true;\n }\n },\n wheel: function (p, meta) {\n var diagram = this.diagram, delta = meta.delta, z = diagram.zoom(), options = diagram.options, zoomRate = options.zoomRate, zoomOptions = {\n point: p,\n meta: meta,\n zoom: z\n };\n if (diagram.trigger(ZOOM_START, zoomOptions)) {\n return;\n }\n if (delta < 0) {\n z += zoomRate;\n } else {\n z -= zoomRate;\n }\n z = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, z)), 2);\n zoomOptions.zoom = z;\n diagram.zoom(z, zoomOptions);\n diagram.trigger(ZOOM_END, zoomOptions);\n return true;\n },\n setTool: function (tool, index) {\n tool.toolService = this;\n this.tools[index] = tool;\n },\n selectSingle: function (item, meta) {\n var diagram = this.diagram;\n var selectable = diagram.options.selectable;\n if (selectable && !item.isSelected && item.options.selectable !== false) {\n var addToSelection = meta.ctrlKey && selectable.multiple !== false;\n diagram.select(item, { addToSelection: addToSelection });\n }\n },\n _discardNewConnection: function () {\n if (this.newConnection) {\n this.diagram.remove(this.newConnection);\n this.newConnection = undefined;\n }\n },\n _activateTool: function (p, meta) {\n for (var i = 0; i < this.tools.length; i++) {\n var tool = this.tools[i];\n if (tool.tryActivate(p, meta)) {\n this.activeTool = tool;\n break;\n }\n }\n },\n _updateCursor: function (p) {\n var element = this.diagram.element;\n var cursor = this.activeTool ? this.activeTool.getCursor(p) : this.hoveredAdorner ? this.hoveredAdorner._getCursor(p) : this.hoveredItem ? this.hoveredItem._getCursor(p) : Cursors.arrow;\n element.css({ cursor: cursor });\n if (browser.msie && browser.version == 7) {\n element[0].style.cssText = element[0].style.cssText;\n }\n },\n _connectionManipulation: function (connection, disabledShape, isNew) {\n this.activeConnection = connection;\n this.disabledShape = disabledShape;\n if (isNew) {\n this.newConnection = this.activeConnection;\n } else {\n this.newConnection = undefined;\n }\n },\n _updateHoveredItem: function (p) {\n var hit = this._hitTest(p);\n var diagram = this.diagram;\n if (hit != this.hoveredItem && (!this.disabledShape || hit != this.disabledShape)) {\n if (this.hoveredItem) {\n diagram.trigger(MOUSE_LEAVE, { item: this.hoveredItem });\n this.hoveredItem._hover(false);\n }\n if (hit && hit.options.enable) {\n diagram.trigger(MOUSE_ENTER, { item: hit });\n this.hoveredItem = hit;\n this.hoveredItem._hover(true);\n } else {\n this.hoveredItem = undefined;\n }\n }\n },\n _removeHover: function () {\n if (this.hoveredItem) {\n this.hoveredItem._hover(false);\n this.hoveredItem = undefined;\n }\n },\n _hitTest: function (point) {\n var hit, d = this.diagram, item, i;\n if (this._hoveredConnector) {\n this._hoveredConnector._hover(false);\n this._hoveredConnector = undefined;\n }\n if (d._connectorsAdorner._visible) {\n hit = d._connectorsAdorner._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n hit = this.diagram._resizingAdorner._hitTest(point);\n if (hit) {\n this.hoveredAdorner = d._resizingAdorner;\n if (hit.x !== 0 || hit.y !== 0) {\n return;\n }\n hit = undefined;\n } else {\n this.hoveredAdorner = undefined;\n }\n if (!this.activeTool || this.activeTool.type !== 'ConnectionTool') {\n var selectedConnections = [];\n for (i = 0; i < d._selectedItems.length; i++) {\n item = d._selectedItems[i];\n if (item instanceof diagram.Connection) {\n selectedConnections.push(item);\n }\n }\n hit = this._hitTestItems(selectedConnections, point);\n }\n return hit || this._hitTestElements(point);\n },\n _hitTestElements: function (point) {\n var diagram = this.diagram;\n var shapeHit = this._hitTestItems(diagram.shapes, point);\n var connectionHit = this._hitTestItems(diagram.connections, point);\n var hit;\n if ((!this.activeTool || this.activeTool.type != 'ConnectionTool') && shapeHit && connectionHit && !hitTestShapeConnectors(shapeHit, point)) {\n var mainLayer = diagram.mainLayer;\n var shapeIdx = inArray(shapeHit.visual, mainLayer.children);\n var connectionIdx = inArray(connectionHit.visual, mainLayer.children);\n hit = shapeIdx > connectionIdx ? shapeHit : connectionHit;\n }\n return hit || shapeHit || connectionHit;\n },\n _hitTestItems: function (array, point) {\n var i, item, hit;\n for (i = array.length - 1; i >= 0; i--) {\n item = array[i];\n hit = item._hitTest(point);\n if (hit) {\n return hit;\n }\n }\n }\n });\n var ConnectionRouterBase = kendo.Class.extend({\n init: function () {\n }\n });\n var LinearConnectionRouter = ConnectionRouterBase.extend({\n init: function (connection) {\n var that = this;\n ConnectionRouterBase.fn.init.call(that);\n this.connection = connection;\n },\n hitTest: function (p) {\n var rec = this.getBounds().inflate(HIT_TEST_DISTANCE);\n if (!rec.contains(p)) {\n return false;\n }\n return diagram.Geometry.distanceToPolyline(p, this.connection.allPoints()) < HIT_TEST_DISTANCE;\n },\n getBounds: function () {\n var points = this.connection.allPoints(), s = points[0], e = points[points.length - 1], right = Math.max(s.x, e.x), left = Math.min(s.x, e.x), top = Math.min(s.y, e.y), bottom = Math.max(s.y, e.y);\n for (var i = 1; i < points.length - 1; ++i) {\n right = Math.max(right, points[i].x);\n left = Math.min(left, points[i].x);\n top = Math.min(top, points[i].y);\n bottom = Math.max(bottom, points[i].y);\n }\n return new Rect(left, top, right - left, bottom - top);\n }\n });\n var PolylineRouter = LinearConnectionRouter.extend({\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n route: function () {\n }\n });\n var CascadingRouter = LinearConnectionRouter.extend({\n SAME_SIDE_DISTANCE_RATIO: 5,\n init: function (connection) {\n var that = this;\n LinearConnectionRouter.fn.init.call(that);\n this.connection = connection;\n },\n routePoints: function (start, end, sourceConnector, targetConnector) {\n var result;\n if (sourceConnector && targetConnector) {\n result = this._connectorPoints(start, end, sourceConnector, targetConnector);\n } else {\n result = this._floatingPoints(start, end, sourceConnector);\n }\n return result;\n },\n route: function () {\n var sourceConnector = this.connection._resolvedSourceConnector;\n var targetConnector = this.connection._resolvedTargetConnector;\n var start = this.connection.sourcePoint();\n var end = this.connection.targetPoint();\n var points = this.routePoints(start, end, sourceConnector, targetConnector);\n this.connection.points(points);\n },\n _connectorSides: [\n {\n name: 'Top',\n axis: 'y',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Left',\n axis: 'x',\n boundsPoint: 'topLeft',\n secondarySign: 1\n },\n {\n name: 'Bottom',\n axis: 'y',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n },\n {\n name: 'Right',\n axis: 'x',\n boundsPoint: 'bottomRight',\n secondarySign: -1\n }\n ],\n _connectorSide: function (connector, targetPoint) {\n var position = connector.position();\n var shapeBounds = connector.shape.bounds(ROTATED);\n var bounds = {\n topLeft: shapeBounds.topLeft(),\n bottomRight: shapeBounds.bottomRight()\n };\n var sides = this._connectorSides;\n var min = util.MAX_NUM;\n var sideDistance;\n var minSide;\n var axis;\n var side;\n for (var idx = 0; idx < sides.length; idx++) {\n side = sides[idx];\n axis = side.axis;\n sideDistance = Math.round(Math.abs(position[axis] - bounds[side.boundsPoint][axis]));\n if (sideDistance < min) {\n min = sideDistance;\n minSide = side;\n } else if (sideDistance === min && (position[axis] - targetPoint[axis]) * side.secondarySign > (position[minSide.axis] - targetPoint[minSide.axis]) * minSide.secondarySign) {\n minSide = side;\n }\n }\n return minSide.name;\n },\n _sameSideDistance: function (connector) {\n var bounds = connector.shape.bounds(ROTATED);\n return Math.min(bounds.width, bounds.height) / this.SAME_SIDE_DISTANCE_RATIO;\n },\n _connectorPoints: function (start, end, sourceConnector, targetConnector) {\n var sourceConnectorSide = this._connectorSide(sourceConnector, end);\n var targetConnectorSide = this._connectorSide(targetConnector, start);\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var sameSideDistance = this._sameSideDistance(sourceConnector);\n var result = [];\n var pointX, pointY;\n if (sourceConnectorSide === TOP || sourceConnectorSide == BOTTOM) {\n if (targetConnectorSide == TOP || targetConnectorSide == BOTTOM) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == TOP) {\n pointY = Math.min(start.y, end.y) - sameSideDistance;\n } else {\n pointY = Math.max(start.y, end.y) + sameSideDistance;\n }\n result = [\n new Point(start.x, pointY),\n new Point(end.x, pointY)\n ];\n } else {\n result = [\n new Point(start.x, start.y + deltaY / 2),\n new Point(end.x, start.y + deltaY / 2)\n ];\n }\n } else {\n result = [new Point(start.x, end.y)];\n }\n } else {\n if (targetConnectorSide == LEFT || targetConnectorSide == RIGHT) {\n if (sourceConnectorSide == targetConnectorSide) {\n if (sourceConnectorSide == LEFT) {\n pointX = Math.min(start.x, end.x) - sameSideDistance;\n } else {\n pointX = Math.max(start.x, end.x) + sameSideDistance;\n }\n result = [\n new Point(pointX, start.y),\n new Point(pointX, end.y)\n ];\n } else {\n result = [\n new Point(start.x + deltaX / 2, start.y),\n new Point(start.x + deltaX / 2, start.y + deltaY)\n ];\n }\n } else {\n result = [new Point(end.x, start.y)];\n }\n }\n return result;\n },\n _floatingPoints: function (start, end, sourceConnector) {\n var sourceConnectorSide = sourceConnector ? this._connectorSide(sourceConnector, end) : null;\n var cascadeStartHorizontal = this._startHorizontal(start, end, sourceConnectorSide);\n var points = [\n start,\n start,\n end,\n end\n ];\n var deltaX = end.x - start.x;\n var deltaY = end.y - start.y;\n var length = points.length;\n var shiftX;\n var shiftY;\n for (var idx = 1; idx < length - 1; ++idx) {\n if (cascadeStartHorizontal) {\n if (idx % 2 !== 0) {\n shiftX = deltaX / (length / 2);\n shiftY = 0;\n } else {\n shiftX = 0;\n shiftY = deltaY / ((length - 1) / 2);\n }\n } else {\n if (idx % 2 !== 0) {\n shiftX = 0;\n shiftY = deltaY / (length / 2);\n } else {\n shiftX = deltaX / ((length - 1) / 2);\n shiftY = 0;\n }\n }\n points[idx] = new Point(points[idx - 1].x + shiftX, points[idx - 1].y + shiftY);\n }\n idx--;\n if (cascadeStartHorizontal && idx % 2 !== 0 || !cascadeStartHorizontal && idx % 2 === 0) {\n points[length - 2] = new Point(points[length - 1].x, points[length - 2].y);\n } else {\n points[length - 2] = new Point(points[length - 2].x, points[length - 1].y);\n }\n return [\n points[1],\n points[2]\n ];\n },\n _startHorizontal: function (start, end, sourceSide) {\n var horizontal;\n if (sourceSide !== null && (sourceSide === RIGHT || sourceSide === LEFT)) {\n horizontal = true;\n } else {\n horizontal = Math.abs(start.x - end.x) > Math.abs(start.y - end.y);\n }\n return horizontal;\n }\n });\n var AdornerBase = Class.extend({\n init: function (diagram, options) {\n var that = this;\n that.diagram = diagram;\n that.options = deepExtend({}, that.options, options);\n that.visual = new Group();\n that.diagram._adorners.push(that);\n },\n refresh: function () {\n }\n });\n var ConnectionEditAdorner = AdornerBase.extend({\n init: function (connection, options) {\n var that = this, diagram;\n that.connection = connection;\n diagram = that.connection.diagram;\n that._ts = diagram.toolService;\n AdornerBase.fn.init.call(that, diagram, options);\n var sp = that.connection.sourcePoint();\n var tp = that.connection.targetPoint();\n that.spVisual = new Circle(deepExtend(that.options.handles, { center: sp }));\n that.epVisual = new Circle(deepExtend(that.options.handles, { center: tp }));\n that.visual.append(that.spVisual);\n that.visual.append(that.epVisual);\n },\n options: { handles: {} },\n _getCursor: function () {\n return Cursors.move;\n },\n start: function (p) {\n this.handle = this._hitTest(p);\n this.startPoint = p;\n this._initialSource = this.connection.source();\n this._initialTarget = this.connection.target();\n switch (this.handle) {\n case -1:\n if (this.connection.targetConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.targetConnector.shape);\n }\n break;\n case 1:\n if (this.connection.sourceConnector) {\n this._ts._connectionManipulation(this.connection, this.connection.sourceConnector.shape);\n }\n break;\n }\n },\n move: function (handle, p) {\n switch (handle) {\n case -1:\n this.connection.source(p);\n break;\n case 1:\n this.connection.target(p);\n break;\n default:\n var delta = p.minus(this.startPoint);\n this.startPoint = p;\n if (!this.connection.sourceConnector) {\n this.connection.source(this.connection.sourcePoint().plus(delta));\n }\n if (!this.connection.targetConnector) {\n this.connection.target(this.connection.targetPoint().plus(delta));\n }\n break;\n }\n this.refresh();\n return true;\n },\n stop: function (p) {\n var ts = this.diagram.toolService, item = ts.hoveredItem, target;\n if (ts._hoveredConnector) {\n target = ts._hoveredConnector._c;\n } else if (item && item instanceof diagram.Shape) {\n target = item.getConnector(AUTO) || item.getConnector(p);\n } else {\n target = p;\n }\n if (this.handle === -1) {\n this.connection.source(target);\n } else if (this.handle === 1) {\n this.connection.target(target);\n }\n this.handle = undefined;\n this._ts._connectionManipulation();\n return new ConnectionEditUndoUnit(this.connection, this._initialSource, this._initialTarget);\n },\n _hitTest: function (point) {\n var sourcePoint = this.connection.sourcePoint();\n var targetPoint = this.connection.targetPoint();\n var radiusX = this.options.handles.width / 2 + HIT_TEST_DISTANCE;\n var radiusY = this.options.handles.height / 2 + HIT_TEST_DISTANCE;\n var sourcePointDistance = sourcePoint.distanceTo(point);\n var targetPointDistance = targetPoint.distanceTo(point);\n var sourceHandle = new Rect(sourcePoint.x, sourcePoint.y).inflate(radiusX, radiusY).contains(point);\n var targetHandle = new Rect(targetPoint.x, targetPoint.y).inflate(radiusX, radiusY).contains(point);\n var handle = 0;\n if (sourceHandle && (!targetHandle || sourcePointDistance < targetPointDistance)) {\n handle = -1;\n } else if (targetHandle && (!sourceHandle || targetPointDistance < sourcePointDistance)) {\n handle = 1;\n }\n return handle;\n },\n refresh: function () {\n this.spVisual.redraw({ center: this.diagram.modelToLayer(this.connection.sourcePoint()) });\n this.epVisual.redraw({ center: this.diagram.modelToLayer(this.connection.targetPoint()) });\n }\n });\n var ConnectorsAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._refreshHandler = function (e) {\n if (e.item == that.shape) {\n that.refresh();\n }\n };\n },\n show: function (shape) {\n var that = this, len, i, ctr;\n that._visible = true;\n that.shape = shape;\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler);\n len = shape.connectors.length;\n that.connectors = [];\n that._clearVisual();\n for (i = 0; i < len; i++) {\n ctr = new ConnectorVisual(shape.connectors[i]);\n that.connectors.push(ctr);\n that.visual.append(ctr.visual);\n }\n that.visual.visible(true);\n that.refresh();\n },\n _clearVisual: function () {\n var that = this;\n if (that.diagram._cachedTouchTarget) {\n that._keepCachedTouchTarget();\n } else {\n that.visual.clear();\n }\n },\n _keepCachedTouchTarget: function () {\n var that = this, visualChildren = that.visual.children;\n var childrenCount = visualChildren.length;\n var index = inArray(that.diagram._cachedTouchTarget, visualChildren);\n for (var i = childrenCount - 1; i >= 0; i--) {\n if (i == index) {\n continue;\n }\n that.visual.remove(visualChildren[i]);\n }\n },\n destroy: function () {\n var that = this;\n that.diagram.unbind(ITEMBOUNDSCHANGE, that._refreshHandler);\n that.shape = undefined;\n that._visible = undefined;\n that.visual.visible(false);\n },\n _hitTest: function (p) {\n var ctr, i;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr._hitTest(p)) {\n ctr._hover(true);\n this.diagram.toolService._hoveredConnector = ctr;\n break;\n }\n }\n },\n refresh: function () {\n if (this.shape) {\n var bounds = this.shape.bounds();\n bounds = this.diagram.modelToLayer(bounds);\n this.visual.position(bounds.topLeft());\n $.each(this.connectors, function () {\n this.refresh();\n });\n }\n }\n });\n function hitToOppositeSide(hit, bounds) {\n var result;\n if (hit.x == -1 && hit.y == -1) {\n result = bounds.bottomRight();\n } else if (hit.x == 1 && hit.y == 1) {\n result = bounds.topLeft();\n } else if (hit.x == -1 && hit.y == 1) {\n result = bounds.topRight();\n } else if (hit.x == 1 && hit.y == -1) {\n result = bounds.bottomLeft();\n } else if (hit.x === 0 && hit.y == -1) {\n result = bounds.bottom();\n } else if (hit.x === 0 && hit.y == 1) {\n result = bounds.top();\n } else if (hit.x == 1 && hit.y === 0) {\n result = bounds.left();\n } else if (hit.x == -1 && hit.y === 0) {\n result = bounds.right();\n }\n return result;\n }\n var ResizingAdorner = AdornerBase.extend({\n init: function (diagram, options) {\n var that = this;\n AdornerBase.fn.init.call(that, diagram, options);\n that._manipulating = false;\n that.map = [];\n that.shapes = [];\n that._initSelection();\n that._createHandles();\n that.redraw();\n that.diagram.bind('select', function (e) {\n that._initialize(e.selected);\n });\n that._refreshHandler = function () {\n if (!that._internalChange) {\n that.refreshBounds();\n that.refresh();\n }\n };\n that._rotatedHandler = function () {\n if (that.shapes.length == 1) {\n that._angle = that.shapes[0].rotate().angle;\n }\n that._refreshHandler();\n };\n that.diagram.bind(ITEMBOUNDSCHANGE, that._refreshHandler).bind(ITEMROTATE, that._rotatedHandler);\n that.refreshBounds();\n that.refresh();\n },\n options: {\n handles: {\n fill: { color: '#fff' },\n stroke: { color: '#282828' },\n height: 7,\n width: 7,\n hover: {\n fill: { color: '#282828' },\n stroke: { color: '#282828' }\n }\n },\n selectable: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n offset: 10\n },\n _initSelection: function () {\n var that = this;\n var diagram = that.diagram;\n var selectable = diagram.options.selectable;\n var options = deepExtend({}, that.options.selectable, selectable);\n that.rect = new Rectangle(options);\n that.visual.append(that.rect);\n },\n _resizable: function () {\n return this.options.editable && this.options.editable.resize !== false;\n },\n _handleOptions: function () {\n return (this.options.editable.resize || {}).handles || this.options.handles;\n },\n _createHandles: function () {\n var handles, item, y, x;\n if (this._resizable()) {\n handles = this._handleOptions();\n for (x = -1; x <= 1; x++) {\n for (y = -1; y <= 1; y++) {\n if (x !== 0 || y !== 0) {\n item = new Rectangle(handles);\n item.drawingElement._hover = proxy(this._hover, this);\n this.map.push({\n x: x,\n y: y,\n visual: item\n });\n this.visual.append(item);\n }\n }\n }\n }\n },\n bounds: function (value) {\n if (value) {\n this._innerBounds = value.clone();\n this._bounds = this.diagram.modelToLayer(value).inflate(this.options.offset, this.options.offset);\n } else {\n return this._bounds;\n }\n },\n _hitTest: function (p) {\n var tp = this.diagram.modelToLayer(p), i, hit, handleBounds, handlesCount = this.map.length, handle;\n if (this._angle) {\n tp = tp.clone().rotate(this._bounds.center(), this._angle);\n }\n if (this._resizable()) {\n for (i = 0; i < handlesCount; i++) {\n handle = this.map[i];\n hit = new Point(handle.x, handle.y);\n handleBounds = this._getHandleBounds(hit);\n handleBounds.offset(this._bounds.x, this._bounds.y);\n if (handleBounds.contains(tp)) {\n return hit;\n }\n }\n }\n if (this._bounds.contains(tp)) {\n return new Point(0, 0);\n }\n },\n _getHandleBounds: function (p) {\n if (this._resizable()) {\n var handles = this._handleOptions(), w = handles.width, h = handles.height, r = new Rect(0, 0, w, h);\n if (p.x < 0) {\n r.x = -w / 2;\n } else if (p.x === 0) {\n r.x = Math.floor(this._bounds.width / 2) - w / 2;\n } else if (p.x > 0) {\n r.x = this._bounds.width + 1 - w / 2;\n }\n if (p.y < 0) {\n r.y = -h / 2;\n } else if (p.y === 0) {\n r.y = Math.floor(this._bounds.height / 2) - h / 2;\n } else if (p.y > 0) {\n r.y = this._bounds.height + 1 - h / 2;\n }\n return r;\n }\n },\n _getCursor: function (point) {\n var hit = this._hitTest(point);\n if (hit && hit.x >= -1 && hit.x <= 1 && hit.y >= -1 && hit.y <= 1 && this._resizable()) {\n var angle = this._angle;\n if (angle) {\n angle = 360 - angle;\n hit.rotate(new Point(0, 0), angle);\n hit = new Point(Math.round(hit.x), Math.round(hit.y));\n }\n if (hit.x == -1 && hit.y == -1) {\n return 'nw-resize';\n }\n if (hit.x == 1 && hit.y == 1) {\n return 'se-resize';\n }\n if (hit.x == -1 && hit.y == 1) {\n return 'sw-resize';\n }\n if (hit.x == 1 && hit.y == -1) {\n return 'ne-resize';\n }\n if (hit.x === 0 && hit.y == -1) {\n return 'n-resize';\n }\n if (hit.x === 0 && hit.y == 1) {\n return 's-resize';\n }\n if (hit.x == 1 && hit.y === 0) {\n return 'e-resize';\n }\n if (hit.x == -1 && hit.y === 0) {\n return 'w-resize';\n }\n }\n return this._manipulating ? Cursors.move : Cursors.select;\n },\n _initialize: function () {\n var that = this, i, item, items = that.diagram.select();\n that.shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof diagram.Shape) {\n that.shapes.push(item);\n item._rotationOffset = new Point();\n }\n }\n that._angle = that.shapes.length == 1 ? that.shapes[0].rotate().angle : 0;\n that._startAngle = that._angle;\n that._rotates();\n that._positions();\n that.refreshBounds();\n that.refresh();\n that.redraw();\n },\n _rotates: function () {\n var that = this, i, shape;\n that.initialRotates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialRotates.push(shape.rotate().angle);\n }\n },\n _positions: function () {\n var that = this, i, shape;\n that.initialStates = [];\n for (i = 0; i < that.shapes.length; i++) {\n shape = that.shapes[i];\n that.initialStates.push(shape.bounds());\n }\n },\n _hover: function (value, element) {\n if (this._resizable()) {\n var handleOptions = this._handleOptions(), hover = handleOptions.hover, stroke = handleOptions.stroke, fill = handleOptions.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n element.stroke(stroke.color, stroke.width, stroke.opacity);\n element.fill(fill.color, fill.opacity);\n }\n },\n start: function (p) {\n this._sp = p;\n this._cp = p;\n this._lp = p;\n this._manipulating = true;\n this._internalChange = true;\n this.shapeStates = [];\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n this.shapeStates.push(shape.bounds());\n }\n },\n redraw: function () {\n var i, handle, visibleHandles = this._resizable();\n for (i = 0; i < this.map.length; i++) {\n handle = this.map[i];\n handle.visual.visible(visibleHandles);\n }\n },\n angle: function (value) {\n if (defined(value)) {\n this._angle = value;\n }\n return this._angle;\n },\n rotate: function () {\n var center = this._innerBounds.center();\n var currentAngle = this.angle();\n this._internalChange = true;\n for (var i = 0; i < this.shapes.length; i++) {\n var shape = this.shapes[i];\n currentAngle = (currentAngle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(currentAngle, center);\n }\n this.refresh();\n },\n move: function (handle, p) {\n var delta, dragging, dtl = new Point(), dbr = new Point(), bounds, center, shape, i, angle, newBounds, changed = 0, staticPoint, scaleX, scaleY;\n if (handle.y === -2 && handle.x === -1) {\n center = this._innerBounds.center();\n this._angle = this._truncateAngle(Utils.findAngle(center, p));\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n angle = (this._angle + this.initialRotates[i] - this._startAngle) % 360;\n shape.rotate(angle, center);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape);\n }\n this._rotating = true;\n }\n this.refresh();\n } else {\n if (this.shouldSnap()) {\n var thr = this._truncateDistance(p.minus(this._lp));\n if (thr.x === 0 && thr.y === 0) {\n this._cp = p;\n return;\n }\n delta = thr;\n this._lp = new Point(this._lp.x + thr.x, this._lp.y + thr.y);\n } else {\n delta = p.minus(this._cp);\n }\n if (this.isDragHandle(handle)) {\n dbr = dtl = delta;\n dragging = true;\n } else {\n if (this._angle) {\n delta.rotate(new Point(0, 0), this._angle);\n }\n if (handle.x == -1) {\n dtl.x = delta.x;\n } else if (handle.x == 1) {\n dbr.x = delta.x;\n }\n if (handle.y == -1) {\n dtl.y = delta.y;\n } else if (handle.y == 1) {\n dbr.y = delta.y;\n }\n }\n if (!dragging) {\n staticPoint = hitToOppositeSide(handle, this._innerBounds);\n scaleX = (this._innerBounds.width + delta.x * handle.x) / this._innerBounds.width;\n scaleY = (this._innerBounds.height + delta.y * handle.y) / this._innerBounds.height;\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n bounds = shape.bounds();\n if (dragging) {\n if (!canDrag(shape)) {\n continue;\n }\n newBounds = this._displaceBounds(bounds, dtl, dbr, dragging);\n } else {\n newBounds = bounds.clone();\n newBounds.scale(scaleX, scaleY, staticPoint, this._innerBounds.center(), shape.rotate().angle);\n var newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n if (newBounds.width >= shape.options.minWidth && newBounds.height >= shape.options.minHeight) {\n var oldBounds = bounds;\n shape.bounds(newBounds);\n if (shape.hasOwnProperty('layout')) {\n shape.layout(shape, oldBounds, newBounds);\n }\n if (oldBounds.width !== newBounds.width || oldBounds.height !== newBounds.height) {\n shape.rotate(shape.rotate().angle);\n }\n changed += 1;\n }\n }\n if (changed) {\n if (changed == i) {\n newBounds = this._displaceBounds(this._innerBounds, dtl, dbr, dragging);\n this.bounds(newBounds);\n } else {\n this.refreshBounds();\n }\n this.refresh();\n }\n this._positions();\n }\n this._cp = p;\n },\n isDragHandle: function (handle) {\n return handle.x === 0 && handle.y === 0;\n },\n cancel: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n shapes[idx].bounds(states[idx]);\n }\n this.refreshBounds();\n this.refresh();\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n },\n _truncatePositionToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncatePositionToGuides(bounds);\n }\n return bounds;\n },\n _truncateSizeToGuides: function (bounds) {\n if (this.diagram.ruler) {\n return this.diagram.ruler.truncateSizeToGuides(bounds);\n }\n return bounds;\n },\n _truncateAngle: function (a) {\n var snap = this.snapOptions();\n var snapAngle = Math.max(snap.angle || DEFAULT_SNAP_ANGLE, MIN_SNAP_ANGLE);\n return snap ? Math.floor(a % 360 / snapAngle) * snapAngle : a % 360;\n },\n _truncateDistance: function (d) {\n if (d instanceof diagram.Point) {\n return new diagram.Point(this._truncateDistance(d.x), this._truncateDistance(d.y));\n } else {\n var snap = this.snapOptions() || {};\n var snapSize = Math.max(snap.size || DEFAULT_SNAP_SIZE, MIN_SNAP_SIZE);\n return snap ? Math.floor(d / snapSize) * snapSize : d;\n }\n },\n snapOptions: function () {\n var editable = this.diagram.options.editable;\n var snap = ((editable || {}).drag || {}).snap || {};\n return snap;\n },\n shouldSnap: function () {\n var editable = this.diagram.options.editable;\n var drag = (editable || {}).drag;\n var snap = (drag || {}).snap;\n return editable !== false && drag !== false && snap !== false;\n },\n _displaceBounds: function (bounds, dtl, dbr, dragging) {\n var tl = bounds.topLeft().plus(dtl), br = bounds.bottomRight().plus(dbr), newBounds = Rect.fromPoints(tl, br), newCenter;\n if (!dragging) {\n newCenter = newBounds.center();\n newCenter.rotate(bounds.center(), -this._angle);\n newBounds = new Rect(newCenter.x - newBounds.width / 2, newCenter.y - newBounds.height / 2, newBounds.width, newBounds.height);\n }\n return newBounds;\n },\n stop: function () {\n var unit, i, shape;\n if (this._cp != this._sp) {\n if (this._rotating) {\n unit = new RotateUnit(this, this.shapes, this.initialRotates);\n this._rotating = false;\n } else if (this._diffStates()) {\n if (this.diagram.ruler) {\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n var bounds = shape.bounds();\n bounds = this._truncateSizeToGuides(this._truncatePositionToGuides(bounds));\n shape.bounds(bounds);\n this.refreshBounds();\n this.refresh();\n }\n }\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n shape.updateModel();\n }\n unit = new TransformUnit(this.shapes, this.shapeStates, this);\n this.diagram._syncShapeChanges();\n }\n }\n this._manipulating = undefined;\n this._internalChange = undefined;\n this._rotating = undefined;\n return unit;\n },\n _diffStates: function () {\n var shapes = this.shapes;\n var states = this.shapeStates;\n for (var idx = 0; idx < shapes.length; idx++) {\n if (!shapes[idx].bounds().equals(states[idx])) {\n return true;\n }\n }\n return false;\n },\n refreshBounds: function () {\n var bounds = this.shapes.length == 1 ? this.shapes[0].bounds().clone() : this.diagram.boundingBox(this.shapes, true);\n this.bounds(bounds);\n },\n refresh: function () {\n var that = this, b, bounds;\n if (this.shapes.length > 0) {\n bounds = this.bounds();\n this.visual.visible(true);\n this.visual.position(bounds.topLeft());\n $.each(this.map, function () {\n b = that._getHandleBounds(new Point(this.x, this.y));\n this.visual.position(b.topLeft());\n });\n this.visual.position(bounds.topLeft());\n var center = new Point(bounds.width / 2, bounds.height / 2);\n this.visual.rotate(this._angle, center);\n this.rect.redraw({\n width: bounds.width,\n height: bounds.height\n });\n if (this.rotationThumb) {\n var thumb = this.options.editable.rotate.thumb;\n this._rotationThumbBounds = new Rect(bounds.center().x, bounds.y + thumb.y, 0, 0).inflate(thumb.width);\n this.rotationThumb.redraw({ x: bounds.width / 2 - thumb.width / 2 });\n }\n } else {\n this.visual.visible(false);\n }\n }\n });\n var Selector = Class.extend({\n init: function (diagram) {\n var selectable = diagram.options.selectable;\n this.options = deepExtend({}, this.options, selectable);\n this.visual = new Rectangle(this.options);\n this.diagram = diagram;\n },\n options: {\n stroke: {\n color: '#778899',\n width: 1,\n dashType: 'dash'\n },\n fill: { color: TRANSPARENT }\n },\n start: function (p) {\n this._sp = this._ep = p;\n this.refresh();\n this.diagram._adorn(this, true);\n },\n end: function () {\n this._sp = this._ep = undefined;\n this.diagram._adorn(this, false);\n },\n bounds: function (value) {\n if (value) {\n this._bounds = value;\n }\n return this._bounds;\n },\n move: function (p) {\n this._ep = p;\n this.refresh();\n },\n refresh: function () {\n if (this._sp) {\n var visualBounds = Rect.fromPoints(this.diagram.modelToLayer(this._sp), this.diagram.modelToLayer(this._ep));\n this.bounds(Rect.fromPoints(this._sp, this._ep));\n this.visual.position(visualBounds.topLeft());\n this.visual.redraw({\n height: visualBounds.height + 1,\n width: visualBounds.width + 1\n });\n }\n }\n });\n var ConnectorVisual = Class.extend({\n init: function (connector) {\n this.options = deepExtend({}, connector.options);\n this._c = connector;\n this.visual = new Circle(this.options);\n this.refresh();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && Utils.isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && Utils.isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.visual.redraw({\n stroke: stroke,\n fill: fill\n });\n },\n refresh: function () {\n var p = this._c.shape.diagram.modelToView(this._c.position()), relative = p.minus(this._c.shape.bounds('transformed').topLeft()), value = new Rect(p.x, p.y, 0, 0);\n value.inflate(this.options.width / 2, this.options.height / 2);\n this._visualBounds = value;\n this.visual.redraw({ center: new Point(relative.x, relative.y) });\n },\n _hitTest: function (p) {\n var tp = this._c.shape.diagram.modelToView(p);\n return this._visualBounds.contains(tp);\n }\n });\n function canDrag(element) {\n var editable = element.options.editable;\n return editable && editable.drag !== false;\n }\n function hitTestShapeConnectors(shape, point) {\n var connector, position, rect;\n for (var idx = 0; idx < shape.connectors.length; idx++) {\n connector = shape.connectors[idx];\n position = connector.position();\n rect = new Rect(position.x, position.y);\n rect.inflate(HIT_TEST_DISTANCE, HIT_TEST_DISTANCE);\n if (rect.contains(point)) {\n return connector;\n }\n }\n }\n function noMeta(meta) {\n return meta.ctrlKey === false && meta.altKey === false && meta.shiftKey === false;\n }\n deepExtend(diagram, {\n CompositeUnit: CompositeUnit,\n TransformUnit: TransformUnit,\n PanUndoUnit: PanUndoUnit,\n AddShapeUnit: AddShapeUnit,\n AddConnectionUnit: AddConnectionUnit,\n DeleteShapeUnit: DeleteShapeUnit,\n DeleteConnectionUnit: DeleteConnectionUnit,\n ConnectionEditAdorner: ConnectionEditAdorner,\n ConnectionTool: ConnectionTool,\n ConnectorVisual: ConnectorVisual,\n UndoRedoService: UndoRedoService,\n ResizingAdorner: ResizingAdorner,\n Selector: Selector,\n ToolService: ToolService,\n ConnectorsAdorner: ConnectorsAdorner,\n LayoutUndoUnit: LayoutUndoUnit,\n ConnectionEditUnit: ConnectionEditUnit,\n ToFrontUnit: ToFrontUnit,\n ToBackUnit: ToBackUnit,\n ConnectionRouterBase: ConnectionRouterBase,\n PolylineRouter: PolylineRouter,\n CascadingRouter: CascadingRouter,\n SelectionTool: SelectionTool,\n ScrollerTool: ScrollerTool,\n PointerTool: PointerTool,\n ConnectionEditTool: ConnectionEditTool,\n RotateUnit: RotateUnit\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/layout', ['dataviz/diagram/math'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, diagram = kendo.dataviz.diagram, Graph = diagram.Graph, Node = diagram.Node, Link = diagram.Link, deepExtend = kendo.deepExtend, Size = diagram.Size, Rect = diagram.Rect, Dictionary = diagram.Dictionary, Set = diagram.Set, HyperTree = diagram.Graph, Utils = diagram.Utils, Point = diagram.Point, EPSILON = 0.000001, DEG_TO_RAD = Math.PI / 180, contains = Utils.contains, grep = $.grep;\n var LayoutBase = kendo.Class.extend({\n defaultOptions: {\n type: 'Tree',\n subtype: 'Down',\n roots: null,\n animate: false,\n limitToView: false,\n friction: 0.9,\n nodeDistance: 50,\n iterations: 300,\n horizontalSeparation: 90,\n verticalSeparation: 50,\n underneathVerticalTopOffset: 15,\n underneathHorizontalOffset: 15,\n underneathVerticalSeparation: 15,\n grid: {\n width: 1500,\n offsetX: 50,\n offsetY: 50,\n componentSpacingX: 20,\n componentSpacingY: 20\n },\n layerSeparation: 50,\n layeredIterations: 2,\n startRadialAngle: 0,\n endRadialAngle: 360,\n radialSeparation: 150,\n radialFirstLevelSeparation: 200,\n keepComponentsInOneRadialLayout: false,\n ignoreContainers: true,\n layoutContainerChildren: false,\n ignoreInvisible: true,\n animateTransitions: false\n },\n init: function () {\n },\n gridLayoutComponents: function (components) {\n if (!components) {\n throw 'No components supplied.';\n }\n Utils.forEach(components, function (c) {\n c.calcBounds();\n });\n components.sort(function (a, b) {\n return b.bounds.width - a.bounds.width;\n });\n var maxWidth = this.options.grid.width, offsetX = this.options.grid.componentSpacingX, offsetY = this.options.grid.componentSpacingY, height = 0, startX = this.options.grid.offsetX, startY = this.options.grid.offsetY, x = startX, y = startY, i, resultLinkSet = [], resultNodeSet = [];\n while (components.length > 0) {\n if (x >= maxWidth) {\n x = startX;\n y += height + offsetY;\n height = 0;\n }\n var component = components.pop();\n this.moveToOffset(component, new Point(x, y));\n for (i = 0; i < component.nodes.length; i++) {\n resultNodeSet.push(component.nodes[i]);\n }\n for (i = 0; i < component.links.length; i++) {\n resultLinkSet.push(component.links[i]);\n }\n var boundingRect = component.bounds;\n var currentHeight = boundingRect.height;\n if (currentHeight <= 0 || isNaN(currentHeight)) {\n currentHeight = 0;\n }\n var currentWidth = boundingRect.width;\n if (currentWidth <= 0 || isNaN(currentWidth)) {\n currentWidth = 0;\n }\n if (currentHeight >= height) {\n height = currentHeight;\n }\n x += currentWidth + offsetX;\n }\n return {\n nodes: resultNodeSet,\n links: resultLinkSet\n };\n },\n moveToOffset: function (component, p) {\n var i, j, bounds = component.bounds, deltax = p.x - bounds.x, deltay = p.y - bounds.y;\n for (i = 0; i < component.nodes.length; i++) {\n var node = component.nodes[i];\n var nodeBounds = node.bounds();\n if (nodeBounds.width === 0 && nodeBounds.height === 0 && nodeBounds.x === 0 && nodeBounds.y === 0) {\n nodeBounds = new Rect(0, 0, 0, 0);\n }\n nodeBounds.x += deltax;\n nodeBounds.y += deltay;\n node.bounds(nodeBounds);\n }\n for (i = 0; i < component.links.length; i++) {\n var link = component.links[i];\n if (link.points) {\n var newpoints = [];\n var points = link.points;\n for (j = 0; j < points.length; j++) {\n var pt = points[j];\n pt.x += deltax;\n pt.y += deltay;\n newpoints.push(pt);\n }\n link.points = newpoints;\n }\n }\n this.currentHorizontalOffset += bounds.width + this.options.grid.offsetX;\n return new Point(deltax, deltay);\n },\n transferOptions: function (options) {\n this.options = kendo.deepExtend({}, this.defaultOptions);\n if (Utils.isUndefined(options)) {\n return;\n }\n this.options = kendo.deepExtend(this.options, options || {});\n }\n });\n var DiagramToHyperTreeAdapter = kendo.Class.extend({\n init: function (diagram) {\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.finalNodes = [];\n this.finalLinks = [];\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.hyperMap = new Dictionary();\n this.hyperTree = new Graph();\n this.finalGraph = null;\n this.diagram = diagram;\n },\n convert: function (options) {\n if (Utils.isUndefined(this.diagram)) {\n throw 'No diagram to convert.';\n }\n this.options = kendo.deepExtend({\n ignoreInvisible: true,\n ignoreContainers: true,\n layoutContainerChildren: false\n }, options || {});\n this.clear();\n this._renormalizeShapes();\n this._renormalizeConnections();\n this.finalNodes = new Dictionary(this.nodes);\n this.finalLinks = new Dictionary(this.edges);\n this.finalGraph = new Graph();\n this.finalNodes.forEach(function (n) {\n this.finalGraph.addNode(n);\n }, this);\n this.finalLinks.forEach(function (l) {\n this.finalGraph.addExistingLink(l);\n }, this);\n return this.finalGraph;\n },\n mapConnection: function (connection) {\n return this.edgeMap.get(connection.id);\n },\n mapShape: function (shape) {\n return this.nodeMap.get(shape.id);\n },\n getEdge: function (a, b) {\n return Utils.first(a.links, function (link) {\n return link.getComplement(a) === b;\n });\n },\n clear: function () {\n this.finalGraph = null;\n this.hyperTree = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new HyperTree() : null;\n this.hyperMap = !this.options.ignoreContainers && this.options.layoutContainerChildren ? new Dictionary() : null;\n this.nodeMap = new Dictionary();\n this.shapeMap = new Dictionary();\n this.nodes = [];\n this.edges = [];\n this.edgeMap = new Dictionary();\n this.ignoredConnections = [];\n this.ignoredShapes = [];\n this.finalNodes = [];\n this.finalLinks = [];\n },\n listToRoot: function (containerGraph) {\n var list = [];\n var s = containerGraph.container;\n if (!s) {\n return list;\n }\n list.push(s);\n while (s.parentContainer) {\n s = s.parentContainer;\n list.push(s);\n }\n list.reverse();\n return list;\n },\n firstNonIgnorableContainer: function (shape) {\n if (shape.isContainer && !this._isIgnorableItem(shape)) {\n return shape;\n }\n return !shape.parentContainer ? null : this.firstNonIgnorableContainer(shape.parentContainer);\n },\n isContainerConnection: function (a, b) {\n if (a.isContainer && this.isDescendantOf(a, b)) {\n return true;\n }\n return b.isContainer && this.isDescendantOf(b, a);\n },\n isDescendantOf: function (scope, a) {\n if (!scope.isContainer) {\n throw 'Expecting a container.';\n }\n if (scope === a) {\n return false;\n }\n if (contains(scope.children, a)) {\n return true;\n }\n var containers = [];\n for (var i = 0, len = scope.children.length; i < len; i++) {\n var c = scope.children[i];\n if (c.isContainer && this.isDescendantOf(c, a)) {\n containers.push(c);\n }\n }\n return containers.length > 0;\n },\n isIgnorableItem: function (shape) {\n if (this.options.ignoreInvisible) {\n if (shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n if (!shape.isCollapsed && this._isVisible(shape)) {\n return false;\n }\n return true;\n } else {\n return shape.isCollapsed && !this._isTop(shape);\n }\n },\n isShapeMapped: function (shape) {\n return shape.isCollapsed && !this._isVisible(shape) && !this._isTop(shape);\n },\n leastCommonAncestor: function (a, b) {\n if (!a) {\n throw 'Parameter should not be null.';\n }\n if (!b) {\n throw 'Parameter should not be null.';\n }\n if (!this.hyperTree) {\n throw 'No hypertree available.';\n }\n var al = this.listToRoot(a);\n var bl = this.listToRoot(b);\n var found = null;\n if (Utils.isEmpty(al) || Utils.isEmpty(bl)) {\n return this.hyperTree.root.data;\n }\n var xa = al[0];\n var xb = bl[0];\n var i = 0;\n while (xa === xb) {\n found = al[i];\n i++;\n if (i >= al.length || i >= bl.length) {\n break;\n }\n xa = al[i];\n xb = bl[i];\n }\n if (!found) {\n return this.hyperTree.root.data;\n } else {\n return grep(this.hyperTree.nodes, function (n) {\n return n.data.container === found;\n });\n }\n },\n _isTop: function (item) {\n return !item.parentContainer;\n },\n _isVisible: function (shape) {\n if (!shape.visible()) {\n return false;\n }\n return !shape.parentContainer ? shape.visible() : this._isVisible(shape.parentContainer);\n },\n _isCollapsed: function (shape) {\n if (shape.isContainer && shape.isCollapsed) {\n return true;\n }\n return shape.parentContainer && this._isCollapsed(shape.parentContainer);\n },\n _renormalizeShapes: function () {\n if (this.options.ignoreContainers) {\n for (var i = 0, len = this.diagram.shapes.length; i < len; i++) {\n var shape = this.diagram.shapes[i];\n if (this.options.ignoreInvisible && !this._isVisible(shape) || shape.isContainer) {\n this.ignoredShapes.push(shape);\n continue;\n }\n var node = new Node(shape.id, shape);\n node.isVirtual = false;\n this.nodeMap.add(shape.id, node);\n this.nodes.push(node);\n }\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n },\n _renormalizeConnections: function () {\n if (this.diagram.connections.length === 0) {\n return;\n }\n for (var i = 0, len = this.diagram.connections.length; i < len; i++) {\n var conn = this.diagram.connections[i];\n if (this.isIgnorableItem(conn)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var source = !conn.sourceConnector ? null : conn.sourceConnector.shape;\n var sink = !conn.targetConnector ? null : conn.targetConnector.shape;\n if (!source || !sink) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, source) && !this.shapeMap.containsKey(source)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (contains(this.ignoredShapes, sink) && !this.shapeMap.containsKey(sink)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (this.shapeMap.containsKey(source)) {\n source = this.shapeMap[source];\n }\n if (this.shapeMap.containsKey(sink)) {\n sink = this.shapeMap[sink];\n }\n var sourceNode = this.mapShape(source);\n var sinkNode = this.mapShape(sink);\n if (sourceNode === sinkNode || this.areConnectedAlready(sourceNode, sinkNode)) {\n this.ignoredConnections.push(conn);\n continue;\n }\n if (sourceNode === null || sinkNode === null) {\n throw 'A shape was not mapped to a node.';\n }\n if (this.options.ignoreContainers) {\n if (sourceNode.isVirtual || sinkNode.isVirtual) {\n this.ignoredConnections.push(conn);\n continue;\n }\n var newEdge = new Link(sourceNode, sinkNode, conn.id, conn);\n this.edgeMap.add(conn.id, newEdge);\n this.edges.push(newEdge);\n } else {\n throw 'Containers are not supported yet, but stay tuned.';\n }\n }\n },\n areConnectedAlready: function (n, m) {\n return Utils.any(this.edges, function (l) {\n return l.source === n && l.target === m || l.source === m && l.target === n;\n });\n }\n });\n var SpringLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutGraph: function (graph, options) {\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n var initialTemperature = this.options.nodeDistance * 9;\n this.temperature = initialTemperature;\n var guessBounds = this._expectedBounds();\n this.width = guessBounds.width;\n this.height = guessBounds.height;\n for (var step = 0; step < this.options.iterations; step++) {\n this.refineStage = step >= this.options.iterations * 5 / 6;\n this.tick();\n this.temperature = this.refineStage ? initialTemperature / 30 : initialTemperature * (1 - step / (2 * this.options.iterations));\n }\n },\n tick: function () {\n var i;\n for (i = 0; i < this.graph.nodes.length; i++) {\n this._repulsion(this.graph.nodes[i]);\n }\n for (i = 0; i < this.graph.links.length; i++) {\n this._attraction(this.graph.links[i]);\n }\n for (i = 0; i < this.graph.nodes.length; i++) {\n var node = this.graph.nodes[i];\n var offset = Math.sqrt(node.dx * node.dx + node.dy * node.dy);\n if (offset === 0) {\n return;\n }\n node.x += Math.min(offset, this.temperature) * node.dx / offset;\n node.y += Math.min(offset, this.temperature) * node.dy / offset;\n if (this.options.limitToView) {\n node.x = Math.min(this.width, Math.max(node.width / 2, node.x));\n node.y = Math.min(this.height, Math.max(node.height / 2, node.y));\n }\n }\n },\n _shake: function (node) {\n var rho = Math.random() * this.options.nodeDistance / 4;\n var alpha = Math.random() * 2 * Math.PI;\n node.x += rho * Math.cos(alpha);\n node.y -= rho * Math.sin(alpha);\n },\n _InverseSquareForce: function (d, n, m) {\n var force;\n if (!this.refineStage) {\n force = Math.pow(d, 2) / Math.pow(this.options.nodeDistance, 2);\n } else {\n var deltax = n.x - m.x;\n var deltay = n.y - m.y;\n var wn = n.width / 2;\n var hn = n.height / 2;\n var wm = m.width / 2;\n var hm = m.height / 2;\n force = Math.pow(deltax, 2) / Math.pow(wn + wm + this.options.nodeDistance, 2) + Math.pow(deltay, 2) / Math.pow(hn + hm + this.options.nodeDistance, 2);\n }\n return force * 4 / 3;\n },\n _SquareForce: function (d, n, m) {\n return 1 / this._InverseSquareForce(d, n, m);\n },\n _repulsion: function (n) {\n n.dx = 0;\n n.dy = 0;\n Utils.forEach(this.graph.nodes, function (m) {\n if (m === n) {\n return;\n }\n while (n.x === m.x && n.y === m.y) {\n this._shake(m);\n }\n var vx = n.x - m.x;\n var vy = n.y - m.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var r = this._SquareForce(distance, n, m) * 2;\n n.dx += vx / distance * r;\n n.dy += vy / distance * r;\n }, this);\n },\n _attraction: function (link) {\n var t = link.target;\n var s = link.source;\n if (s === t) {\n return;\n }\n while (s.x === t.x && s.y === t.y) {\n this._shake(t);\n }\n var vx = s.x - t.x;\n var vy = s.y - t.y;\n var distance = Math.sqrt(vx * vx + vy * vy);\n var a = this._InverseSquareForce(distance, s, t) * 5;\n var dx = vx / distance * a;\n var dy = vy / distance * a;\n t.dx += dx;\n t.dy += dy;\n s.dx -= dx;\n s.dy -= dy;\n },\n _expectedBounds: function () {\n var size, N = this.graph.nodes.length, ratio = 1.5, multiplier = 4;\n if (N === 0) {\n return size;\n }\n size = Utils.fold(this.graph.nodes, function (s, node) {\n var area = node.width * node.height;\n if (area > 0) {\n s += Math.sqrt(area);\n return s;\n }\n return 0;\n }, 0, this);\n var av = size / N;\n var squareSize = av * Math.ceil(Math.sqrt(N));\n var width = squareSize * Math.sqrt(ratio);\n var height = squareSize / Math.sqrt(ratio);\n return {\n width: width * multiplier,\n height: height * multiplier\n };\n }\n });\n var TreeLayoutProcessor = kendo.Class.extend({\n init: function (options) {\n this.center = null;\n this.options = options;\n },\n layout: function (treeGraph, root) {\n this.graph = treeGraph;\n if (!this.graph.nodes || this.graph.nodes.length === 0) {\n return;\n }\n if (!contains(this.graph.nodes, root)) {\n throw 'The given root is not in the graph.';\n }\n this.center = root;\n this.graph.cacheRelationships();\n this.layoutSwitch();\n },\n layoutLeft: function (left) {\n this.setChildrenDirection(this.center, 'Left', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n node.TreeDirection = 'Left';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x - this.options.horizontalSeparation;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < left.length; i++) {\n node = left[i];\n var p = new Point(x - node.Size.width, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutRight: function (right) {\n this.setChildrenDirection(this.center, 'Right', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var h = 0, w = 0, y, i, node;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n node.TreeDirection = 'Right';\n var s = this.measure(node, Size.Empty);\n w = Math.max(w, s.Width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n var x = this.center.x + this.options.horizontalSeparation + this.center.width;\n y = this.center.y + (this.center.height - h) / 2;\n for (i = 0; i < right.length; i++) {\n node = right[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n y += node.Size.height + this.options.verticalSeparation;\n }\n },\n layoutUp: function (up) {\n this.setChildrenDirection(this.center, 'Up', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y, node, i;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n node.TreeDirection = 'Up';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n for (i = 0; i < up.length; i++) {\n node = up[i];\n y = this.center.y - this.options.verticalSeparation - node.Size.height;\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutDown: function (down) {\n var node, i;\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n var w = 0, y;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.treeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n layoutRadialTree: function () {\n this.setChildrenDirection(this.center, 'Radial', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.previousRoot = null;\n var startAngle = this.options.startRadialAngle * DEG_TO_RAD;\n var endAngle = this.options.endRadialAngle * DEG_TO_RAD;\n if (endAngle <= startAngle) {\n throw 'Final angle should not be less than the start angle.';\n }\n this.maxDepth = 0;\n this.origin = new Point(this.center.x, this.center.y);\n this.calculateAngularWidth(this.center, 0);\n if (this.maxDepth > 0) {\n this.radialLayout(this.center, this.options.radialFirstLevelSeparation, startAngle, endAngle);\n }\n this.center.Angle = endAngle - startAngle;\n },\n tipOverTree: function (down, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n this.setChildrenDirection(this.center, 'Down', false);\n this.setChildrenLayout(this.center, 'Default', false);\n this.setChildrenLayout(this.center, 'Underneath', false, startFromLevel);\n var w = 0, y, node, i;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n node.TreeDirection = 'Down';\n var s = this.measure(node, Size.Empty);\n w += s.width + this.options.horizontalSeparation;\n }\n w -= this.options.horizontalSeparation;\n w -= down[down.length - 1].width;\n w += down[down.length - 1].associatedShape.bounds().width;\n var x = this.center.x + this.center.width / 2 - w / 2;\n y = this.center.y + this.options.verticalSeparation + this.center.height;\n for (i = 0; i < down.length; i++) {\n node = down[i];\n var p = new Point(x, y);\n this.arrange(node, p);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n },\n calculateAngularWidth: function (n, d) {\n if (d > this.maxDepth) {\n this.maxDepth = d;\n }\n var aw = 0, w = 1000, h = 1000, diameter = d === 0 ? 0 : Math.sqrt(w * w + h * h) / d;\n if (n.children.length > 0) {\n for (var i = 0, len = n.children.length; i < len; i++) {\n var child = n.children[i];\n aw += this.calculateAngularWidth(child, d + 1);\n }\n aw = Math.max(diameter, aw);\n } else {\n aw = diameter;\n }\n n.sectorAngle = aw;\n return aw;\n },\n sortChildren: function (n) {\n var basevalue = 0, i;\n if (n.parents.length > 1) {\n throw 'Node is not part of a tree.';\n }\n var p = n.parents[0];\n if (p) {\n var pl = new Point(p.x, p.y);\n var nl = new Point(n.x, n.y);\n basevalue = this.normalizeAngle(Math.atan2(pl.y - nl.y, pl.x - nl.x));\n }\n var count = n.children.length;\n if (count === 0) {\n return null;\n }\n var angle = [];\n var idx = [];\n for (i = 0; i < count; ++i) {\n var c = n.children[i];\n var l = new Point(c.x, c.y);\n idx[i] = i;\n angle[i] = this.normalizeAngle(-basevalue + Math.atan2(l.y - l.y, l.x - l.x));\n }\n Utils.bisort(angle, idx);\n var col = [];\n var children = n.children;\n for (i = 0; i < count; ++i) {\n col.push(children[idx[i]]);\n }\n return col;\n },\n normalizeAngle: function (angle) {\n while (angle > Math.PI * 2) {\n angle -= 2 * Math.PI;\n }\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n return angle;\n },\n radialLayout: function (node, radius, startAngle, endAngle) {\n var deltaTheta = endAngle - startAngle;\n var deltaThetaHalf = deltaTheta / 2;\n var parentSector = node.sectorAngle;\n var fraction = 0;\n var sorted = this.sortChildren(node);\n for (var i = 0, len = sorted.length; i < len; i++) {\n var childNode = sorted[i];\n var cp = childNode;\n var childAngleFraction = cp.sectorAngle / parentSector;\n if (childNode.children.length > 0) {\n this.radialLayout(childNode, radius + this.options.radialSeparation, startAngle + fraction * deltaTheta, startAngle + (fraction + childAngleFraction) * deltaTheta);\n }\n this.setPolarLocation(childNode, radius, startAngle + fraction * deltaTheta + childAngleFraction * deltaThetaHalf);\n cp.angle = childAngleFraction * deltaTheta;\n fraction += childAngleFraction;\n }\n },\n setPolarLocation: function (node, radius, angle) {\n node.x = this.origin.x + radius * Math.cos(angle);\n node.y = this.origin.y + radius * Math.sin(angle);\n node.BoundingRectangle = new Rect(node.x, node.y, node.width, node.height);\n },\n setChildrenDirection: function (node, direction, includeStart) {\n var rootDirection = node.treeDirection;\n this.graph.depthFirstTraversal(node, function (n) {\n n.treeDirection = direction;\n });\n if (!includeStart) {\n node.treeDirection = rootDirection;\n }\n },\n setChildrenLayout: function (node, layout, includeStart, startFromLevel) {\n if (Utils.isUndefined(startFromLevel)) {\n startFromLevel = 0;\n }\n var rootLayout = node.childrenLayout;\n if (startFromLevel > 0) {\n this.graph.assignLevels(node);\n this.graph.depthFirstTraversal(node, function (s) {\n if (s.level >= startFromLevel + 1) {\n s.childrenLayout = layout;\n }\n });\n } else {\n this.graph.depthFirstTraversal(node, function (s) {\n s.childrenLayout = layout;\n });\n if (!includeStart) {\n node.childrenLayout = rootLayout;\n }\n }\n },\n measure: function (node, givenSize) {\n var w = 0, h = 0, s;\n var result = new Size(0, 0);\n if (!node) {\n throw '';\n }\n var b = node.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (node.parents.length !== 1) {\n throw 'Node not in a spanning tree.';\n }\n var parent = node.parents[0];\n if (node.treeDirection === 'Undefined') {\n node.treeDirection = parent.treeDirection;\n }\n if (Utils.isEmpty(node.children)) {\n result = new Size(Math.abs(shapeWidth) < EPSILON ? 50 : shapeWidth, Math.abs(shapeHeight) < EPSILON ? 25 : shapeHeight);\n } else if (node.children.length === 1) {\n switch (node.treeDirection) {\n case 'Radial':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.radialSeparation * Math.cos(node.AngleToParent) + s.width;\n h = shapeHeight + Math.abs(this.options.radialSeparation * Math.sin(node.AngleToParent)) + s.height;\n break;\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n break;\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + s.width + this.options.underneathHorizontalOffset;\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n w = shapeWidth + this.options.horizontalSeparation + s.width;\n h = Math.max(shapeHeight, s.height);\n break;\n default:\n throw 'Unhandled TreeDirection in the Radial layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n s = this.measure(node.children[0], givenSize);\n w = Math.max(shapeWidth, s.width + this.options.underneathHorizontalOffset);\n h = shapeHeight + this.options.underneathVerticalTopOffset + s.height;\n break;\n case 'Default':\n s = this.measure(node.children[0], givenSize);\n h = shapeHeight + this.options.verticalSeparation + s.height;\n w = Math.max(shapeWidth, s.width);\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n } else {\n var i, childNode;\n switch (node.treeDirection) {\n case 'Left':\n case 'Right':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = shapeWidth;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, shapeWidth + this.options.horizontalSeparation + s.width);\n h += s.height + this.options.verticalSeparation;\n }\n h -= this.options.verticalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Right layout measuring.';\n }\n break;\n case 'Up':\n case 'Down':\n switch (node.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n w = shapeWidth;\n h = shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w = Math.max(w, s.width + this.options.underneathHorizontalOffset);\n h += s.height + this.options.underneathVerticalSeparation;\n }\n h -= this.options.underneathVerticalSeparation;\n break;\n case 'Default':\n w = 0;\n h = 0;\n for (i = 0; i < node.children.length; i++) {\n childNode = node.children[i];\n s = this.measure(childNode, givenSize);\n w += s.width + this.options.horizontalSeparation;\n h = Math.max(h, s.height + this.options.verticalSeparation + shapeHeight);\n }\n w -= this.options.horizontalSeparation;\n break;\n default:\n throw 'Unhandled TreeDirection in the Down layout measuring.';\n }\n break;\n default:\n throw 'Unhandled TreeDirection in the layout measuring.';\n }\n result = new Size(w, h);\n }\n node.SectorAngle = Math.sqrt(w * w / 4 + h * h / 4);\n node.Size = result;\n return result;\n },\n arrange: function (n, p) {\n var i, pp, child, node, childrenwidth, b = n.associatedShape.bounds();\n var shapeWidth = b.width;\n var shapeHeight = b.height;\n if (Utils.isEmpty(n.children)) {\n n.x = p.x;\n n.y = p.y;\n n.BoundingRectangle = new Rect(p.x, p.y, shapeWidth, shapeHeight);\n } else {\n var x, y;\n var selfLocation;\n switch (n.treeDirection) {\n case 'Left':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < node.children.length; i++) {\n node = node.children[i];\n x = selfLocation.x - node.associatedShape.width - this.options.underneathHorizontalOffset;\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + n.Size.width - shapeWidth, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = selfLocation.x - this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x - node.Size.width, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Right':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x, p.y + (n.Size.height - shapeHeight) / 2);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + shapeWidth + this.options.horizontalSeparation;\n y = p.y;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.verticalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'Up':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y + n.Size.height - shapeHeight);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y - this.options.verticalSeparation - node.Size.height;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n case 'Down':\n switch (n.childrenLayout) {\n case 'TopAlignedWithParent':\n case 'BottomAlignedWithParent':\n break;\n case 'Underneath':\n selfLocation = p;\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n x = p.x + this.options.underneathHorizontalOffset;\n y = p.y + shapeHeight + this.options.underneathVerticalTopOffset;\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n pp = new Point(x, y);\n this.arrange(node, pp);\n y += node.Size.height + this.options.underneathVerticalSeparation;\n }\n break;\n case 'Default':\n selfLocation = new Point(p.x + (n.Size.width - shapeWidth) / 2, p.y);\n n.x = selfLocation.x;\n n.y = selfLocation.y;\n n.BoundingRectangle = new Rect(n.x, n.y, n.width, n.height);\n if (Math.abs(selfLocation.x - p.x) < EPSILON) {\n childrenwidth = 0;\n for (i = 0; i < n.children.length; i++) {\n child = n.children[i];\n childrenwidth += child.Size.width + this.options.horizontalSeparation;\n }\n childrenwidth -= this.options.horizontalSeparation;\n x = p.x + (shapeWidth - childrenwidth) / 2;\n } else {\n x = p.x;\n }\n for (i = 0; i < n.children.length; i++) {\n node = n.children[i];\n y = selfLocation.y + this.options.verticalSeparation + shapeHeight;\n pp = new Point(x, y);\n this.arrange(node, pp);\n x += node.Size.width + this.options.horizontalSeparation;\n }\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n break;\n case 'None':\n break;\n default:\n throw 'Unsupported TreeDirection';\n }\n }\n },\n layoutSwitch: function () {\n if (!this.center) {\n return;\n }\n if (Utils.isEmpty(this.center.children)) {\n return;\n }\n var type = this.options.subtype;\n if (Utils.isUndefined(type)) {\n type = 'Down';\n }\n var single, male, female, leftcount;\n var children = this.center.children;\n switch (type.toLowerCase()) {\n case 'radial':\n case 'radialtree':\n this.layoutRadialTree();\n break;\n case 'mindmaphorizontal':\n case 'mindmap':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutRight(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutLeft(male);\n this.layoutRight(female);\n }\n break;\n case 'mindmapvertical':\n single = this.center.children;\n if (this.center.children.length === 1) {\n this.layoutDown(single);\n } else {\n leftcount = children.length / 2;\n male = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) < leftcount;\n });\n female = grep(this.center.children, function (n) {\n return Utils.indexOf(children, n) >= leftcount;\n });\n this.layoutUp(male);\n this.layoutDown(female);\n }\n break;\n case 'right':\n this.layoutRight(this.center.children);\n break;\n case 'left':\n this.layoutLeft(this.center.children);\n break;\n case 'up':\n case 'bottom':\n this.layoutUp(this.center.children);\n break;\n case 'down':\n case 'top':\n this.layoutDown(this.center.children);\n break;\n case 'tipover':\n case 'tipovertree':\n if (this.options.tipOverTreeStartLevel < 0) {\n throw 'The tip-over level should be a positive integer.';\n }\n this.tipOverTree(this.center.children, this.options.tipOverTreeStartLevel);\n break;\n case 'undefined':\n case 'none':\n break;\n }\n }\n });\n var TreeLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n this.graph = adapter.convert();\n var finalNodeSet = this.layoutComponents();\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n layoutComponents: function () {\n if (this.graph.isEmpty()) {\n return;\n }\n var components = this.graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n var layout = new TreeLayoutProcessor(this.options);\n var trees = [];\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n var treeGraph = this.getTree(component);\n if (!treeGraph) {\n throw 'Failed to find a spanning tree for the component.';\n }\n var root = treeGraph.root;\n var tree = treeGraph.tree;\n layout.layout(tree, root);\n trees.push(tree);\n }\n return this.gridLayoutComponents(trees);\n },\n getTree: function (graph) {\n var root = null;\n if (this.options.roots && this.options.roots.length > 0) {\n for (var i = 0, len = graph.nodes.length; i < len; i++) {\n var node = graph.nodes[i];\n for (var j = 0; j < this.options.roots.length; j++) {\n var givenRootShape = this.options.roots[j];\n if (givenRootShape === node.associatedShape) {\n root = node;\n break;\n }\n }\n }\n }\n if (!root) {\n root = graph.root();\n if (!root) {\n throw 'Unable to find a root for the tree.';\n }\n }\n return this.getTreeForRoot(graph, root);\n },\n getTreeForRoot: function (graph, root) {\n var tree = graph.getSpanningTree(root);\n if (Utils.isUndefined(tree) || tree.isEmpty()) {\n return null;\n }\n return {\n tree: tree,\n root: tree.root\n };\n }\n });\n var LayeredLayout = LayoutBase.extend({\n init: function (diagram) {\n var that = this;\n LayoutBase.fn.init.call(that);\n if (Utils.isUndefined(diagram)) {\n throw 'Diagram is not specified.';\n }\n this.diagram = diagram;\n },\n layout: function (options) {\n this.transferOptions(options);\n var adapter = new DiagramToHyperTreeAdapter(this.diagram);\n var graph = adapter.convert(options);\n if (graph.isEmpty()) {\n return;\n }\n var components = graph.getConnectedComponents();\n if (Utils.isEmpty(components)) {\n return;\n }\n for (var i = 0; i < components.length; i++) {\n var component = components[i];\n this.layoutGraph(component, options);\n }\n var finalNodeSet = this.gridLayoutComponents(components);\n return new diagram.LayoutState(this.diagram, finalNodeSet);\n },\n _initRuntimeProperties: function () {\n for (var k = 0; k < this.graph.nodes.length; k++) {\n var node = this.graph.nodes[k];\n node.layer = -1;\n node.downstreamLinkCount = 0;\n node.upstreamLinkCount = 0;\n node.isVirtual = false;\n node.uBaryCenter = 0;\n node.dBaryCenter = 0;\n node.upstreamPriority = 0;\n node.downstreamPriority = 0;\n node.gridPosition = 0;\n }\n },\n _prepare: function (graph) {\n var current = [], i, l, link;\n var layerMap = new Dictionary();\n var layerCount = 0;\n var targetLayer, next, target;\n Utils.forEach(graph.nodes, function (node) {\n if (node.incoming.length === 0) {\n layerMap.set(node, 0);\n current.push(node);\n }\n });\n while (current.length > 0) {\n next = current.shift();\n for (i = 0; i < next.outgoing.length; i++) {\n link = next.outgoing[i];\n target = link.target;\n if (layerMap.containsKey(target)) {\n targetLayer = Math.max(layerMap.get(next) + 1, layerMap.get(target));\n } else {\n targetLayer = layerMap.get(next) + 1;\n }\n layerMap.set(target, targetLayer);\n if (targetLayer > layerCount) {\n layerCount = targetLayer;\n }\n if (!contains(current, target)) {\n current.push(target);\n }\n }\n }\n var sortedNodes = layerMap.keys();\n sortedNodes.sort(function (o1, o2) {\n var o1layer = layerMap.get(o1);\n var o2layer = layerMap.get(o2);\n return Utils.sign(o2layer - o1layer);\n });\n for (var n = 0; n < sortedNodes.length; ++n) {\n var node = sortedNodes[n];\n var minLayer = Number.MAX_VALUE;\n if (node.outgoing.length === 0) {\n continue;\n }\n for (l = 0; l < node.outgoing.length; ++l) {\n link = node.outgoing[l];\n minLayer = Math.min(minLayer, layerMap.get(link.target));\n }\n if (minLayer > 1) {\n layerMap.set(node, minLayer - 1);\n }\n }\n this.layers = [];\n var layer;\n for (i = 0; i < layerCount + 1; i++) {\n layer = [];\n layer.linksTo = {};\n this.layers.push(layer);\n }\n layerMap.forEach(function (node, layer) {\n node.layer = layer;\n this.layers[layer].push(node);\n }, this);\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (i = 0; i < layer.length; i++) {\n layer[i].gridPosition = i;\n }\n }\n },\n layoutGraph: function (graph, options) {\n if (Utils.isUndefined(graph)) {\n throw 'No graph given or graph analysis of the diagram failed.';\n }\n if (Utils.isDefined(options)) {\n this.transferOptions(options);\n }\n this.graph = graph;\n graph.setItemIndices();\n var reversedEdges = graph.makeAcyclic();\n this._initRuntimeProperties();\n this._prepare(graph, options);\n this._dummify();\n this._optimizeCrossings();\n this._swapPairs();\n this.arrangeNodes();\n this._moveThingsAround();\n this._dedummify();\n Utils.forEach(reversedEdges, function (e) {\n if (e.points) {\n e.points.reverse();\n }\n });\n },\n setMinDist: function (m, n, minDist) {\n var l = m.layer;\n var i = m.layerIndex;\n this.minDistances[l][i] = minDist;\n },\n getMinDist: function (m, n) {\n var dist = 0, i1 = m.layerIndex, i2 = n.layerIndex, l = m.layer, min = Math.min(i1, i2), max = Math.max(i1, i2);\n for (var k = min; k < max; ++k) {\n dist += this.minDistances[l][k];\n }\n return dist;\n },\n placeLeftToRight: function (leftClasses) {\n var leftPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = leftClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!leftPos.containsKey(node)) {\n this.placeLeft(node, leftPos, c);\n }\n }\n var d = Number.POSITIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var rightSibling = this.rightSibling(node);\n if (rightSibling && this.nodeLeftClass.get(rightSibling) !== c) {\n d = Math.min(d, leftPos.get(rightSibling) - leftPos.get(node) - this.getMinDist(node, rightSibling));\n }\n }\n if (d === Number.POSITIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeLeftClass.get(neighbor) < c) {\n D.push(leftPos.get(neighbor) - leftPos.get(node));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n leftPos.set(node, leftPos.get(node) + d);\n }\n }\n return leftPos;\n },\n placeRightToLeft: function (rightClasses) {\n var rightPos = new Dictionary(), n, node;\n for (var c = 0; c < this.layers.length; ++c) {\n var classNodes = rightClasses[c];\n if (!classNodes) {\n continue;\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n if (!rightPos.containsKey(node)) {\n this.placeRight(node, rightPos, c);\n }\n }\n var d = Number.NEGATIVE_INFINITY;\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var leftSibling = this.leftSibling(node);\n if (leftSibling && this.nodeRightClass.get(leftSibling) !== c) {\n d = Math.max(d, rightPos.get(leftSibling) - rightPos.get(node) + this.getMinDist(leftSibling, node));\n }\n }\n if (d === Number.NEGATIVE_INFINITY) {\n var D = [];\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n var neighbors = [];\n Utils.addRange(neighbors, this.upNodes.get(node));\n Utils.addRange(neighbors, this.downNodes.get(node));\n for (var e = 0; e < neighbors.length; e++) {\n var neighbor = neighbors[e];\n if (this.nodeRightClass.get(neighbor) < c) {\n D.push(rightPos.get(node) - rightPos.get(neighbor));\n }\n }\n }\n D.sort();\n if (D.length === 0) {\n d = 0;\n } else if (D.length % 2 === 1) {\n d = D[this.intDiv(D.length, 2)];\n } else {\n d = (D[this.intDiv(D.length, 2) - 1] + D[this.intDiv(D.length, 2)]) / 2;\n }\n }\n for (n = 0; n < classNodes.length; n++) {\n node = classNodes[n];\n rightPos.set(node, rightPos.get(node) + d);\n }\n }\n return rightPos;\n },\n _getLeftWing: function () {\n var leftWing = { value: null };\n var result = this.computeClasses(leftWing, 1);\n this.nodeLeftClass = leftWing.value;\n return result;\n },\n _getRightWing: function () {\n var rightWing = { value: null };\n var result = this.computeClasses(rightWing, -1);\n this.nodeRightClass = rightWing.value;\n return result;\n },\n computeClasses: function (wingPair, d) {\n var currentWing = 0, wing = wingPair.value = new Dictionary();\n for (var l = 0; l < this.layers.length; ++l) {\n currentWing = l;\n var layer = this.layers[l];\n for (var n = d === 1 ? 0 : layer.length - 1; 0 <= n && n < layer.length; n += d) {\n var node = layer[n];\n if (!wing.containsKey(node)) {\n wing.set(node, currentWing);\n if (node.isVirtual) {\n var ndsinl = this._nodesInLink(node);\n for (var kk = 0; kk < ndsinl.length; kk++) {\n var vnode = ndsinl[kk];\n wing.set(vnode, currentWing);\n }\n }\n } else {\n currentWing = wing.get(node);\n }\n }\n }\n var wings = [];\n for (var i = 0; i < this.layers.length; i++) {\n wings.push(null);\n }\n wing.forEach(function (node, classIndex) {\n if (wings[classIndex] === null) {\n wings[classIndex] = [];\n }\n wings[classIndex].push(node);\n });\n return wings;\n },\n _isVerticalLayout: function () {\n return this.options.subtype.toLowerCase() === 'up' || this.options.subtype.toLowerCase() === 'down' || this.options.subtype.toLowerCase() === 'vertical';\n },\n _isHorizontalLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'left' || this.options.subtype.toLowerCase() === 'horizontal';\n },\n _isIncreasingLayout: function () {\n return this.options.subtype.toLowerCase() === 'right' || this.options.subtype.toLowerCase() === 'down';\n },\n _moveThingsAround: function () {\n var i, l, node, layer, n, w;\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n layer.sort(this._gridPositionComparer);\n }\n this.minDistances = [];\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n this.minDistances[l] = [];\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n node.layerIndex = n;\n this.minDistances[l][n] = this.options.nodeDistance;\n if (n < layer.length - 1) {\n if (this._isVerticalLayout()) {\n this.minDistances[l][n] += (node.width + layer[n + 1].width) / 2;\n } else {\n this.minDistances[l][n] += (node.height + layer[n + 1].height) / 2;\n }\n }\n }\n }\n this.downNodes = new Dictionary();\n this.upNodes = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n this.downNodes.set(node, []);\n this.upNodes.set(node, []);\n }, this);\n Utils.forEach(this.graph.links, function (link) {\n var origin = link.source;\n var dest = link.target;\n var down = null, up = null;\n if (origin.layer > dest.layer) {\n down = link.source;\n up = link.target;\n } else {\n up = link.source;\n down = link.target;\n }\n this.downNodes.get(up).push(down);\n this.upNodes.get(down).push(up);\n }, this);\n this.downNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n this.upNodes.forEachValue(function (list) {\n list.sort(this._gridPositionComparer);\n }, this);\n for (l = 0; l < this.layers.length - 1; ++l) {\n layer = this.layers[l];\n for (w = 0; w < layer.length - 1; w++) {\n var currentNode = layer[w];\n if (!currentNode.isVirtual) {\n continue;\n }\n var currDown = this.downNodes.get(currentNode)[0];\n if (!currDown.isVirtual) {\n continue;\n }\n for (n = w + 1; n < layer.length; ++n) {\n node = layer[n];\n if (!node.isVirtual) {\n continue;\n }\n var downNode = this.downNodes.get(node)[0];\n if (!downNode.isVirtual) {\n continue;\n }\n if (currDown.gridPosition > downNode.gridPosition) {\n var pos = currDown.gridPosition;\n currDown.gridPosition = downNode.gridPosition;\n downNode.gridPosition = pos;\n var i1 = currDown.layerIndex;\n var i2 = downNode.layerIndex;\n this.layers[l + 1][i1] = downNode;\n this.layers[l + 1][i2] = currDown;\n currDown.layerIndex = i2;\n downNode.layerIndex = i1;\n }\n }\n }\n }\n var leftClasses = this._getLeftWing();\n var rightClasses = this._getRightWing();\n var leftPos = this.placeLeftToRight(leftClasses);\n var rightPos = this.placeRightToLeft(rightClasses);\n var x = new Dictionary();\n Utils.forEach(this.graph.nodes, function (node) {\n x.set(node, (leftPos.get(node) + rightPos.get(node)) / 2);\n });\n var order = new Dictionary();\n var placed = new Dictionary();\n for (l = 0; l < this.layers.length; ++l) {\n layer = this.layers[l];\n var sequenceStart = -1, sequenceEnd = -1;\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n order.set(node, 0);\n placed.set(node, false);\n if (node.isVirtual) {\n if (sequenceStart === -1) {\n sequenceStart = n;\n } else if (sequenceStart === n - 1) {\n sequenceStart = n;\n } else {\n sequenceEnd = n;\n order.set(layer[sequenceStart], 0);\n if (x.get(node) - x.get(layer[sequenceStart]) === this.getMinDist(layer[sequenceStart], node)) {\n placed.set(layer[sequenceStart], true);\n } else {\n placed.set(layer[sequenceStart], false);\n }\n sequenceStart = n;\n }\n }\n }\n }\n var directions = [\n 1,\n -1\n ];\n Utils.forEach(directions, function (d) {\n var start = d === 1 ? 0 : this.layers.length - 1;\n for (var l = start; 0 <= l && l < this.layers.length; l += d) {\n var layer = this.layers[l];\n var virtualStartIndex = this._firstVirtualNode(layer);\n var virtualStart = null;\n var sequence = null;\n if (virtualStartIndex !== -1) {\n virtualStart = layer[virtualStartIndex];\n sequence = [];\n for (i = 0; i < virtualStartIndex; i++) {\n sequence.push(layer[i]);\n }\n } else {\n virtualStart = null;\n sequence = layer;\n }\n if (sequence.length > 0) {\n this._sequencer(x, null, virtualStart, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n if (virtualStart) {\n this.setMinDist(sequence[sequence.length - 1], virtualStart, x.get(virtualStart) - x.get(sequence[sequence.length - 1]));\n }\n }\n while (virtualStart) {\n var virtualEnd = this.nextVirtualNode(layer, virtualStart);\n if (!virtualEnd) {\n virtualStartIndex = virtualStart.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < layer.length; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, null, d, sequence);\n for (i = 0; i < sequence.length - 1; ++i) {\n this.setMinDist(sequence[i], sequence[i + 1], x.get(sequence[i + 1]) - x.get(sequence[i]));\n }\n this.setMinDist(virtualStart, sequence[0], x.get(sequence[0]) - x.get(virtualStart));\n }\n } else if (order.get(virtualStart) === d) {\n virtualStartIndex = virtualStart.layerIndex;\n var virtualEndIndex = virtualEnd.layerIndex;\n sequence = [];\n for (i = virtualStartIndex + 1; i < virtualEndIndex; i++) {\n sequence.push(layer[i]);\n }\n if (sequence.length > 0) {\n this._sequencer(x, virtualStart, virtualEnd, d, sequence);\n }\n placed.set(virtualStart, true);\n }\n virtualStart = virtualEnd;\n }\n this.adjustDirections(l, d, order, placed);\n }\n }, this);\n var fromLayerIndex = this._isIncreasingLayout() ? 0 : this.layers.length - 1;\n var reachedFinalLayerIndex = function (k, ctx) {\n if (ctx._isIncreasingLayout()) {\n return k < ctx.layers.length;\n } else {\n return k >= 0;\n }\n };\n var layerIncrement = this._isIncreasingLayout() ? +1 : -1, offset = 0;\n function maximumHeight(layer, ctx) {\n var height = Number.MIN_VALUE;\n for (var n = 0; n < layer.length; ++n) {\n var node = layer[n];\n if (ctx._isVerticalLayout()) {\n height = Math.max(height, node.height);\n } else {\n height = Math.max(height, node.width);\n }\n }\n return height;\n }\n for (i = fromLayerIndex; reachedFinalLayerIndex(i, this); i += layerIncrement) {\n layer = this.layers[i];\n var height = maximumHeight(layer, this);\n for (n = 0; n < layer.length; ++n) {\n node = layer[n];\n if (this._isVerticalLayout()) {\n node.x = x.get(node);\n node.y = offset + height / 2;\n } else {\n node.x = offset + height / 2;\n node.y = x.get(node);\n }\n }\n offset += this.options.layerSeparation + height;\n }\n },\n adjustDirections: function (l, d, order, placed) {\n if (l + d < 0 || l + d >= this.layers.length) {\n return;\n }\n var prevBridge = null, prevBridgeTarget = null;\n var layer = this.layers[l + d];\n for (var n = 0; n < layer.length; ++n) {\n var nextBridge = layer[n];\n if (nextBridge.isVirtual) {\n var nextBridgeTarget = this.getNeighborOnLayer(nextBridge, l);\n if (nextBridgeTarget.isVirtual) {\n if (prevBridge) {\n var p = placed.get(prevBridgeTarget);\n var clayer = this.layers[l];\n var i1 = prevBridgeTarget.layerIndex;\n var i2 = nextBridgeTarget.layerIndex;\n for (var i = i1 + 1; i < i2; ++i) {\n if (clayer[i].isVirtual) {\n p = p && placed.get(clayer[i]);\n }\n }\n if (p) {\n order.set(prevBridge, d);\n var j1 = prevBridge.layerIndex;\n var j2 = nextBridge.layerIndex;\n for (var j = j1 + 1; j < j2; ++j) {\n if (layer[j].isVirtual) {\n order.set(layer[j], d);\n }\n }\n }\n }\n prevBridge = nextBridge;\n prevBridgeTarget = nextBridgeTarget;\n }\n }\n }\n },\n getNeighborOnLayer: function (node, l) {\n var neighbor = this.upNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n neighbor = this.downNodes.get(node)[0];\n if (neighbor.layer === l) {\n return neighbor;\n }\n return null;\n },\n _sequencer: function (x, virtualStart, virtualEnd, dir, sequence) {\n if (sequence.length === 1) {\n this._sequenceSingle(x, virtualStart, virtualEnd, dir, sequence[0]);\n }\n if (sequence.length > 1) {\n var r = sequence.length, t = this.intDiv(r, 2);\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(0, t));\n this._sequencer(x, virtualStart, virtualEnd, dir, sequence.slice(t));\n this.combineSequences(x, virtualStart, virtualEnd, dir, sequence);\n }\n },\n _sequenceSingle: function (x, virtualStart, virtualEnd, dir, node) {\n var neighbors = dir === -1 ? this.downNodes.get(node) : this.upNodes.get(node);\n var n = neighbors.length;\n if (n !== 0) {\n if (n % 2 === 1) {\n x.set(node, x.get(neighbors[this.intDiv(n, 2)]));\n } else {\n x.set(node, (x.get(neighbors[this.intDiv(n, 2) - 1]) + x.get(neighbors[this.intDiv(n, 2)])) / 2);\n }\n if (virtualStart) {\n x.set(node, Math.max(x.get(node), x.get(virtualStart) + this.getMinDist(virtualStart, node)));\n }\n if (virtualEnd) {\n x.set(node, Math.min(x.get(node), x.get(virtualEnd) - this.getMinDist(node, virtualEnd)));\n }\n }\n },\n combineSequences: function (x, virtualStart, virtualEnd, dir, sequence) {\n var r = sequence.length, t = this.intDiv(r, 2);\n var leftHeap = [], i, c, n, neighbors, neighbor, pair;\n for (i = 0; i < t; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) >= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n leftHeap.push({\n k: x.get(neighbor) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: 2\n });\n }\n }\n leftHeap.push({\n k: x.get(sequence[i]) + this.getMinDist(sequence[i], sequence[t - 1]),\n v: c\n });\n }\n if (virtualStart) {\n leftHeap.push({\n k: x.get(virtualStart) + this.getMinDist(virtualStart, sequence[t - 1]),\n v: Number.MAX_VALUE\n });\n }\n leftHeap.sort(this._positionDescendingComparer);\n var rightHeap = [];\n for (i = t; i < r; ++i) {\n c = 0;\n neighbors = dir === -1 ? this.downNodes.get(sequence[i]) : this.upNodes.get(sequence[i]);\n for (n = 0; n < neighbors.length; ++n) {\n neighbor = neighbors[n];\n if (x.get(neighbor) <= x.get(sequence[i])) {\n c++;\n } else {\n c--;\n rightHeap.push({\n k: x.get(neighbor) - this.getMinDist(sequence[i], sequence[t]),\n v: 2\n });\n }\n }\n rightHeap.push({\n k: x.get(sequence[i]) - this.getMinDist(sequence[i], sequence[t]),\n v: c\n });\n }\n if (virtualEnd) {\n rightHeap.push({\n k: x.get(virtualEnd) - this.getMinDist(virtualEnd, sequence[t]),\n v: Number.MAX_VALUE\n });\n }\n rightHeap.sort(this._positionAscendingComparer);\n var leftRes = 0, rightRes = 0;\n var m = this.getMinDist(sequence[t - 1], sequence[t]);\n while (x.get(sequence[t]) - x.get(sequence[t - 1]) < m) {\n if (leftRes < rightRes) {\n if (leftHeap.length === 0) {\n x.set(sequence[t - 1], x.get(sequence[t]) - m);\n break;\n } else {\n pair = leftHeap.shift();\n leftRes = leftRes + pair.v;\n x.set(sequence[t - 1], pair.k);\n x.set(sequence[t - 1], Math.max(x.get(sequence[t - 1]), x.get(sequence[t]) - m));\n }\n } else {\n if (rightHeap.length === 0) {\n x.set(sequence[t], x.get(sequence[t - 1]) + m);\n break;\n } else {\n pair = rightHeap.shift();\n rightRes = rightRes + pair.v;\n x.set(sequence[t], pair.k);\n x.set(sequence[t], Math.min(x.get(sequence[t]), x.get(sequence[t - 1]) + m));\n }\n }\n }\n for (i = t - 2; i >= 0; i--) {\n x.set(sequence[i], Math.min(x.get(sequence[i]), x.get(sequence[t - 1]) - this.getMinDist(sequence[i], sequence[t - 1])));\n }\n for (i = t + 1; i < r; i++) {\n x.set(sequence[i], Math.max(x.get(sequence[i]), x.get(sequence[t]) + this.getMinDist(sequence[i], sequence[t])));\n }\n },\n placeLeft: function (node, leftPos, leftClass) {\n var pos = Number.NEGATIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var leftSibling = this.leftSibling(v);\n if (leftSibling && this.nodeLeftClass.get(leftSibling) === this.nodeLeftClass.get(v)) {\n if (!leftPos.containsKey(leftSibling)) {\n this.placeLeft(leftSibling, leftPos, leftClass);\n }\n pos = Math.max(pos, leftPos.get(leftSibling) + this.getMinDist(leftSibling, v));\n }\n }, this);\n if (pos === Number.NEGATIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n leftPos.set(v, pos);\n });\n },\n placeRight: function (node, rightPos, rightClass) {\n var pos = Number.POSITIVE_INFINITY;\n Utils.forEach(this._getComposite(node), function (v) {\n var rightSibling = this.rightSibling(v);\n if (rightSibling && this.nodeRightClass.get(rightSibling) === this.nodeRightClass.get(v)) {\n if (!rightPos.containsKey(rightSibling)) {\n this.placeRight(rightSibling, rightPos, rightClass);\n }\n pos = Math.min(pos, rightPos.get(rightSibling) - this.getMinDist(v, rightSibling));\n }\n }, this);\n if (pos === Number.POSITIVE_INFINITY) {\n pos = 0;\n }\n Utils.forEach(this._getComposite(node), function (v) {\n rightPos.set(v, pos);\n });\n },\n leftSibling: function (node) {\n var layer = this.layers[node.layer], layerIndex = node.layerIndex;\n return layerIndex === 0 ? null : layer[layerIndex - 1];\n },\n rightSibling: function (node) {\n var layer = this.layers[node.layer];\n var layerIndex = node.layerIndex;\n return layerIndex === layer.length - 1 ? null : layer[layerIndex + 1];\n },\n _getComposite: function (node) {\n return node.isVirtual ? this._nodesInLink(node) : [node];\n },\n arrangeNodes: function () {\n var i, l, ni, layer, node;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.upstreamPriority = node.upstreamLinkCount;\n node.downstreamPriority = node.downstreamLinkCount;\n }\n }\n var maxLayoutIterations = 2;\n for (var it = 0; it < maxLayoutIterations; it++) {\n for (i = this.layers.length - 1; i >= 1; i--) {\n this.layoutLayer(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n this.layoutLayer(true, i);\n }\n }\n var gridPos = Number.MAX_VALUE;\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n gridPos = Math.min(gridPos, node.gridPosition);\n }\n }\n if (gridPos < 0) {\n for (l = 0; l < this.layers.length; l++) {\n layer = this.layers[l];\n for (ni = 0; ni < layer.length; ni++) {\n node = layer[ni];\n node.gridPosition = node.gridPosition - gridPos;\n }\n }\n }\n },\n layoutLayer: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var sorted = [];\n for (var n = 0; n < considered.length; n++) {\n sorted.push(considered[n]);\n }\n sorted.sort(function (n1, n2) {\n var n1Priority = (n1.upstreamPriority + n1.downstreamPriority) / 2;\n var n2Priority = (n2.upstreamPriority + n2.downstreamPriority) / 2;\n if (Math.abs(n1Priority - n2Priority) < 0.0001) {\n return 0;\n }\n if (n1Priority < n2Priority) {\n return 1;\n }\n return -1;\n });\n Utils.forEach(sorted, function (node) {\n var nodeGridPos = node.gridPosition;\n var nodeBaryCenter = this.calcBaryCenter(node);\n var nodePriority = (node.upstreamPriority + node.downstreamPriority) / 2;\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.0001) {\n return;\n }\n if (Math.abs(nodeGridPos - nodeBaryCenter) < 0.25 + 0.0001) {\n return;\n }\n if (nodeGridPos < nodeBaryCenter) {\n while (nodeGridPos < nodeBaryCenter) {\n if (!this.moveRight(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n } else {\n while (nodeGridPos > nodeBaryCenter) {\n if (!this.moveLeft(node, considered, nodePriority)) {\n break;\n }\n nodeGridPos = node.gridPosition;\n }\n }\n }, this);\n if (iconsidered > 0) {\n this.calcDownData(iconsidered - 1);\n }\n if (iconsidered < this.layers.length - 1) {\n this.calcUpData(iconsidered + 1);\n }\n },\n moveRight: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === layer.length - 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n var rightNode = layer[index + 1];\n var rightNodePriority = (rightNode.upstreamPriority + rightNode.downstreamPriority) / 2;\n if (rightNode.gridPosition > node.gridPosition + 1) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n if (rightNodePriority > priority || Math.abs(rightNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveRight(rightNode, layer, priority)) {\n node.gridPosition = node.gridPosition + 0.5;\n return true;\n }\n return false;\n },\n moveLeft: function (node, layer, priority) {\n var index = Utils.indexOf(layer, node);\n if (index === 0) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n var leftNode = layer[index - 1];\n var leftNodePriority = (leftNode.upstreamPriority + leftNode.downstreamPriority) / 2;\n if (leftNode.gridPosition < node.gridPosition - 1) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n if (leftNodePriority > priority || Math.abs(leftNodePriority - priority) < 0.0001) {\n return false;\n }\n if (this.moveLeft(leftNode, layer, priority)) {\n node.gridPosition = node.gridPosition - 0.5;\n return true;\n }\n return false;\n },\n mapVirtualNode: function (node, link) {\n this.nodeToLinkMap.set(node, link);\n if (!this.linkToNodeMap.containsKey(link)) {\n this.linkToNodeMap.set(link, []);\n }\n this.linkToNodeMap.get(link).push(node);\n },\n _nodesInLink: function (node) {\n return this.linkToNodeMap.get(this.nodeToLinkMap.get(node));\n },\n _dummify: function () {\n this.linkToNodeMap = new Dictionary();\n this.nodeToLinkMap = new Dictionary();\n var layer, pos, newNode, node, r, newLink, i, l, links = this.graph.links.slice(0);\n var layers = this.layers;\n var addLinkBetweenLayers = function (upLayer, downLayer, link) {\n layers[upLayer].linksTo[downLayer] = layers[upLayer].linksTo[downLayer] || [];\n layers[upLayer].linksTo[downLayer].push(link);\n };\n for (l = 0; l < links.length; l++) {\n var link = links[l];\n var o = link.source;\n var d = link.target;\n var oLayer = o.layer;\n var dLayer = d.layer;\n var oPos = o.gridPosition;\n var dPos = d.gridPosition;\n var step = (dPos - oPos) / Math.abs(dLayer - oLayer);\n var p = o;\n if (oLayer - dLayer > 1) {\n for (i = oLayer - 1; i > dLayer; i--) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - dLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, newLink);\n link.changeSource(p);\n link.depthOfDumminess = oLayer - dLayer - 1;\n } else if (oLayer - dLayer < -1) {\n for (i = oLayer + 1; i < dLayer; i++) {\n newNode = new Node();\n newNode.x = o.x;\n newNode.y = o.y;\n newNode.width = o.width / 100;\n newNode.height = o.height / 100;\n layer = layers[i];\n pos = (i - oLayer) * step + oPos;\n if (pos > layer.length) {\n pos = layer.length;\n }\n if (oPos >= layers[oLayer].length - 1 && dPos >= layers[dLayer].length - 1) {\n pos = layer.length;\n } else if (oPos === 0 && dPos === 0) {\n pos = 0;\n }\n newNode.layer = i;\n newNode.uBaryCenter = 0;\n newNode.dBaryCenter = 0;\n newNode.upstreamLinkCount = 0;\n newNode.downstreamLinkCount = 0;\n newNode.gridPosition = pos;\n newNode.isVirtual = true;\n pos &= pos;\n Utils.insert(layer, newNode, pos);\n for (r = pos + 1; r < layer.length; r++) {\n node = layer[r];\n node.gridPosition = node.gridPosition + 1;\n }\n newLink = new Link(p, newNode);\n newLink.depthOfDumminess = 0;\n addLinkBetweenLayers(i - 1, i, newLink);\n p = newNode;\n this.graph._addNode(newNode);\n this.graph.addLink(newLink);\n newNode.index = this.graph.nodes.length - 1;\n this.mapVirtualNode(newNode, link);\n }\n addLinkBetweenLayers(dLayer - 1, dLayer, link);\n link.changeSource(p);\n link.depthOfDumminess = dLayer - oLayer - 1;\n } else {\n addLinkBetweenLayers(oLayer, dLayer, link);\n }\n }\n },\n _dedummify: function () {\n var dedum = true;\n while (dedum) {\n dedum = false;\n for (var l = 0; l < this.graph.links.length; l++) {\n var link = this.graph.links[l];\n if (!link.depthOfDumminess) {\n continue;\n }\n var points = [];\n points.unshift({\n x: link.target.x,\n y: link.target.y\n });\n points.unshift({\n x: link.source.x,\n y: link.source.y\n });\n var temp = link;\n var depthOfDumminess = link.depthOfDumminess;\n for (var d = 0; d < depthOfDumminess; d++) {\n var node = temp.source;\n var prevLink = node.incoming[0];\n points.unshift({\n x: prevLink.source.x,\n y: prevLink.source.y\n });\n temp = prevLink;\n }\n link.changeSource(temp.source);\n link.depthOfDumminess = 0;\n if (points.length > 2) {\n points.splice(0, 1);\n points.splice(points.length - 1);\n link.points = points;\n } else {\n link.points = [];\n }\n dedum = true;\n break;\n }\n }\n },\n _optimizeCrossings: function () {\n var moves = -1, i;\n var maxIterations = 3;\n var iter = 0;\n while (moves !== 0) {\n if (iter++ > maxIterations) {\n break;\n }\n moves = 0;\n for (i = this.layers.length - 1; i >= 1; i--) {\n moves += this.optimizeLayerCrossings(false, i);\n }\n for (i = 0; i < this.layers.length - 1; i++) {\n moves += this.optimizeLayerCrossings(true, i);\n }\n }\n },\n calcUpData: function (layer) {\n if (layer === 0) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var upLayer = new Set();\n var temp = this.layers[layer - 1];\n for (i = 0; i < temp.length; i++) {\n upLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (upLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (upLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.uBaryCenter = sum / total;\n node.upstreamLinkCount = total;\n } else {\n node.uBaryCenter = i;\n node.upstreamLinkCount = 0;\n }\n }\n },\n calcDownData: function (layer) {\n if (layer === this.layers.length - 1) {\n return;\n }\n var considered = this.layers[layer], i, l, link;\n var downLayer = new Set();\n var temp = this.layers[layer + 1];\n for (i = 0; i < temp.length; i++) {\n downLayer.add(temp[i]);\n }\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n var sum = 0;\n var total = 0;\n for (l = 0; l < node.incoming.length; l++) {\n link = node.incoming[l];\n if (downLayer.contains(link.source)) {\n total++;\n sum += link.source.gridPosition;\n }\n }\n for (l = 0; l < node.outgoing.length; l++) {\n link = node.outgoing[l];\n if (downLayer.contains(link.target)) {\n total++;\n sum += link.target.gridPosition;\n }\n }\n if (total > 0) {\n node.dBaryCenter = sum / total;\n node.downstreamLinkCount = total;\n } else {\n node.dBaryCenter = i;\n node.downstreamLinkCount = 0;\n }\n }\n },\n optimizeLayerCrossings: function (down, layer) {\n var iconsidered;\n var considered;\n if (down) {\n considered = this.layers[iconsidered = layer + 1];\n } else {\n considered = this.layers[iconsidered = layer - 1];\n }\n var presorted = considered.slice(0);\n if (down) {\n this.calcUpData(iconsidered);\n } else {\n this.calcDownData(iconsidered);\n }\n var that = this;\n considered.sort(function (n1, n2) {\n var n1BaryCenter = that.calcBaryCenter(n1), n2BaryCenter = that.calcBaryCenter(n2);\n if (Math.abs(n1BaryCenter - n2BaryCenter) < 0.0001) {\n if (n1.degree() === n2.degree()) {\n return that.compareByIndex(n1, n2);\n } else if (n1.degree() < n2.degree()) {\n return 1;\n }\n return -1;\n }\n var compareValue = (n2BaryCenter - n1BaryCenter) * 1000;\n if (compareValue > 0) {\n return -1;\n } else if (compareValue < 0) {\n return 1;\n }\n return that.compareByIndex(n1, n2);\n });\n var i, moves = 0;\n for (i = 0; i < considered.length; i++) {\n if (considered[i] !== presorted[i]) {\n moves++;\n }\n }\n if (moves > 0) {\n var inode = 0;\n for (i = 0; i < considered.length; i++) {\n var node = considered[i];\n node.gridPosition = inode++;\n }\n }\n return moves;\n },\n _swapPairs: function () {\n var maxIterations = this.options.layeredIterations;\n var iter = 0;\n while (true) {\n if (iter++ > maxIterations) {\n break;\n }\n var downwards = iter % 4 <= 1;\n var secondPass = iter % 4 === 1;\n for (var l = downwards ? 0 : this.layers.length - 1; downwards ? l <= this.layers.length - 1 : l >= 0; l += downwards ? 1 : -1) {\n var layer = this.layers[l];\n var hasSwapped = false;\n var calcCrossings = true;\n var memCrossings = 0;\n for (var n = 0; n < layer.length - 1; n++) {\n var up = 0;\n var down = 0;\n var crossBefore = 0;\n if (calcCrossings) {\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n crossBefore = up + down;\n } else {\n crossBefore = memCrossings;\n }\n if (crossBefore === 0) {\n continue;\n }\n var node1 = layer[n];\n var node2 = layer[n + 1];\n var node1GridPos = node1.gridPosition;\n var node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n up = 0;\n if (l !== 0) {\n up = this.countLinksCrossingBetweenTwoLayers(l - 1, l);\n }\n down = 0;\n if (l !== this.layers.length - 1) {\n down = this.countLinksCrossingBetweenTwoLayers(l, l + 1);\n }\n if (downwards) {\n up *= 2;\n } else {\n down *= 2;\n }\n var crossAfter = up + down;\n var revert = false;\n if (secondPass) {\n revert = crossAfter >= crossBefore;\n } else {\n revert = crossAfter > crossBefore;\n }\n if (revert) {\n node1 = layer[n];\n node2 = layer[n + 1];\n node1GridPos = node1.gridPosition;\n node2GridPos = node2.gridPosition;\n layer[n] = node2;\n layer[n + 1] = node1;\n node1.gridPosition = node2GridPos;\n node2.gridPosition = node1GridPos;\n memCrossings = crossBefore;\n calcCrossings = false;\n } else {\n hasSwapped = true;\n calcCrossings = true;\n }\n }\n if (hasSwapped) {\n if (l !== this.layers.length - 1) {\n this.calcUpData(l + 1);\n }\n if (l !== 0) {\n this.calcDownData(l - 1);\n }\n }\n }\n }\n },\n countLinksCrossingBetweenTwoLayers: function (ulayer, dlayer) {\n var links = this.layers[ulayer].linksTo[dlayer];\n var link1, link2, n11, n12, n21, n22, l1, l2;\n var crossings = 0;\n var length = links.length;\n for (l1 = 0; l1 < length; l1++) {\n link1 = links[l1];\n for (l2 = l1 + 1; l2 < length; l2++) {\n link2 = links[l2];\n if (link1.target.layer === dlayer) {\n n11 = link1.source;\n n12 = link1.target;\n } else {\n n11 = link1.target;\n n12 = link1.source;\n }\n if (link2.target.layer === dlayer) {\n n21 = link2.source;\n n22 = link2.target;\n } else {\n n21 = link2.target;\n n22 = link2.source;\n }\n var n11gp = n11.gridPosition;\n var n12gp = n12.gridPosition;\n var n21gp = n21.gridPosition;\n var n22gp = n22.gridPosition;\n if ((n11gp - n21gp) * (n12gp - n22gp) < 0) {\n crossings++;\n }\n }\n }\n return crossings;\n },\n calcBaryCenter: function (node) {\n var upstreamLinkCount = node.upstreamLinkCount;\n var downstreamLinkCount = node.downstreamLinkCount;\n var uBaryCenter = node.uBaryCenter;\n var dBaryCenter = node.dBaryCenter;\n if (upstreamLinkCount > 0 && downstreamLinkCount > 0) {\n return (uBaryCenter + dBaryCenter) / 2;\n }\n if (upstreamLinkCount > 0) {\n return uBaryCenter;\n }\n if (downstreamLinkCount > 0) {\n return dBaryCenter;\n }\n return 0;\n },\n _gridPositionComparer: function (x, y) {\n if (x.gridPosition < y.gridPosition) {\n return -1;\n }\n if (x.gridPosition > y.gridPosition) {\n return 1;\n }\n return 0;\n },\n _positionAscendingComparer: function (x, y) {\n return x.k < y.k ? -1 : x.k > y.k ? 1 : 0;\n },\n _positionDescendingComparer: function (x, y) {\n return x.k < y.k ? 1 : x.k > y.k ? -1 : 0;\n },\n _firstVirtualNode: function (layer) {\n for (var c = 0; c < layer.length; c++) {\n if (layer[c].isVirtual) {\n return c;\n }\n }\n return -1;\n },\n compareByIndex: function (o1, o2) {\n var i1 = o1.index;\n var i2 = o2.index;\n if (i1 < i2) {\n return 1;\n }\n if (i1 > i2) {\n return -1;\n }\n return 0;\n },\n intDiv: function (numerator, denominator) {\n return (numerator - numerator % denominator) / denominator;\n },\n nextVirtualNode: function (layer, node) {\n var nodeIndex = node.layerIndex;\n for (var i = nodeIndex + 1; i < layer.length; ++i) {\n if (layer[i].isVirtual) {\n return layer[i];\n }\n }\n return null;\n }\n });\n var LayoutState = kendo.Class.extend({\n init: function (diagram, graphOrNodes) {\n if (Utils.isUndefined(diagram)) {\n throw 'No diagram given';\n }\n this.diagram = diagram;\n this.nodeMap = new Dictionary();\n this.linkMap = new Dictionary();\n this.capture(graphOrNodes ? graphOrNodes : diagram);\n },\n capture: function (diagramOrGraphOrNodes) {\n var node, nodes, shape, i, conn, link, links;\n if (diagramOrGraphOrNodes instanceof diagram.Graph) {\n for (i = 0; i < diagramOrGraphOrNodes.nodes.length; i++) {\n node = diagramOrGraphOrNodes.nodes[i];\n shape = node.associatedShape;\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n for (i = 0; i < diagramOrGraphOrNodes.links.length; i++) {\n link = diagramOrGraphOrNodes.links[i];\n conn = link.associatedConnection;\n this.linkMap.set(conn.visual.id, link.points());\n }\n } else if (diagramOrGraphOrNodes instanceof Array) {\n nodes = diagramOrGraphOrNodes;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n } else if (diagramOrGraphOrNodes.hasOwnProperty('links') && diagramOrGraphOrNodes.hasOwnProperty('nodes')) {\n nodes = diagramOrGraphOrNodes.nodes;\n links = diagramOrGraphOrNodes.links;\n for (i = 0; i < nodes.length; i++) {\n node = nodes[i];\n shape = node.associatedShape;\n if (shape) {\n this.nodeMap.set(shape.visual.id, new Rect(node.x, node.y, node.width, node.height));\n }\n }\n for (i = 0; i < links.length; i++) {\n link = links[i];\n conn = link.associatedConnection;\n if (conn) {\n this.linkMap.set(conn.visual.id, link.points);\n }\n }\n } else {\n var shapes = this.diagram.shapes;\n var connections = this.diagram.connections;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n this.nodeMap.set(shape.visual.id, shape.bounds());\n }\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n this.linkMap.set(conn.visual.id, conn.points());\n }\n }\n }\n });\n deepExtend(diagram, {\n init: function (element) {\n kendo.init(element, diagram.ui);\n },\n SpringLayout: SpringLayout,\n TreeLayout: TreeLayout,\n GraphAdapter: DiagramToHyperTreeAdapter,\n LayeredLayout: LayeredLayout,\n LayoutBase: LayoutBase,\n LayoutState: LayoutState\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.toolbar', [\n 'kendo.core',\n 'kendo.userevents',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'toolbar',\n name: 'ToolBar',\n category: 'web',\n description: 'The ToolBar widget displays one or more command buttons divided into groups.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Class = kendo.Class, Widget = kendo.ui.Widget, proxy = $.proxy, isFunction = kendo.isFunction, keys = kendo.keys, outerWidth = kendo._outerWidth, ns = '.kendoToolBar', TOOLBAR = 'k-toolbar', BUTTON = 'k-button', OVERFLOW_BUTTON = 'k-overflow-button', TOGGLE_BUTTON = 'k-toggle-button', BUTTON_GROUP = 'k-button-group', SPLIT_BUTTON = 'k-split-button', SEPARATOR = 'k-separator', SPACER_CLASS = 'k-spacer', SPACER = 'spacer', POPUP = 'k-popup', RESIZABLE_TOOLBAR = 'k-toolbar-resizable', STATE_ACTIVE = 'k-state-active', STATE_DISABLED = 'k-state-disabled', STATE_HIDDEN = 'k-state-hidden', HIDDEN = 'k-hidden', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ARIA_DISABLED = 'aria-disabled', ARIA_PRESSED = 'aria-pressed', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', OPTION_LIST_SUFFIX = '_optionlist', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '
    ',\n overflowContainer: '
      '\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN);\n this.element.removeClass(HIDDEN);\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass(HIDDEN);\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.element.attr(ARIA_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow && this.options.splitContainerId) {\n return $('#' + this.options.splitContainerId).find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && kendo.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.togglable) {\n this.element.attr(ARIA_PRESSED, selected);\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html('' + options.text + '');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n if (options.togglable) {\n this.toggle(options.selected);\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('
    • ').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
    • ');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('');\n this.popupElement = $('
        ');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown' + ns, '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('
      • ').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + OPTION_LIST_SUFFIX).attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n return;\n }\n that.adjustPopupWidth(e.sender);\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK + ns, 'a.k-button', preventClick);\n },\n adjustPopupWidth: function (popup) {\n var anchor = popup.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(popup.element).addClass('k-split-wrapper');\n if (popup.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(popup.element) - popup.element.width());\n } else {\n width = computedWidth;\n }\n popup.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n },\n remove: function () {\n this.popup.element.off(CLICK + ns, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n if (this.options.enable || this.popup.visible()) {\n this.popup.toggle();\n }\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.element.attr(ARIA_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN);\n this.element.addClass(HIDDEN);\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN);\n this.element.removeClass(HIDDEN);\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      • '), items = options.menuButtons, item, splitContainerId;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n this.mainButton = new OverflowButton($.extend({ isChild: true }, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n type: 'button',\n splitContainerId: splitContainerId,\n isChild: true\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
         
        ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      •  
      • ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var ToolBarSpacer = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
         
        ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n element.addClass(SPACER_CLASS);\n element.data({ type: SPACER });\n }\n });\n kendo.toolbar.registerComponent(SPACER, ToolBarSpacer);\n var TemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? template(options) : template;\n if (!(element instanceof jQuery)) {\n element = $('
        ').html(element);\n } else {\n element = element.wrap('
        ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.attributes();\n this.addUidAttr();\n this.addIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n }\n });\n kendo.toolbar.TemplateItem = TemplateItem;\n var OverflowTemplateItem = Item.extend({\n init: function (template, options, toolbar) {\n var element = isFunction(template) ? $(template(options)) : $(template);\n if (!(element instanceof jQuery)) {\n element = $('
      • ').html(element);\n } else {\n element = element.wrap('
      • ').parent();\n }\n this.element = element;\n this.options = options;\n this.options.type = 'template';\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n this.addOverflowAttr();\n element.data({\n type: 'template',\n template: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowTemplateItem = OverflowTemplateItem;\n function toggleActive(e) {\n if (!e.target.is('.k-toggle-button')) {\n e.target.toggleClass(STATE_ACTIVE, e.type == 'press');\n }\n }\n function actionSheetWrap(element) {\n element = $(element);\n return element.hasClass('km-actionsheet') ? element.closest('.km-popup-wrapper') : element.addClass('km-widget km-actionsheet').wrap('
        ').parent().wrap('
        ').parent();\n }\n function preventClick(e) {\n if ($(e.target).closest('a.k-button').length) {\n e.preventDefault();\n }\n }\n function findFocusableSibling(element, dir) {\n var getSibling = dir === 'next' ? $.fn.next : $.fn.prev;\n var getter = dir === 'next' ? $.fn.first : $.fn.last;\n var candidate = getSibling.call(element);\n if (!candidate.length && element.is('.' + OVERFLOW_ANCHOR)) {\n return element;\n }\n if (candidate.is(':kendoFocusable') || !candidate.length) {\n return candidate;\n }\n if (candidate.find(':kendoFocusable').length) {\n return getter.call(candidate.find(':kendoFocusable'));\n }\n return findFocusableSibling(candidate, dir);\n }\n var Group = Class.extend({\n init: function (name) {\n this.name = name;\n this.buttons = [];\n },\n add: function (button) {\n this.buttons[this.buttons.length] = button;\n },\n remove: function (button) {\n var index = $.inArray(button, this.buttons);\n this.buttons.splice(index, 1);\n },\n select: function (button) {\n var tmp;\n for (var i = 0; i < this.buttons.length; i++) {\n tmp = this.buttons[i];\n tmp.select(false);\n }\n button.select(true);\n if (button.twin()) {\n button.twin().select(true);\n }\n }\n });\n var ToolBar = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.wrapper = that.element;\n element.addClass(TOOLBAR + ' k-widget');\n this.uid = kendo.guid();\n this._isRtl = kendo.support.isRtl(element);\n this._groups = {};\n element.attr(KENDO_UID_ATTR, this.uid);\n that.isMobile = typeof options.mobile === 'boolean' ? options.mobile : that.element.closest('.km-root')[0];\n that.animation = that.isMobile ? { open: { effects: 'fade' } } : {};\n if (that.isMobile) {\n element.addClass('km-widget');\n ICON = 'km-icon';\n ICON_PREFIX = 'km-';\n BUTTON = 'km-button';\n BUTTON_GROUP = 'km-buttongroup';\n STATE_ACTIVE = 'km-state-active';\n STATE_DISABLED = 'km-state-disabled';\n }\n if (options.resizable) {\n that._renderOverflow();\n element.addClass(RESIZABLE_TOOLBAR);\n that.overflowUserEvents = new kendo.UserEvents(that.element, {\n threshold: 5,\n allowSelection: true,\n filter: '.' + OVERFLOW_ANCHOR,\n tap: proxy(that._toggleOverflow, that)\n });\n that._resizeHandler = kendo.onResize(function () {\n that.resize();\n });\n } else {\n that.popup = { element: $([]) };\n }\n if (options.items && options.items.length) {\n for (var i = 0; i < options.items.length; i++) {\n that.add(options.items[i]);\n }\n if (options.resizable) {\n that._shrink(that.element.innerWidth());\n }\n }\n that.userEvents = new kendo.UserEvents(document, {\n threshold: 5,\n allowSelection: true,\n filter: '[' + KENDO_UID_ATTR + '=' + this.uid + '] a.' + BUTTON + ', ' + '[' + KENDO_UID_ATTR + '=' + this.uid + '] .' + OVERFLOW_BUTTON,\n tap: proxy(that._buttonClick, that),\n press: toggleActive,\n release: toggleActive\n });\n that.element.on(CLICK + ns, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK + ns, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(ns, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(ns, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate || options.type === SPACER) {\n options.overflow = OVERFLOW_NEVER;\n } else if (!options.overflow) {\n options.overflow = OVERFLOW_AUTO;\n }\n if (options.overflow !== OVERFLOW_NEVER && that.options.resizable) {\n if (overflowTemplate) {\n overflowTool = new OverflowTemplateItem(overflowTemplate, options, that);\n } else if (component) {\n overflowTool = new component.overflow(options, that);\n overflowTool.element.addClass(itemClasses);\n }\n if (overflowTool) {\n if (options.overflow === OVERFLOW_AUTO) {\n overflowTool.overflowHidden();\n }\n overflowTool.element.appendTo(that.popup.container);\n that.angular('compile', function () {\n return { elements: overflowTool.element.get() };\n });\n }\n }\n if (options.overflow !== OVERFLOW_ALWAYS) {\n if (template) {\n tool = new TemplateItem(template, options, that);\n } else if (component) {\n tool = new component.toolbar(options, that);\n }\n if (tool) {\n tool.element.appendTo(that.element);\n that.angular('compile', function () {\n return { elements: tool.element.get() };\n });\n }\n }\n },\n _getItem: function (candidate) {\n var element, toolbarItem, overflowItem, isResizable = this.options.resizable, type;\n element = this.element.find(candidate);\n if (!element.length) {\n element = $('.k-split-container[data-uid=' + this.uid + ']').find(candidate);\n }\n type = element.length ? element.data('type') : '';\n toolbarItem = element.data(type);\n if (toolbarItem) {\n if (toolbarItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n toolbarItem = element.data(type);\n }\n if (isResizable) {\n overflowItem = toolbarItem.twin();\n }\n } else if (isResizable) {\n element = this.popup.element.find(candidate);\n type = element.length ? element.data('type') : '';\n overflowItem = element.data(type);\n if (overflowItem && overflowItem.main) {\n element = element.parent('.' + SPLIT_BUTTON);\n type = 'splitButton';\n overflowItem = element.data(type);\n }\n }\n return {\n type: type,\n toolbar: toolbarItem,\n overflow: overflowItem\n };\n },\n remove: function (candidate) {\n var item = this._getItem(candidate);\n if (item.toolbar) {\n item.toolbar.remove();\n }\n if (item.overflow) {\n item.overflow.remove();\n }\n this.resize(true);\n },\n hide: function (candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.toolbar.options.hidden) {\n item.toolbar.hide();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n item.overflow.hide();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (!item.overflow.options.hidden) {\n item.overflow.hide();\n }\n }\n this.resize(true);\n },\n show: function (candidate) {\n var item = this._getItem(candidate);\n var buttonGroupInstance;\n if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n buttonGroupInstance = item.toolbar.getParentGroup();\n item.toolbar.show();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n buttonGroupInstance = item.overflow.getParentGroup();\n item.toolbar.show();\n if (buttonGroupInstance) {\n buttonGroupInstance.refresh();\n }\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown' + ns, '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n var paddingEnd = this._isRtl ? 'padding-left' : 'padding-right';\n if (this.options.mobile) {\n hasVisibleChildren = this.popup.element.find('.' + OVERFLOW_CONTAINER).children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n } else {\n hasVisibleChildren = this.popup.element.children(':not(.' + OVERFLOW_HIDDEN + ', .' + POPUP + ')').length > 0;\n }\n if (hasVisibleChildren) {\n this.overflowAnchor.css({\n visibility: 'visible',\n width: ''\n });\n this.wrapper.css(paddingEnd, this.overflowAnchor.outerWidth(true));\n } else {\n this.overflowAnchor.css({\n visibility: 'hidden',\n width: '1px'\n });\n this.wrapper.css(paddingEnd, '');\n }\n },\n _buttonClick: function (e) {\n var that = this, popup, target, item, splitContainer, isSplitButtonArrow = e.target.closest('.' + SPLIT_BUTTON_ARROW).length, handler, eventData, urlTarget;\n e.preventDefault();\n if (isSplitButtonArrow) {\n that._toggle(e);\n return;\n }\n target = $(e.target).closest('.' + BUTTON, that.element);\n if (target.hasClass(OVERFLOW_ANCHOR)) {\n return;\n }\n item = target.data('button');\n if (!item && that.popup) {\n target = $(e.target).closest('.' + OVERFLOW_BUTTON, that.popup.container);\n item = target.parent('li').data('button');\n }\n if (!item || !item.options.enable) {\n return;\n }\n if (item.options.togglable) {\n handler = isFunction(item.toggleHandler) ? item.toggleHandler : null;\n item.toggle(!item.options.selected, true);\n eventData = {\n target: target,\n group: item.options.group,\n checked: item.options.selected,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(TOGGLE, eventData);\n } else {\n handler = isFunction(item.clickHandler) ? item.clickHandler : null;\n eventData = {\n sender: that,\n target: target,\n id: item.options.id,\n item: item\n };\n if (handler) {\n handler.call(that, eventData);\n }\n that.trigger(CLICK, eventData);\n }\n if (item.options.url) {\n if (item.options.attributes && item.options.attributes.target) {\n urlTarget = item.options.attributes.target;\n }\n window.open(item.options.url, urlTarget || '_self');\n }\n if (target.hasClass(OVERFLOW_BUTTON)) {\n that.popup.close();\n }\n splitContainer = target.closest('.k-split-container');\n if (splitContainer[0]) {\n popup = splitContainer.data('kendoPopup');\n (popup ? popup : splitContainer.parents('.km-popup-wrapper').data('kendoPopup')).close();\n }\n },\n _navigatable: function () {\n var that = this;\n that.element.attr('tabindex', 0).on('focusin' + ns, function (ev) {\n var target = $(ev.target);\n var element = $(this).find(':kendoFocusable:first');\n if (!target.is('.' + TOOLBAR) || element.length === 0) {\n return;\n }\n if (element.is('.' + OVERFLOW_ANCHOR)) {\n element = findFocusableSibling(element, 'next');\n }\n if (element.length) {\n element[0].focus();\n }\n }).on('keydown' + ns, proxy(that._keydown, that));\n },\n _keydown: function (e) {\n var target = $(e.target), keyCode = e.keyCode, items = this.element.children(':not(.k-separator):visible'), direction = this._isRtl ? -1 : 1;\n if (keyCode === keys.TAB) {\n var element = target.parentsUntil(this.element).last(), lastHasFocus = false, firstHasFocus = false, isOnlyOverflowAnchor = false;\n if (!items.not('.' + OVERFLOW_ANCHOR).length) {\n isOnlyOverflowAnchor = true;\n }\n if (!element.length) {\n element = target;\n }\n if (element.is('.' + OVERFLOW_ANCHOR) && !isOnlyOverflowAnchor) {\n var lastItemNotOverflowAnchor = items.last();\n if (e.shiftKey) {\n e.preventDefault();\n }\n if (lastItemNotOverflowAnchor.is(':kendoFocusable')) {\n items.last().focus();\n } else {\n items.last().find(':kendoFocusable').last().focus();\n }\n }\n if (!e.shiftKey && items.index(element) === items.length - 1) {\n if (element.is('.' + BUTTON_GROUP)) {\n lastHasFocus = target.is(':last-child');\n } else {\n lastHasFocus = true;\n }\n }\n var isFirstTool = items.index(element) === items.not('.k-overflow-anchor').first().index();\n if (e.shiftKey && isFirstTool) {\n if (element.is('.' + BUTTON_GROUP)) {\n firstHasFocus = target.is(':first-child');\n } else {\n firstHasFocus = true;\n }\n }\n if (lastHasFocus && this.overflowAnchor && this.overflowAnchor.css('visibility') !== 'hidden' && !isOnlyOverflowAnchor) {\n e.preventDefault();\n this.overflowAnchor.focus();\n }\n if (firstHasFocus || isOnlyOverflowAnchor && e.shiftKey) {\n e.preventDefault();\n var prevFocusable = this._getPrevFocusable(this.wrapper);\n if (prevFocusable) {\n prevFocusable.focus();\n }\n }\n this._preventNextFocus = false;\n }\n if (e.altKey && keyCode === keys.DOWN) {\n var splitButton = $(document.activeElement).data('splitButton');\n var isOverflowAnchor = $(document.activeElement).is('.' + OVERFLOW_ANCHOR);\n if (splitButton) {\n splitButton.toggle();\n } else if (isOverflowAnchor) {\n this._toggleOverflow();\n }\n return;\n }\n if ((keyCode === keys.SPACEBAR || keyCode === keys.ENTER) && !target.is('input, checkbox')) {\n if (keyCode === keys.SPACEBAR) {\n e.preventDefault();\n }\n if (target.is('.' + SPLIT_BUTTON)) {\n target = target.children().first();\n this.userEvents.trigger('tap', { target: target });\n } else if (keyCode === keys.SPACEBAR) {\n this.userEvents.trigger('tap', { target: target });\n }\n return;\n }\n if (keyCode === keys.HOME) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor) {\n items.eq(1).focus();\n } else {\n items.first().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.END) {\n if (target.is('.k-dropdown') || target.is('input')) {\n return;\n }\n if (this.overflowAnchor && $(this.overflowAnchor).css('visibility') != 'hidden') {\n this.overflowAnchor.focus();\n } else {\n items.last().focus();\n }\n e.preventDefault();\n } else if (keyCode === keys.RIGHT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, 1 * direction)) {\n this._getNextElement(e.target, 1 * direction).focus();\n e.preventDefault();\n } else if (keyCode === keys.LEFT && !this._preventNextFocus && !target.is('input, select, .k-dropdown, .k-colorpicker') && this._getNextElement(e.target, -1 * direction)) {\n this._getNextElement(e.target, -1 * direction).focus();\n e.preventDefault();\n }\n },\n _getNextElement: function (item, direction) {\n var items = this.element.children(':not(.k-separator):visible');\n var itemIndex = items.index(item) === -1 ? items.index(item.parentElement) : items.index(item);\n var startIndex = this.overflowAnchor ? 1 : 0;\n var directionNumber = direction;\n var searchIndex = direction === 1 ? items.length - 1 : startIndex;\n var index = direction === 1 ? startIndex : items.length - 1;\n var focusableItem = items[itemIndex + direction];\n this._preventNextFocus = false;\n if ($(item).closest('.' + BUTTON_GROUP).length && !$(item).is(direction === 1 ? ':last-child' : ':first-child')) {\n return $(item).closest('.' + BUTTON_GROUP).children()[$(item).closest('.' + BUTTON_GROUP).children().index(item) + direction];\n }\n if (this.overflowAnchor && item === this.overflowAnchor[0] && direction === -1) {\n focusableItem = items[items.length - 1];\n }\n if (itemIndex === searchIndex) {\n focusableItem = !this.overflowAnchor || this.overflowAnchor && $(this.overflowAnchor).css('visibility') === 'hidden' ? items[index] : this.overflowAnchor;\n }\n while (!$(focusableItem).is(':kendoFocusable')) {\n if (direction === -1 && $(focusableItem).closest('.' + BUTTON_GROUP).length) {\n focusableItem = $(focusableItem).children(':not(label, div)').last();\n } else {\n focusableItem = $(focusableItem).children(':not(label, div)').first();\n }\n if (!focusableItem.length) {\n directionNumber = directionNumber + direction;\n focusableItem = items[itemIndex + directionNumber];\n if (!focusableItem) {\n return this.overflowAnchor;\n }\n }\n this._preventNextFocus = $(focusableItem).closest('.' + BUTTON_GROUP).length ? false : true;\n }\n return focusableItem;\n },\n _getPrevFocusable: function (element) {\n if (element.is('html')) {\n return element;\n }\n var elementToFocus, prevElement, prevElements = element.prevAll();\n prevElements.each(function () {\n prevElement = $(this);\n if (prevElement.is(':kendoFocusable')) {\n elementToFocus = prevElement;\n return false;\n } else if (prevElement.find(':kendoFocusable').length > 0) {\n elementToFocus = prevElement.find(':kendoFocusable').last();\n return false;\n }\n });\n if (elementToFocus) {\n return elementToFocus;\n } else {\n return this._getPrevFocusable(element.parent());\n }\n },\n _toggle: function (e) {\n var splitButton = $(e.target).closest('.' + SPLIT_BUTTON).data('splitButton');\n e.preventDefault();\n if (!splitButton.options.enable) {\n return;\n }\n splitButton.toggle();\n },\n _toggleOverflow: function () {\n this.popup.toggle();\n },\n _resize: function (e) {\n var containerWidth = e.width;\n if (!this.options.resizable) {\n return;\n }\n this.popup.close();\n this._shrink(containerWidth);\n this._stretch(containerWidth);\n this._markVisibles();\n this._toggleOverflowAnchor();\n },\n _childrenWidth: function () {\n var childrenWidth = 0;\n this.element.children(':visible:not(.' + STATE_HIDDEN + ', .' + SPACER_CLASS + ')').each(function () {\n childrenWidth += outerWidth($(this), true);\n });\n return Math.ceil(childrenWidth);\n },\n _shrink: function (containerWidth) {\n var commandElement, visibleCommands;\n if (containerWidth < this._childrenWidth()) {\n visibleCommands = this.element.children(':visible:not([data-overflow=\\'never\\'], .' + OVERFLOW_ANCHOR + ')');\n for (var i = visibleCommands.length - 1; i >= 0; i--) {\n commandElement = visibleCommands.eq(i);\n if (containerWidth > this._childrenWidth()) {\n break;\n } else {\n this._hideItem(commandElement);\n }\n }\n }\n },\n _stretch: function (containerWidth) {\n var commandElement, hiddenCommands;\n if (containerWidth > this._childrenWidth()) {\n hiddenCommands = this.element.children(':hidden:not(\\'.' + STATE_HIDDEN + '\\')');\n for (var i = 0; i < hiddenCommands.length; i++) {\n commandElement = hiddenCommands.eq(i);\n if (containerWidth < this._childrenWidth() || !this._showItem(commandElement, containerWidth)) {\n break;\n }\n }\n }\n },\n _hideItem: function (item) {\n item.addClass(HIDDEN);\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n item.removeClass(HIDDEN);\n var itemOuterWidth = outerWidth(item, true);\n item.addClass(HIDDEN);\n if (item.length && containerWidth > this._childrenWidth() + itemOuterWidth) {\n item.removeClass(HIDDEN);\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerHeight = kendo._outerHeight, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', GROUPHEADER = '.k-group-header', ITEMSELECTOR = '.k-item', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', BLUR = 'blur', FOCUS = 'focus', FOCUSOUT = 'focusout', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': [\n 'DropDownList',\n 'MultiColumnComboBox'\n ],\n 'DropDownList': [\n 'ComboBox',\n 'MultiColumnComboBox'\n ],\n 'MultiColumnComboBox': [\n 'ComboBox',\n 'DropDownList'\n ]\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('
          ').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('
          ').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n id = element.attr(ID);\n if (!id) {\n id = kendo.guid();\n }\n that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\n if (options.columns && options.columns.length) {\n that.ul.removeClass('k-list').addClass('k-grid-list');\n that._columnsHeader();\n }\n that._header();\n that._noData();\n that._footer();\n that._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n footerTemplate: '',\n headerTemplate: '',\n noDataTemplate: true,\n messages: {\n 'noData': 'No data found.',\n 'clear': 'clear'\n }\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (options.columns && options.columns.length) {\n this._columnsHeader();\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _header: function () {\n var list = this;\n var header = $(list.header);\n var template = list.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n list.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n list.header = header[0] ? header : null;\n list.list.prepend(header);\n this._angularElement(list.header, 'compile');\n },\n _columnsHeader: function () {\n var list = this;\n var columnsHeader = $(list.columnsHeader);\n this._angularElement(columnsHeader, 'cleanup');\n kendo.destroy(columnsHeader);\n columnsHeader.remove();\n var header = '
          ';\n var colGroup = '';\n var row = '';\n for (var idx = 0; idx < this.options.columns.length; idx++) {\n var currentColumn = this.options.columns[idx];\n var title = currentColumn.title || currentColumn.field || '';\n var template = currentColumn.headerTemplate || title;\n var columnsHeaderTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n var currentWidth = currentColumn.width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n colGroup += '';\n row += '';\n }\n colGroup += '';\n row += '';\n header += colGroup;\n header += row;\n header += '
          ';\n row += columnsHeaderTemplate(currentColumn);\n row += '
          ';\n list.columnsHeader = columnsHeader = $(header);\n list.list.prepend(columnsHeader);\n this._angularElement(list.columnsHeader, 'compile');\n },\n _noData: function () {\n var list = this;\n var noData = $(list.noData);\n var template = list.options.noDataTemplate === true ? list.options.messages.noData : list.options.noDataTemplate;\n list.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n list.noData = null;\n return;\n }\n list.noData = $('
          ').appendTo(list.list);\n list.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _footer: function () {\n var list = this;\n var footer = $(list.footer);\n var template = list.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n list.footer = null;\n return;\n }\n list.footer = $('
          ').appendTo(list.list);\n list.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _listOptions: function (options) {\n var that = this;\n var currentOptions = that.options;\n var virtual = currentOptions.virtual;\n var changeEventOption = { change: proxy(that._listChange, that) };\n var listBoundHandler = proxy(that._listBound, that);\n 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 }, 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;\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.add(that.filterInput);\n if (options.suggest !== undefined) {\n element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n }\n id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n element.attr('aria-owns', id);\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 _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 (value !== unifyType(that._old, typeof value) && value !== unifyType(that._oldText, typeof 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 that._oldText = that.text && that.text();\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 _makeUnselectable: function () {\n if (isIE8) {\n this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n that._cascadedValue = that.value();\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n if (typeof value !== 'boolean') {\n value = value.toLowerCase() === 'true';\n }\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n that.listView._current = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._cascadeValue = that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _syncValueAndText: function () {\n return true;\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('
          ').parent();\n this.header = this.content.before('
          ').prev();\n this.bound(false);\n this._optionID = kendo.guid();\n this._selectedIndices = [];\n this._view = [];\n this._dataItems = [];\n this._values = [];\n var value = this.options.value;\n if (value) {\n this._values = $.isArray(value) ? value.slice(0) : [value];\n }\n this._getter();\n this._templates();\n this.setDataSource(this.options.dataSource);\n this._onScroll = proxy(function () {\n var that = this;\n clearTimeout(that._scrollId);\n that._scrollId = setTimeout(function () {\n that._renderHeader();\n }, 50);\n }, this);\n },\n options: {\n name: 'StaticList',\n dataValueField: null,\n valuePrimitive: false,\n selectable: true,\n template: null,\n groupTemplate: null,\n fixedGroupTemplate: null\n },\n events: [\n 'click',\n CHANGE,\n 'activate',\n 'deactivate',\n 'dataBinding',\n 'dataBound',\n 'selectedItemChange'\n ],\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n value = that.value();\n that.value([]);\n that.bound(false);\n that.value(value);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n that.setDSFilter(dataSource.filter());\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that._fixedHeader();\n },\n _touchHandlers: function () {\n var that = this;\n var startY;\n var endY;\n var tapPosition = function (event) {\n return (event.originalEvent || event).changedTouches[0].pageY;\n };\n that.element.on('touchstart' + STATIC_LIST_NS, function (e) {\n startY = tapPosition(e);\n });\n that.element.on('touchend' + STATIC_LIST_NS, function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n endY = tapPosition(e);\n if (Math.abs(endY - startY) < 10) {\n that._touchTriggered = true;\n that._triggerClick($(e.target).closest(ITEMSELECTOR).get(0));\n }\n });\n },\n skip: function () {\n return this.dataSource.skip();\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._getter();\n this._templates();\n this._render();\n },\n destroy: function () {\n this.element.off(STATIC_LIST_NS);\n if (this._refreshHandler) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n }\n clearTimeout(this._scrollId);\n Widget.fn.destroy.call(this);\n },\n dataItemByIndex: function (index) {\n return this.dataSource.flatView()[index];\n },\n screenHeight: function () {\n return this.content[0].clientHeight;\n },\n scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n selectedDataItems: function (dataItems) {\n if (dataItems === undefined) {\n return this._dataItems.slice();\n }\n this._dataItems = dataItems;\n this._values = this._getValues(dataItems);\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n focusNext: function () {\n var current = this.focus();\n if (!current) {\n current = 0;\n } else {\n current = current.next();\n }\n this.focus(current);\n },\n focusPrev: function () {\n var current = this.focus();\n if (!current) {\n current = this.element[0].children.length - 1;\n } else {\n current = current.prev();\n }\n this.focus(current);\n },\n focusFirst: function () {\n this.focus(this.element[0].children[0]);\n },\n focusLast: function () {\n this.focus(last(this.element[0].children));\n },\n focus: function (candidate) {\n var that = this;\n var id = that._optionID;\n var hasCandidate;\n if (candidate === undefined) {\n return that._current;\n }\n candidate = last(that._get(candidate));\n candidate = $(this.element[0].children[candidate]);\n if (that._current) {\n that._current.removeClass(FOCUSED).removeAttr(ID);\n that.trigger('deactivate');\n }\n hasCandidate = !!candidate[0];\n if (hasCandidate) {\n candidate.addClass(FOCUSED);\n that.scroll(candidate);\n candidate.attr('id', id);\n }\n that._current = hasCandidate ? candidate : null;\n that.trigger('activate');\n },\n focusIndex: function () {\n return this.focus() ? this.focus().index() : undefined;\n },\n skipUpdate: function (skipUpdate) {\n this._skipUpdate = skipUpdate;\n },\n select: function (indices) {\n var that = this;\n var selectable = that.options.selectable;\n var singleSelection = selectable !== 'multiple' && selectable !== false;\n var selectedIndices = that._selectedIndices;\n var uiSelectedIndices = [this.element.find('.k-state-selected').index()];\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1 && $.inArray(last(indices), uiSelectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children(ITEMSELECTOR);\n },\n _click: function (e) {\n if (this._touchTriggered) {\n this._touchTriggered = false;\n return;\n }\n if (!e.isDefaultPrevented()) {\n this._triggerClick(e.currentTarget);\n }\n },\n _triggerClick: function (item) {\n if (!this.trigger('click', { item: $(item) })) {\n this.select(item);\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected').attr('aria-selected', false);\n var dataItem = this._view[index].item;\n var position = this._dataItemPosition(dataItem, this._values);\n removed.push({\n position: position,\n dataItem: dataItem\n });\n dataItems.splice(j, 1);\n selectedIndices.splice(j, 1);\n indices.splice(i, 1);\n values.splice(j, 1);\n removedIndices += 1;\n i -= 1;\n j -= 1;\n break;\n }\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectFiltered: function (indices) {\n var children = this.element[0].children;\n var dataItem, index, position;\n var removed = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = this._view[index].item;\n position = this._dataItemPosition(dataItem, this._values);\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n if (removed.length) {\n this.trigger(CHANGE, {\n added: [],\n removed: removed\n });\n return true;\n }\n return false;\n },\n _select: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var data = that._view;\n var dataItem, index;\n var added = [];\n var idx = 0;\n if (last(indices) !== -1) {\n that.focus(indices);\n }\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = data[index];\n if (index === -1 || !dataItem) {\n continue;\n }\n dataItem = dataItem.item;\n that._selectedIndices.push(index);\n that._dataItems.push(dataItem);\n that._values.push(that._valueGetter(dataItem));\n $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n added.push({ dataItem: dataItem });\n }\n return added;\n },\n getElementIndex: function (element) {\n return $(element).data('offset-index');\n },\n _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = this.getElementIndex(candidate);\n candidate = [candidate !== undefined ? candidate : -1];\n }\n return candidate;\n },\n _template: function () {\n var that = this;\n var options = that.options;\n var template = options.template;\n if (!template) {\n template = kendo.template('
        • ${' + kendo.expr(options.dataTextField, 'data') + '}
        • ', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '
        • ' + template(data) + '
        • ';\n };\n }\n return template;\n },\n _templates: function () {\n var template;\n var options = this.options;\n var templates = {\n template: options.template,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n template = templates[key];\n if (template && typeof template !== 'function') {\n templates[key] = kendo.template(template);\n }\n }\n this.templates = templates;\n },\n _normalizeIndices: function (indices) {\n var newIndices = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n if (indices[idx] !== undefined) {\n newIndices.push(indices[idx]);\n }\n }\n return newIndices;\n },\n _valueIndices: function (values, indices) {\n var data = this._view;\n var idx = 0;\n var index;\n indices = indices ? indices.slice() : [];\n if (!values.length) {\n return [];\n }\n for (; idx < data.length; idx++) {\n index = this._dataItemPosition(data[idx].item, values);\n if (index !== -1) {\n indices[index] = idx;\n }\n }\n return this._normalizeIndices(indices);\n },\n _firstVisibleItem: function () {\n var element = this.element[0];\n var content = this.content[0];\n var scrollTop = content.scrollTop;\n var itemHeight = $(element.children[0]).height();\n var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n var item = element.children[itemIndex] || element.lastChild;\n var forward = item.offsetTop < scrollTop;\n while (item) {\n if (forward) {\n if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n break;\n }\n item = item.nextSibling;\n } else {\n if (item.offsetTop <= scrollTop || !item.previousSibling) {\n break;\n }\n item = item.previousSibling;\n }\n }\n return this._view[$(item).data('offset-index')];\n },\n _fixedHeader: function () {\n if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n this.header.show();\n this.content.scroll(this._onScroll);\n } else {\n this.header.hide();\n this.content.off('scroll', this._onScroll);\n }\n },\n _renderHeader: function () {\n var template = this.templates.fixedGroupTemplate;\n if (!template) {\n return;\n }\n var visibleItem = this._firstVisibleItem();\n if (visibleItem && visibleItem.group.toString().length) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '
        • ';\n if (hasColumns) {\n item += this._renderColumns(dataItem);\n } else {\n item += this.templates.template(dataItem);\n }\n if (notFirstItem && context.newGroup) {\n if (hasColumns) {\n item += '
          ' + this.templates.groupTemplate(context.group) + '
          ';\n } else {\n item += '
          ' + this.templates.groupTemplate(context.group) + '
          ';\n }\n } else if (isGrouped && hasColumns) {\n item += '
          ';\n }\n return item + '
        • ';\n },\n _renderColumns: function (dataItem) {\n var item = '';\n for (var i = 0; i < this.options.columns.length; i++) {\n var currentWidth = this.options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '';\n item += this.templates['column' + i](dataItem);\n item += '';\n }\n return item;\n },\n _render: function () {\n var html = '';\n var i = 0;\n var idx = 0;\n var context;\n var dataContext = [];\n var view = this.dataSource.view();\n var values = this.value();\n var group, newGroup, j;\n var isGrouped = this.isGrouped();\n if (isGrouped) {\n for (i = 0; i < view.length; i++) {\n group = view[i];\n newGroup = true;\n for (j = 0; j < group.items.length; j++) {\n context = {\n selected: this._selected(group.items[j], values),\n item: group.items[j],\n group: group.value,\n newGroup: newGroup,\n isLastGroupedItem: j === group.items.length - 1,\n index: idx\n };\n dataContext[idx] = context;\n idx += 1;\n html += this._renderItem(context);\n newGroup = false;\n }\n }\n } else {\n for (i = 0; i < view.length; i++) {\n context = {\n selected: this._selected(view[i], values),\n item: view[i],\n index: i\n };\n dataContext[i] = context;\n html += this._renderItem(context);\n }\n }\n this._view = dataContext;\n this.element[0].innerHTML = html;\n if (isGrouped && dataContext.length) {\n this._renderHeader();\n }\n },\n _selected: function (dataItem, values) {\n var select = !this.isFiltered() || this.options.selectable === 'multiple';\n return select && this._dataItemPosition(dataItem, values) !== -1;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var skipUpdateOnBind = that.options.skipUpdateOnBind;\n var isItemChange = action === 'itemchange';\n var result;\n that.trigger('dataBinding');\n that._angularItems('cleanup');\n that._fixedHeader();\n that._render();\n that.bound(true);\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._dataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n } else if (that.isFiltered() || that._skipUpdate || that._emptySearch) {\n that.focus(0);\n if (that._skipUpdate) {\n that._skipUpdate = false;\n that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n }\n } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n that.value(that._values);\n }\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._angularItems('compile');\n that.trigger('dataBound');\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._bound;\n }\n this._bound = bound;\n },\n isGrouped: function () {\n return (this.dataSource.group() || []).length;\n }\n });\n ui.plugin(StaticList);\n function last(list) {\n return list[list.length - 1];\n }\n function getSelectedOption(select) {\n var index = select.selectedIndex;\n return index > -1 ? select.options[index] : {};\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isValidFilterExpr(expression) {\n if (!expression || $.isEmptyObject(expression)) {\n return false;\n }\n if (expression.filters && !expression.filters.length) {\n return false;\n }\n return true;\n }\n function removeFiltersForField(expression, field) {\n var filters;\n var found = false;\n if (expression.filters) {\n filters = $.grep(expression.filters, function (filter) {\n found = removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n if (!found && expression.filters.length !== filters.length) {\n found = true;\n }\n expression.filters = filters;\n }\n return found;\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('
          '), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n if (data.index === 0 && this.header && data.group) {\n this.header.html(templates.fixedGroupTemplate(data.group));\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index);\n if (this.options.columns && this.options.columns.length && data.item) {\n element.html(renderColumns(this.options, data.item, templates));\n } else {\n element.html(itemTemplate(data.item || {}));\n }\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-last', data.isLastGroupedItem);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('
          ').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\n }\n function renderColumns(options, dataItem, templates) {\n var item = '';\n for (var i = 0; i < options.columns.length; i++) {\n var currentWidth = options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '';\n item += templates['column' + i](dataItem);\n item += '';\n }\n return item;\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isActivePromise(promise) {\n return promise && promise.state() !== 'resolved';\n }\n var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('
          ').parent();\n that.wrapper = that.content.wrap('
          ').parent();\n that.header = that.content.before('
          ').prev();\n if (options.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 },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n _highlightSelectedItems: function () {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n if (item.length) {\n item.addClass(SELECTED);\n }\n }\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind && !that._emptySearch) {\n that._selectingValue = true;\n that.bound(true);\n that.value(that._values, true).done(function () {\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._highlightSelectedItems();\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n that._fetching = false;\n },\n removeAt: function (position) {\n this._selectedIndexes.splice(position, 1);\n this._values.splice(position, 1);\n return {\n position: position,\n dataItem: this._selectedDataItems.splice(position, 1)[0]\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;\n var DropDownList = Select.extend({\n init: function (element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n that._focusInputHandler = $.proxy(that._focusInput, that);\n that.optionLabel = $();\n that._optionLabel();\n that._inputTemplate();\n that._reset();\n that._prev = '';\n that._word = '';\n that._wrapper();\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n that._span();\n that._popup();\n that._mobile();\n that._dataSource();\n that._ignoreCase();\n that._filterHeader();\n that._aria();\n that.wrapper.attr('aria-live', 'polite');\n that._enable();\n that._attachFocusHandlers();\n that._oldIndex = that.selectedIndex = -1;\n if (index !== undefined) {\n options.index = index;\n }\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._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 },\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 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.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.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n if (!filterInput) {\n return;\n }\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n this._prevent = true;\n filterInput.css('display', 'none').css('width', this.popup.element.css('width')).css('display', 'inline-block');\n if (isInputActive) {\n filterInput.focus();\n kendo.caret(filterInput[0], caret);\n }\n this._prevent = originalPrevent;\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n current: function (candidate) {\n var current;\n if (candidate === undefined) {\n current = this.listView.focus();\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n return current;\n }\n this._focus(candidate);\n },\n dataItem: function (index) {\n var that = this;\n var dataItem = null;\n if (index === null) {\n return index;\n }\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n if (index.hasClass('k-list-optionlabel')) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n dataItem = that.dataSource.flatView()[index];\n }\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n return dataItem;\n },\n refresh: function () {\n this.listView.refresh();\n },\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text !== 'string') {\n that._textAccessor(text);\n return;\n }\n loweredText = ignoreCase ? text.toLowerCase() : text;\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n that._textAccessor(that.dataItem() || text);\n });\n } else {\n return that._textAccessor();\n }\n },\n _clearFilter: function () {\n $(this.filterInput).val('');\n Select.fn._clearFilter.call(this);\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n this.trigger('set', { value: value });\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n that._valueSetter = proxy(function () {\n that.value(value);\n }, that);\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n hasOptionLabel: function () {\n return this.optionLabel && !!this.optionLabel[0];\n },\n _optionLabel: function () {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n if (!template) {\n template = '#:';\n if (typeof optionLabel === 'string') {\n template += 'data';\n } else {\n template += kendo.expr(options.dataTextField, 'data');\n }\n template += '#';\n }\n if (typeof template !== 'function') {\n template = kendo.template(template);\n }\n that.optionLabelTemplate = template;\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('
          ').prependTo(that.list);\n }\n that.optionLabel.html(template(optionLabel)).off().on(CLICKEVENTS, proxy(that._click, that)).on(HOVEREVENTS, that._toggleHover);\n that.angular('compile', function () {\n return {\n elements: that.optionLabel,\n data: [{ dataItem: that._optionLabelDataItem() }]\n };\n });\n },\n _optionLabelText: function () {\n var optionLabel = this.options.optionLabel;\n return typeof optionLabel === 'string' ? optionLabel : this._text(optionLabel);\n },\n _optionLabelDataItem: function () {\n var that = this;\n var optionLabel = that.options.optionLabel;\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), '');\n }\n return undefined;\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = '';\n }\n optionLabel = '';\n }\n that._options(data, optionLabel, value);\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var dataItem;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup(true);\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n that._open = false;\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value('');\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue || this._old && this._oldIndex === -1) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _filterPaste: function () {\n this._search();\n },\n _attachFocusHandlers: function () {\n var that = this;\n var wrapper = that.wrapper;\n wrapper.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n if (that.filterInput) {\n that.filterInput.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n }\n },\n _focusHandler: function () {\n this.wrapper.focus();\n },\n _focusinHandler: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n _focusoutHandler: function () {\n var that = this;\n var isIFrame = window.self !== window.top;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._prevent = false;\n this._toggle();\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper.add(that.filterInput).off(ns);\n var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n wrapper.attr(TABINDEX, wrapper.data(TABINDEX)).attr(ARIA_DISABLED, false).attr(ARIA_READONLY, false).on('keydown' + ns, that, proxy(that._keydown, that)).on(kendo.support.mousedown + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n } else {\n wrapper.on('input' + ns, proxy(that._search, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable).attr(ARIA_READONLY, readonly);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n that._open = false;\n that._state = STATE_ACCEPT;\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n if (key === keys.SPACEBAR && !isInputActive) {\n that.toggle(!isPopupVisible);\n e.preventDefault();\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._blur();\n that._focusElement(that.wrapper);\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n focusIndex = 1;\n } else {\n focusIndex = this.listView.focusNext();\n }\n return focusIndex;\n },\n _prevItem: function () {\n var focusIndex;\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n focusIndex = this.listView.focusPrev();\n if (!this.listView.focus() && !this.options.virtual) {\n this._focus(this.optionLabel);\n }\n return focusIndex;\n },\n _focusItem: function () {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== 'dataItem')) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n this.listView.content.scrollTop(0);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '';\n this.filterInput = $('').attr({\n placeholder: this.element.attr('placeholder'),\n title: this.element.attr('title'),\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n this.list.prepend($('').append(this.filterInput.add(icon)));\n }\n },\n _span: function () {\n var that = this, wrapper = that.wrapper, SELECTOR = 'span.k-input', span;\n span = wrapper.find(SELECTOR);\n if (!span[0]) {\n wrapper.append(' ').append(that.element);\n span = wrapper.find(SELECTOR);\n }\n that.span = span;\n that._inputWrapper = $(wrapper[0].firstChild);\n that._arrow = wrapper.find('.k-select');\n that._arrowIcon = that._arrow.find('.k-icon');\n },\n _wrapper: function () {\n var that = this, element = that.element, DOMelement = element[0], wrapper;\n wrapper = element.parent();\n if (!wrapper.is('span.k-widget')) {\n wrapper = element.wrap('').parent();\n wrapper[0].style.cssText = DOMelement.style.cssText;\n wrapper[0].title = DOMelement.title;\n }\n that._focused = that.wrapper = wrapper.addClass('k-widget k-dropdown').addClass(DOMelement.className).removeClass('input-validation-error').css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('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;\n (function ($) {\n (function () {\n $('
          ').on('click', '>*', function () {\n supportEventDelegation = true;\n }).find('span').trigger('click').end().off();\n }());\n }($));\n var Selectable = Widget.extend({\n init: function (element, options) {\n var that = this, multiple;\n Widget.fn.init.call(that, element, options);\n that._marquee = $('
          ');\n that._lastActive = null;\n that.element.addClass(SELECTABLE);\n that.relatedTarget = that.options.relatedTarget;\n multiple = that.options.multiple;\n if (this.options.aria && multiple) {\n that.element.attr('aria-multiselectable', true);\n }\n that.userEvents = new kendo.UserEvents(that.element, {\n global: true,\n allowSelection: true,\n filter: (!supportEventDelegation ? '.' + SELECTABLE + ' ' : '') + that.options.filter,\n tap: proxy(that._tap, that),\n touchAction: multiple ? 'none' : 'pan-x pan-y'\n });\n if (multiple) {\n that.userEvents.bind('start', proxy(that._start, that)).bind('move', proxy(that._move, that)).bind('end', proxy(that._end, that)).bind('select', proxy(that._select, that));\n }\n },\n events: [\n CHANGE,\n UNSELECT\n ],\n options: {\n name: 'Selectable',\n filter: '>*',\n inputSelectors: INPUTSELECTOR,\n multiple: false,\n relatedTarget: $.noop\n },\n _isElement: function (target) {\n var elements = this.element;\n var idx, length = elements.length, result = false;\n target = target[0];\n for (idx = 0; idx < length; idx++) {\n if (elements[idx] === target) {\n result = true;\n break;\n }\n }\n return result;\n },\n _tap: function (e) {\n var target = $(e.target), that = this, ctrlKey = e.event.ctrlKey || e.event.metaKey, multiple = that.options.multiple, shiftKey = multiple && e.event.shiftKey, selected, whichCode = e.event.which, buttonCode = e.event.button;\n if (!that._isElement(target.closest('.' + SELECTABLE)) || whichCode && whichCode == 3 || buttonCode && buttonCode == 2) {\n return;\n }\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n selected = target.hasClass(SELECTED);\n if (!multiple || !ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (shiftKey) {\n that.selectRange(that._firstSelectee(), target, e);\n } else {\n if (selected && ctrlKey) {\n that._unselect(target);\n that._notify(CHANGE, e);\n } else {\n that.value(target, e);\n }\n that._lastActive = that._downTarget = target;\n }\n },\n _start: function (e) {\n var that = this, target = $(e.target), selected = target.hasClass(SELECTED), currentElement, ctrlKey = e.event.ctrlKey || e.event.metaKey;\n if (!this._allowSelection(e.event.target)) {\n return;\n }\n that._downTarget = target;\n if (!that._isElement(target.closest('.' + SELECTABLE))) {\n that.userEvents.cancel();\n return;\n }\n if (that.options.useAllItems) {\n that._items = that.element.find(that.options.filter);\n } else {\n currentElement = target.closest(that.element);\n that._items = currentElement.find(that.options.filter);\n }\n e.sender.capture();\n that._marquee.appendTo(document.body).css({\n left: e.x.client + 1,\n top: e.y.client + 1,\n width: 0,\n height: 0\n });\n if (!ctrlKey) {\n that.clear();\n }\n target = target.add(that.relatedTarget(target));\n if (selected) {\n that._selectElement(target, true);\n if (ctrlKey) {\n target.addClass(UNSELECTING);\n }\n }\n },\n _move: function (e) {\n var that = this, position = {\n left: e.x.startLocation > e.x.location ? e.x.location : e.x.startLocation,\n top: e.y.startLocation > e.y.location ? e.y.location : e.y.startLocation,\n width: abs(e.x.initialDelta),\n height: abs(e.y.initialDelta)\n };\n that._marquee.css(position);\n that._invalidateSelectables(position, e.event.ctrlKey || e.event.metaKey);\n e.preventDefault();\n },\n _end: function (e) {\n var that = this;\n that._marquee.remove();\n that._unselect(that.element.find(that.options.filter + '.' + UNSELECTING)).removeClass(UNSELECTING);\n var target = that.element.find(that.options.filter + '.' + ACTIVE);\n target = target.add(that.relatedTarget(target));\n that.value(target, e);\n that._lastActive = that._downTarget;\n that._items = null;\n },\n _invalidateSelectables: function (position, ctrlKey) {\n var idx, length, target = this._downTarget[0], items = this._items, related, toSelect;\n for (idx = 0, length = items.length; idx < length; idx++) {\n toSelect = items.eq(idx);\n related = toSelect.add(this.relatedTarget(toSelect));\n if (collision(toSelect, position)) {\n if (toSelect.hasClass(SELECTED)) {\n if (ctrlKey && target !== toSelect[0]) {\n related.removeClass(SELECTED).addClass(UNSELECTING);\n }\n } else if (!toSelect.hasClass(ACTIVE) && !toSelect.hasClass(UNSELECTING)) {\n related.addClass(ACTIVE);\n }\n } else {\n if (toSelect.hasClass(ACTIVE)) {\n related.removeClass(ACTIVE);\n } else if (ctrlKey && toSelect.hasClass(UNSELECTING)) {\n related.removeClass(UNSELECTING).addClass(SELECTED);\n }\n }\n }\n },\n value: function (val, e) {\n var that = this, selectElement = proxy(that._selectElement, that);\n if (val) {\n val.each(function () {\n selectElement(this);\n });\n that._notify(CHANGE, e);\n return;\n }\n return that.element.find(that.options.filter + '.' + SELECTED);\n },\n _firstSelectee: function () {\n var that = this, selected;\n if (that._lastActive !== null) {\n return that._lastActive;\n }\n selected = that.value();\n return selected.length > 0 ? selected[0] : that.element.find(that.options.filter)[0];\n },\n _selectElement: function (element, preventNotify) {\n var toSelect = $(element), isPrevented = !preventNotify && this._notify('select', { element: element });\n toSelect.removeClass(ACTIVE);\n if (!isPrevented) {\n toSelect.addClass(SELECTED);\n if (this.options.aria) {\n toSelect.attr(ARIASELECTED, true);\n }\n }\n },\n _notify: function (name, args) {\n args = args || {};\n return this.trigger(name, args);\n },\n _unselect: function (element) {\n if (this.trigger(UNSELECT, { element: element })) {\n return;\n }\n element.removeClass(SELECTED);\n if (this.options.aria) {\n element.attr(ARIASELECTED, false);\n }\n return element;\n },\n _select: function (e) {\n if (this._allowSelection(e.event.target)) {\n if (!msie || msie && !$(kendo._activeElement()).is(this.options.inputSelectors)) {\n e.preventDefault();\n }\n }\n },\n _allowSelection: function (target) {\n if ($(target).is(this.options.inputSelectors)) {\n this.userEvents.cancel();\n this._downTarget = null;\n return false;\n }\n return true;\n },\n resetTouchEvents: function () {\n this.userEvents.cancel();\n },\n clear: function () {\n var items = this.element.find(this.options.filter + '.' + SELECTED);\n this._unselect(items);\n },\n selectRange: function (start, end, e) {\n var that = this, idx, tmp, items;\n that.clear();\n if (that.element.length > 1) {\n items = that.options.continuousItems();\n }\n if (!items || !items.length) {\n items = that.element.find(that.options.filter);\n }\n start = $.inArray($(start)[0], items);\n end = $.inArray($(end)[0], items);\n if (start > end) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (!that.options.useAllItems) {\n end += that.element.length - 1;\n }\n for (idx = start; idx <= end; idx++) {\n that._selectElement(items[idx]);\n }\n that._notify(CHANGE, e);\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n that.element.off(NS);\n that.userEvents.destroy();\n that._marquee = that._lastActive = that.element = that.userEvents = null;\n }\n });\n Selectable.parseOptions = function (selectable) {\n var asLowerString = typeof selectable === 'string' && selectable.toLowerCase();\n return {\n multiple: asLowerString && asLowerString.indexOf('multiple') > -1,\n cell: asLowerString && asLowerString.indexOf('cell') > -1\n };\n };\n function collision(element, position) {\n if (!element.is(':visible')) {\n return false;\n }\n var elementPosition = kendo.getOffset(element), right = position.left + position.width, bottom = position.top + position.height;\n elementPosition.right = elementPosition.left + kendo._outerWidth(element);\n elementPosition.bottom = elementPosition.top + kendo._outerHeight(element);\n return !(elementPosition.left > right || elementPosition.right < position.left || elementPosition.top > bottom || elementPosition.bottom < position.top);\n }\n kendo.ui.plugin(Selectable);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.calendar', [\n 'kendo.core',\n 'kendo.selectable'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'calendar',\n name: 'Calendar',\n category: 'web',\n description: 'The Calendar widget renders a graphical calendar that supports navigation and selection.',\n depends: [\n 'core',\n 'selectable'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, support = kendo.support, ui = kendo.ui, Widget = ui.Widget, keys = kendo.keys, parse = kendo.parseDate, adjustDST = kendo.date.adjustDST, weekInYear = kendo.date.weekInYear, Selectable = kendo.ui.Selectable, extractFormat = kendo._extractFormat, template = kendo.template, getCulture = kendo.getCulture, transitions = kendo.support.transitions, transitionOrigin = transitions ? transitions.css + 'transform-origin' : '', cellTemplate = template('#=data.value#', { useWithBlock: false }), emptyCellTemplate = template('', { useWithBlock: false }), otherMonthCellTemplate = template(' ', { useWithBlock: false }), weekNumberTemplate = template('#= data.weekNumber #', { useWithBlock: false }), browser = kendo.support.browser, isIE8 = browser.msie && browser.version < 9, outerWidth = kendo._outerWidth, ns = '.kendoCalendar', CLICK = 'click' + ns, KEYDOWN_NS = 'keydown' + ns, ID = 'id', MIN = 'min', LEFT = 'left', SLIDE = 'slideIn', MONTH = 'month', CENTURY = 'century', CHANGE = 'change', NAVIGATE = 'navigate', VALUE = 'value', HOVER = 'k-state-hover', DISABLED = 'k-state-disabled', FOCUSED = 'k-state-focused', OTHERMONTH = 'k-other-month', OTHERMONTHCLASS = ' class=\"' + OTHERMONTH + '\"', OUTOFRANGE = 'k-out-of-range', TODAY = 'k-nav-today', CELLSELECTOR = 'td:has(.k-link)', CELLSELECTORVALID = 'td:has(.k-link):not(.' + DISABLED + '):not(.' + OUTOFRANGE + ')', WEEKCOLUMNSELECTOR = 'td:not(:has(.k-link))', SELECTED = 'k-state-selected', BLUR = 'blur' + ns, FOCUS = 'focus', FOCUS_WITH_NS = FOCUS + ns, MOUSEENTER = support.touch ? 'touchstart' : 'mouseenter', MOUSEENTER_WITH_NS = support.touch ? 'touchstart' + ns : 'mouseenter' + ns, MOUSELEAVE = support.touch ? 'touchend' + ns + ' touchmove' + ns : 'mouseleave' + ns, MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000, PREVARROW = '_prevArrow', NEXTARROW = '_nextArrow', ARIA_DISABLED = 'aria-disabled', ARIA_SELECTED = 'aria-selected', ARIA_LABEL = 'aria-label', proxy = $.proxy, extend = $.extend, DATE = Date, views = {\n month: 0,\n year: 1,\n decade: 2,\n century: 3\n }, HEADERSELECTOR = '.k-header, .k-calendar-header', CLASSIC_HEADER_TEMPLATE = '
          ' + '' + '' + '' + '
          ', MODERN_HEADER_TEMPLATE = '
          ' + '' + '' + '' + '' + '' + '#=messages.today#' + '' + '' + '' + '' + '
          ';\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n options = options || {};\n options.componentType = options.componentType || 'classic';\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = kendo.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n }\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 (id) {\n that._cellID = id + '_cell_selected';\n }\n if (that._isMultipleSelection() && that.options.weekNumber) {\n element.on(CLICK, WEEKCOLUMNSELECTOR, function (e) {\n var first = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).first(), last = that.selectable._lastActive = $(e.currentTarget).closest('tr').find(CELLSELECTORVALID).last();\n that.selectable.selectRange(first, last, { event: e });\n that._current = that._value = toDateObject(last.find('a'));\n that._class(FOCUSED, that._current);\n });\n }\n normalize(options);\n value = parse(options.value, options.format, options.culture);\n that._selectDates = [];\n that._index = views[options.start];\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n that._addClassProxy = function () {\n that._active = true;\n if (that._cell.hasClass(DISABLED)) {\n var todayString = that._view.toDateString(getToday());\n that._cell = that._cellByDate(todayString);\n }\n that._cell.addClass(FOCUSED);\n };\n that._removeClassProxy = function () {\n that._active = false;\n that._cell.removeClass(FOCUSED);\n };\n that.value(value);\n if (that._isMultipleSelection() && options.selectDates.length > 0) {\n that.selectDates(options.selectDates);\n }\n kendo.notify(that);\n },\n options: {\n name: 'Calendar',\n value: null,\n min: new DATE(1900, 0, 1),\n max: new DATE(2099, 11, 31),\n dates: [],\n disableDates: null,\n url: '',\n culture: '',\n footer: '',\n format: '',\n month: {},\n weekNumber: false,\n selectable: 'single',\n selectDates: [],\n start: MONTH,\n depth: MONTH,\n animation: {\n horizontal: {\n effects: SLIDE,\n reverse: true,\n duration: 500,\n divisor: 2\n },\n vertical: {\n effects: 'zoomIn',\n duration: 400\n }\n },\n messages: {\n weekColumnHeader: '',\n today: 'Today'\n },\n componentType: 'classic'\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n componentTypes: {\n 'classic': {\n header: { template: CLASSIC_HEADER_TEMPLATE },\n hasFooter: true,\n linksSelector: '.k-link',\n contentClasses: 'k-content'\n },\n 'modern': {\n header: { template: MODERN_HEADER_TEMPLATE },\n hasFooter: false,\n linksSelector: '.k-button',\n contentClasses: 'k-content k-calendar-content'\n }\n },\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n that._destroySelectable();\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n if (that.options.hasFooter) {\n that._footer(that.footer);\n } else {\n that.element.find('.k-footer').hide();\n }\n that._index = views[that.options.start];\n that.navigate();\n if (options.weekNumber) {\n that.element.addClass('k-week-number');\n }\n },\n destroy: function () {\n var that = this, today = that._today;\n that.element.off(ns);\n that._title.off(ns);\n that[PREVARROW].off(ns);\n that[NEXTARROW].off(ns);\n that._destroySelectable();\n kendo.destroy(that._table);\n if (today) {\n kendo.destroy(today.off(ns));\n }\n Widget.fn.destroy.call(that);\n },\n current: function () {\n return this._current;\n },\n view: function () {\n return this._view;\n },\n focus: function (table) {\n table = table || this._table;\n this._bindTable(table);\n table.trigger('focus');\n },\n min: function (value) {\n return this._option(MIN, value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n navigateToPast: function () {\n this._navigate(PREVARROW, -1);\n },\n navigateToFuture: function () {\n this._navigate(NEXTARROW, 1);\n },\n navigateUp: function () {\n var that = this, index = that._index;\n if (that._title.hasClass(DISABLED)) {\n return;\n }\n that.navigate(that._current, ++index);\n },\n navigateDown: function (value) {\n var that = this, index = that._index, depth = that.options.depth;\n if (!value) {\n return;\n }\n if (index === views[depth]) {\n if (!isEqualDate(that._value, that._current) || !isEqualDate(that._value, value)) {\n that.value(value);\n that.trigger(CHANGE);\n }\n return;\n }\n that.navigate(value, --index);\n },\n navigate: function (value, view) {\n view = isNaN(view) ? views[view] : view;\n var that = this, options = that.options, culture = options.culture, min = options.min, max = options.max, title = that._title, from = that._table, old = that._oldTable, currentValue = that._current, future = value && +value > +currentValue, vertical = view !== undefined && view !== that._index, to, currentView, compare, disabled, viewWrapper = that.element.children('.k-calendar-view');\n if (!value) {\n value = currentValue;\n }\n that._current = value = new DATE(+restrictValue(value, min, max));\n if (view === undefined) {\n view = that._index;\n } else {\n that._index = view;\n }\n that._view = currentView = calendar.views[view];\n compare = currentView.compare;\n disabled = view === views[CENTURY];\n title.toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n disabled = compare(value, min) < 1;\n that[PREVARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[PREVARROW].hasClass(DISABLED)) {\n that[PREVARROW].removeClass(HOVER);\n }\n disabled = compare(value, max) > -1;\n that[NEXTARROW].toggleClass(DISABLED, disabled).attr(ARIA_DISABLED, disabled);\n if (that[NEXTARROW].hasClass(DISABLED)) {\n that[NEXTARROW].removeClass(HOVER);\n }\n if (from && old && old.data('animating')) {\n old.kendoStop(true, true);\n from.kendoStop(true, true);\n }\n that._oldTable = from;\n if (!from || that._changeView) {\n title.html(currentView.title(value, min, max, culture));\n that._table = to = $(currentView.content(extend({\n min: min,\n max: max,\n date: value,\n url: options.url,\n dates: options.dates,\n format: options.format,\n otherMonth: true,\n culture: culture,\n disableDates: options.disableDates,\n isWeekColumnVisible: options.weekNumber,\n messages: options.messages,\n contentClasses: that.options.contentClasses\n }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n if (that.options.componentType === 'modern') {\n viewWrapper.removeClass('k-calendar-monthview k-calendar-yearview k-calendar-decadeview k-calendar-centuryview');\n viewWrapper.addClass('k-calendar-' + currentView.name + 'view');\n }\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = toDateObject(target.find('a'));\n that._class(FOCUSED, toDateObject(target.find('a')));\n }\n },\n _onSelect: function (e) {\n var that = this, eventArgs = e, selectableOptions = Selectable.parseOptions(that.options.selectable);\n if (!selectableOptions.multiple) {\n if ($(eventArgs.event.currentTarget).is('td') && !$(eventArgs.event.currentTarget).hasClass('k-state-selected')) {\n $(eventArgs.event.currentTarget).addClass('k-state-selected');\n } else {\n that._click($(eventArgs.event.currentTarget).find('a'));\n }\n return;\n }\n if (eventArgs.event.ctrlKey || 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._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!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._class(FOCUSED, 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._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this;\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 _class: function (className, date) {\n var that = this, id = that._cellID, cell = that._cell, value = that._view.toDateString(date), disabledDate;\n if (cell && cell.length) {\n cell[0].removeAttribute(ARIA_SELECTED);\n cell[0].removeAttribute(ARIA_LABEL);\n cell[0].removeAttribute(ID);\n }\n if (date && that._view.name == 'month') {\n disabledDate = that.options.disableDates(date);\n }\n that._cellsBySelector(that._isMultipleSelection() ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').removeClass(className);\n cell = that._cellByDate(value, that.options.selectable == 'multiple' ? CELLSELECTOR : 'td:not(.' + OTHERMONTH + ')').attr(ARIA_SELECTED, true);\n if (className === FOCUSED && !that._active && that.options.focusOnNav !== false || disabledDate) {\n className = '';\n }\n cell.addClass(className);\n if (cell[0]) {\n that._cell = cell;\n }\n if (id) {\n cell.attr(ID, id);\n that._table[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._class(FOCUSED, value);\n }\n },\n _focusView: function (active, table) {\n if (active) {\n this.focus(table);\n }\n },\n _viewWrapper: function () {\n var that = this;\n var element = that.element;\n var viewWrapper = element.children('.k-calendar-view');\n if (!viewWrapper[0]) {\n viewWrapper = $('
          ').insertAfter(element.find(HEADERSELECTOR));\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
          ').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, linksSelector = that.options.linksSelector;\n if (!element.find(HEADERSELECTOR)[0]) {\n element.html(kendo.template(that.options.header.template)($.extend(true, {}, that.options, { actionAttr: kendo.attr('action') })));\n }\n element.find(linksSelector).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).on(CLICK + ' touchend' + ns, function () {\n return false;\n });\n that._title = element.find('[' + kendo.attr('action') + '=\"nav-up\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = element.find('[' + kendo.attr('action') + '=\"prev\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = element.find('[' + kendo.attr('action') + '=\"next\"]').on(CLICK + ' touchend' + ns, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n element.find('[' + kendo.attr('action') + '=\"today\"]').on(CLICK + ' touchend' + ns, proxy(that._todayClick, that));\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month):not(.k-out-of-range)').has('.k-link').first();\n currentValue = toDateObject(firstDayCurrentMonth.find('a'));\n that._current = new Date(+currentValue);\n }\n arrow = that[arrow];\n if (!arrow.hasClass(DISABLED)) {\n if (index > 3) {\n currentValue.setFullYear(currentValue.getFullYear() + 100 * modifier);\n } else {\n calendar.views[index].setDate(currentValue, modifier);\n }\n that.navigate(currentValue);\n }\n },\n _option: function (option, value) {\n var that = this, options = that.options, currentValue = that._value || that._current, isBigger;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.format, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n if (option === MIN) {\n isBigger = value > currentValue;\n } else {\n isBigger = currentValue > value;\n }\n if (isBigger || isEqualMonth(currentValue, value)) {\n if (isBigger) {\n that._value = null;\n }\n that._changeView = true;\n }\n if (!that._changeView) {\n that._changeView = !!(options.month.content || options.month.empty);\n }\n that.navigate(that._value);\n that._toggle();\n },\n _toggle: function (toggle) {\n var that = this, options = that.options, isTodayDisabled = that.options.disableDates(getToday()), link = that._today;\n if (toggle === undefined) {\n toggle = isInRange(getToday(), options.min, options.max);\n }\n if (link) {\n link.off(CLICK);\n if (toggle && !isTodayDisabled) {\n link.addClass(TODAY).removeClass(DISABLED).on(CLICK, proxy(that._todayClick, that));\n } else {\n link.removeClass(TODAY).addClass(DISABLED).on(CLICK, prevent);\n }\n }\n },\n _todayClick: function (e) {\n var that = this, depth = views[that.options.depth], disabled = that.options.disableDates, today = getToday();\n e.preventDefault();\n if (disabled(today)) {\n return;\n }\n if (that._view.compare(that._current, today) === 0 && that._index == depth) {\n that._changeView = false;\n }\n if (that._isMultipleSelection()) {\n that._selectDates = [today];\n that.selectable._lastActive = null;\n }\n that._value = today;\n that.navigate(today, depth);\n that.trigger(CHANGE);\n },\n _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 });\n ui.plugin(Calendar);\n var calendar = {\n firstDayOfMonth: function (date) {\n return createDate(date.getFullYear(), date.getMonth(), 1);\n },\n firstVisibleDay: function (date, calendarInfo) {\n calendarInfo = calendarInfo || kendo.culture().calendar;\n var firstDay = calendarInfo.firstDay, firstVisibleDay = new DATE(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n firstVisibleDay.setFullYear(date.getFullYear());\n while (firstVisibleDay.getDay() != firstDay) {\n calendar.setTime(firstVisibleDay, -1 * MS_PER_DAY);\n }\n return firstVisibleDay;\n },\n setTime: function (date, time) {\n var tzOffsetBefore = date.getTimezoneOffset(), resultDATE = new DATE(date.getTime() + time), tzOffsetDiff = resultDATE.getTimezoneOffset() - tzOffsetBefore;\n date.setTime(resultDATE.getTime() + tzOffsetDiff * MS_PER_MINUTE);\n },\n views: [\n {\n name: MONTH,\n title: function (date, min, max, culture) {\n return getCalendarInfo(culture).months.names[date.getMonth()] + ' ' + date.getFullYear();\n },\n content: function (options) {\n var that = this, idx = 0, min = options.min, max = options.max, date = options.date, dates = options.dates, format = options.format, culture = options.culture, navigateUrl = options.url, showHeader = options.showHeader, otherMonth = options.otherMonth, isWeekColumnVisible = options.isWeekColumnVisible, hasUrl = navigateUrl && dates[0], currentCalendar = getCalendarInfo(culture), firstDayIdx = currentCalendar.firstDay, days = currentCalendar.days, names = shiftArray(days.names, firstDayIdx), shortNames = shiftArray(days.namesShort, firstDayIdx), start = calendar.firstVisibleDay(date, currentCalendar), firstDayOfMonth = that.first(date), lastDayOfMonth = that.last(date), toDateString = that.toDateString, today = getToday(), contentClasses = options.contentClasses, html = '';\n if (showHeader) {\n html += '';\n } else {\n html += '';\n }\n if (isWeekColumnVisible) {\n html += '';\n }\n for (; idx < 7; idx++) {\n html += '';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '',\n start: start,\n isWeekColumnVisible: isWeekColumnVisible,\n weekNumber: options.weekNumber,\n min: createDate(min.getFullYear(), min.getMonth(), min.getDate()),\n max: createDate(max.getFullYear(), max.getMonth(), max.getDate()),\n otherMonth: otherMonth,\n content: options.content,\n lastDayOfMonth: lastDayOfMonth,\n empty: options.empty,\n setter: that.setDate,\n disableDates: options.disableDates,\n build: function (date, idx, disableDates) {\n var cssClass = [], day = date.getDay(), linkClass = '', url = '#';\n if (date < firstDayOfMonth || date > lastDayOfMonth) {\n cssClass.push(OTHERMONTH);\n }\n if (disableDates(date)) {\n cssClass.push(DISABLED);\n }\n if (+date === today) {\n cssClass.push('k-today');\n }\n if (day === 0 || day === 6) {\n cssClass.push('k-weekend');\n }\n if (hasUrl && inArray(+date, dates)) {\n url = navigateUrl.replace('{0}', kendo.toString(date, format, culture));\n linkClass = ' k-action-link';\n }\n return {\n date: date,\n dates: dates,\n ns: kendo.ns,\n title: kendo.toString(date, 'D', culture),\n value: date.getDate(),\n dateString: toDateString(date),\n cssClass: cssClass[0] ? ' class=\"' + cssClass.join(' ') + '\"' : '',\n linkClass: linkClass,\n url: url\n };\n },\n weekNumberBuild: function (date) {\n return {\n weekNumber: weekInYear(date, kendo.culture().calendar.firstDay),\n currentDate: date\n };\n }\n });\n },\n first: function (date) {\n return calendar.firstDayOfMonth(date);\n },\n last: function (date) {\n var last = createDate(date.getFullYear(), date.getMonth() + 1, 0), first = calendar.firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n },\n compare: function (date1, date2) {\n var result, month1 = date1.getMonth(), year1 = date1.getFullYear(), month2 = date2.getMonth(), year2 = date2.getFullYear();\n if (year1 > year2) {\n result = 1;\n } else if (year1 < year2) {\n result = -1;\n } else {\n result = month1 == month2 ? 0 : month1 > month2 ? 1 : -1;\n }\n return result;\n },\n setDate: function (date, value) {\n var hours = date.getHours();\n if (value instanceof DATE) {\n date.setFullYear(value.getFullYear(), value.getMonth(), value.getDate());\n } else {\n calendar.setTime(date, value * MS_PER_DAY);\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/' + date.getDate();\n }\n },\n {\n name: 'year',\n title: function (date) {\n return date.getFullYear();\n },\n content: function (options) {\n var namesAbbr = getCalendarInfo(options.culture).months.namesAbbr, toDateString = this.toDateString, min = options.min, max = options.max, html = '';\n if (options.showHeader) {\n html += '
          ' + this.title(date, min, max, culture) + '
          ' + options.messages.weekColumnHeader + '' + shortNames[idx] + '
          ';\n }\n return view({\n min: createDate(min.getFullYear(), min.getMonth(), 1),\n max: createDate(max.getFullYear(), max.getMonth(), 1),\n start: createDate(options.date.getFullYear(), 0, 1),\n html: html,\n setter: this.setDate,\n build: function (date) {\n return {\n value: namesAbbr[date.getMonth()],\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: ''\n };\n }\n });\n },\n first: function (date) {\n return createDate(date.getFullYear(), 0, date.getDate());\n },\n last: function (date) {\n return createDate(date.getFullYear(), 11, date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2);\n },\n setDate: function (date, value) {\n var month, hours = date.getHours();\n if (value instanceof DATE) {\n month = value.getMonth();\n date.setFullYear(value.getFullYear(), month, date.getDate());\n if (month !== date.getMonth()) {\n date.setDate(0);\n }\n } else {\n month = date.getMonth() + value;\n date.setMonth(month);\n if (month > 11) {\n month -= 12;\n }\n if (month > 0 && date.getMonth() != month) {\n date.setDate(0);\n }\n }\n adjustDST(date, hours);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/' + date.getMonth() + '/1';\n }\n },\n {\n name: 'decade',\n title: function (date, min, max) {\n return title(date, min, max, 10);\n },\n content: function (options) {\n var year = options.date.getFullYear(), toDateString = this.toDateString, html = '';\n if (options.showHeader) {\n html += '
          ';\n html += this.title(options.date);\n html += '
          ';\n }\n return view({\n start: createDate(year - year % 10 - 1, 0, 1),\n min: createDate(options.min.getFullYear(), 0, 1),\n max: createDate(options.max.getFullYear(), 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n return {\n value: date.getFullYear(),\n ns: kendo.ns,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 10 + 9, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 10);\n },\n setDate: function (date, value) {\n setDate(date, value, 1);\n },\n toDateString: function (date) {\n return date.getFullYear() + '/0/1';\n }\n },\n {\n name: CENTURY,\n title: function (date, min, max) {\n return title(date, min, max, 100);\n },\n content: function (options) {\n var year = options.date.getFullYear(), min = options.min.getFullYear(), max = options.max.getFullYear(), toDateString = this.toDateString, minYear = min, maxYear = max, html = '';\n minYear = minYear - minYear % 10;\n maxYear = maxYear - maxYear % 10;\n if (maxYear - minYear < 10) {\n maxYear = minYear + 9;\n }\n if (options.showHeader) {\n html += '
          ';\n html += this.title(options.date, options.min, options.max);\n html += '
          ';\n }\n return view({\n start: createDate(year - year % 100 - 10, 0, 1),\n min: createDate(minYear, 0, 1),\n max: createDate(maxYear, 0, 1),\n otherMonth: options.otherMonth,\n html: html,\n setter: this.setDate,\n build: function (date, idx) {\n var start = date.getFullYear(), end = start + 9;\n if (start < min) {\n start = min;\n }\n if (end > max) {\n end = max;\n }\n return {\n ns: kendo.ns,\n value: start + ' - ' + end,\n dateString: toDateString(date),\n cssClass: idx === 0 || idx == 11 ? OTHERMONTHCLASS : ''\n };\n }\n });\n },\n first: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100, date.getMonth(), date.getDate());\n },\n last: function (date) {\n var year = date.getFullYear();\n return createDate(year - year % 100 + 99, date.getMonth(), date.getDate());\n },\n compare: function (date1, date2) {\n return compare(date1, date2, 100);\n },\n setDate: function (date, value) {\n setDate(date, value, 10);\n },\n toDateString: function (date) {\n var year = date.getFullYear();\n return year - year % 10 + '/0/1';\n }\n }\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 makeUnselectable(element) {\n if (isIE8) {\n element.find('*').attr('unselectable', 'on');\n }\n }\n function addClassToViewContainer(element, currentView) {\n element.addClass('k-' + currentView);\n }\n function inArray(date, dates) {\n for (var i = 0, length = dates.length; i < length; i++) {\n if (date === +dates[i]) {\n return true;\n }\n }\n return false;\n }\n function isEqualDatePart(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth() && value1.getDate() === value2.getDate();\n }\n return false;\n }\n function isEqualMonth(value1, value2) {\n if (value1) {\n return value1.getFullYear() === value2.getFullYear() && value1.getMonth() === value2.getMonth();\n }\n return false;\n }\n function getDisabledExpr(option) {\n if (kendo.isFunction(option)) {\n return option;\n }\n if ($.isArray(option)) {\n return createDisabledExpr(option);\n }\n return $.noop;\n }\n function convertDatesArray(dates) {\n var result = [];\n for (var i = 0; i < dates.length; i++) {\n result.push(dates[i].setHours(0, 0, 0, 0));\n }\n return result;\n }\n function createDisabledExpr(dates) {\n var body, callback, disabledDates = [], days = [\n 'su',\n 'mo',\n 'tu',\n 'we',\n 'th',\n 'fr',\n 'sa'\n ], searchExpression = 'if (found) {' + ' return true ' + '} else {' + 'return false' + '}';\n if (dates[0] instanceof DATE) {\n disabledDates = convertDatesArray(dates);\n body = 'var found = date && window.kendo.jQuery.inArray(date.setHours(0, 0, 0, 0),[' + disabledDates + ']) > -1;' + searchExpression;\n } else {\n for (var i = 0; i < dates.length; i++) {\n var day = dates[i].slice(0, 2).toLowerCase();\n var index = $.inArray(day, days);\n if (index > -1) {\n disabledDates.push(index);\n }\n }\n body = 'var found = date && window.kendo.jQuery.inArray(date.getDay(),[' + disabledDates + ']) > -1;' + searchExpression;\n }\n callback = new Function('date', body);\n return callback;\n }\n function isEqualDate(oldValue, newValue) {\n if (oldValue instanceof Date && newValue instanceof Date) {\n oldValue = oldValue.getTime();\n newValue = newValue.getTime();\n }\n return oldValue === newValue;\n }\n 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.makeUnselectable = makeUnselectable;\n calendar.restrictValue = restrictValue;\n calendar.isInRange = isInRange;\n calendar.addClassToViewContainer = addClassToViewContainer;\n calendar.normalize = normalize;\n calendar.viewsEnum = views;\n calendar.disabled = getDisabledExpr;\n calendar.toDateObject = toDateObject;\n calendar.getToday = getToday;\n calendar.createDate = createDate;\n kendo.calendar = calendar;\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dateinput', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'dateinput',\n name: 'DateInput',\n category: 'web',\n description: 'The DateInput widget allows to edit date by typing.',\n depends: ['core']\n };\n (function ($, undefined) {\n var global = window;\n var kendo = global.kendo;\n var caret = kendo.caret;\n var ui = kendo.ui;\n var Widget = ui.Widget;\n var keys = kendo.keys;\n var ns = '.kendoDateInput';\n var proxy = $.proxy;\n var objectToString = {}.toString;\n var INPUT_EVENT_NAME = (kendo.support.propertyChangeEvent ? 'propertychange.kendoDateInput input' : 'input') + ns;\n var STATEDISABLED = 'k-state-disabled';\n var STATEDEFAULT = 'k-state-default';\n var STATEINVALID = 'k-state-invalid';\n var DISABLED = 'disabled';\n var READONLY = 'readonly';\n var CHANGE = 'change';\n var knownSymbols = 'dMyHhmftsz';\n var DateInput = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n options.format = kendo._extractFormat(options.format || kendo.getCulture(options.culture).calendars.standard.patterns.d);\n options.min = kendo.parseDate(element.attr('min')) || kendo.parseDate(options.min);\n options.max = kendo.parseDate(element.attr('max')) || kendo.parseDate(options.max);\n var insidePicker = (element.parent().attr('class') || '').indexOf('k-picker-wrap') >= 0;\n if (insidePicker) {\n that.wrapper = element.parent();\n } else {\n that.wrapper = element.wrap('').parent();\n that.wrapper.addClass(element[0].className).removeClass('input-validation-error');\n that.wrapper[0].style.cssText = element[0].style.cssText;\n element.css({\n width: '100%',\n height: element[0].style.height\n });\n }\n that._inputWrapper = $(that.wrapper[0]);\n $('').insertAfter(element);\n that._form();\n that.element.addClass(insidePicker ? ' ' : 'k-textbox').attr('autocomplete', 'off').on('focusout' + ns, function () {\n that._change();\n });\n try {\n element[0].setAttribute('type', 'text');\n } catch (e) {\n element[0].type = 'text';\n }\n var disabled = element.is('[disabled]') || $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n } else {\n that.readonly(element.is('[readonly]'));\n }\n that.value(that.options.value || element.val());\n kendo.notify(that);\n },\n options: {\n name: 'DateInput',\n culture: '',\n value: '',\n format: '',\n min: new Date(1900, 0, 1),\n max: new Date(2099, 11, 31),\n messages: {\n 'year': 'year',\n 'month': 'month',\n 'day': 'day',\n 'weekday': 'day of the week',\n 'hour': 'hours',\n 'minute': 'minutes',\n 'second': 'seconds',\n 'dayperiod': 'AM/PM'\n }\n },\n events: [CHANGE],\n min: function (value) {\n if (value !== undefined) {\n this.options.min = value;\n } else {\n return this.options.min;\n }\n },\n max: function (value) {\n if (value !== undefined) {\n this.options.max = value;\n } else {\n return this.options.max;\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n this._unbindInput();\n this._bindInput();\n this._updateElementValue();\n },\n destroy: function () {\n var that = this;\n that.element.off(ns);\n if (that._formElement) {\n that._formElement.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n value: function (value) {\n if (value === undefined) {\n return this._dateTime.getDateObject();\n }\n if (value === null) {\n value = '';\n }\n if (objectToString.call(value) !== '[object Date]') {\n value = kendo.parseDate(value, this.options.format, this.options.culture);\n }\n if (value && !value.getTime()) {\n value = null;\n }\n this._dateTime = new customDateTime(value, this.options.format, this.options.culture, this.options.messages);\n this._updateElementValue();\n this._oldValue = value;\n },\n _updateElementValue: function () {\n var stringAndFromat = this._dateTime.toPair(this.options.format, this.options.culture, this.options.messages);\n this.element.val(stringAndFromat[0]);\n this._oldText = stringAndFromat[0];\n this._format = stringAndFromat[1];\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _bindInput: function () {\n var that = this;\n that.element.on('focusout' + ns, function () {\n that._change();\n }).on('paste' + ns, proxy(that._paste, that)).on('keydown' + ns, proxy(that._keydown, that)).on(INPUT_EVENT_NAME, proxy(that._input, that)).on('mouseup' + ns, proxy(that._mouseUp, that)).on('DOMMouseScroll' + ns + ' mousewheel' + ns, proxy(that._scroll, that));\n },\n _unbindInput: function () {\n this.element.off('keydown' + ns).off('paste' + ns).off('focusout' + ns).off(INPUT_EVENT_NAME).off('mouseup' + ns).off('DOMMouseScroll' + ns + ' mousewheel' + ns);\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper;\n that._unbindInput();\n if (!readonly && !disable) {\n wrapper.addClass(STATEDEFAULT).removeClass(STATEDISABLED);\n if (element && element.length) {\n element[0].removeAttribute(DISABLED);\n element[0].removeAttribute(READONLY);\n }\n that._bindInput();\n } else {\n if (disable) {\n wrapper.addClass(STATEDISABLED).removeClass(STATEDEFAULT);\n element.attr(DISABLED, disable);\n if (element && element.length) {\n element[0].removeAttribute(READONLY);\n }\n }\n if (readonly) {\n element.attr(READONLY, readonly);\n }\n }\n },\n _change: function () {\n var that = this;\n var oldValue = that._oldValue;\n var value = that.value();\n if (value && that.min() && value < that.min()) {\n that.value(that.min());\n value = that.value();\n }\n if (value && that.max() && value > that.max()) {\n that.value(that.max());\n value = that.value();\n }\n if (oldValue && value && value.getTime() !== oldValue.getTime() || oldValue && !value || !oldValue && value) {\n that._oldValue = value;\n that.trigger(CHANGE);\n that.element.trigger(CHANGE);\n }\n },\n _input: function () {\n var that = this;\n var element = that.element[0];\n var blinkInvalid = false;\n if (kendo._activeElement() !== element) {\n return;\n }\n var diff = approximateStringMatching(this._oldText, this._format, this.element[0].value, caret(this.element[0])[0]);\n var navigationOnly = diff.length === 1 && diff[0][1] === ' ';\n if (!navigationOnly) {\n for (var i = 0; i < diff.length; i++) {\n var valid = this._dateTime.parsePart(diff[i][0], diff[i][1]);\n blinkInvalid = blinkInvalid || !valid;\n }\n }\n this._updateElementValue();\n if (diff.length && diff[0][0] !== ' ') {\n this._selectSegment(diff[0][0]);\n if (!navigationOnly) {\n var difSym = diff[0][0];\n setTimeout(function () {\n that._selectSegment(difSym);\n });\n }\n }\n if (navigationOnly) {\n var newEvent = {\n keyCode: 39,\n preventDefault: function () {\n }\n };\n this._keydown(newEvent);\n }\n if (blinkInvalid) {\n clearTimeout(that._blinkInvalidTimeout);\n var stateInvalid = STATEINVALID;\n that.wrapper.addClass(STATEINVALID);\n that._blinkInvalidTimeout = setTimeout(function () {\n that.wrapper.removeClass(stateInvalid);\n }, 100);\n }\n },\n _mouseUp: function () {\n var selection = caret(this.element[0]);\n if (selection[0] === selection[1]) {\n this._selectNearestSegment();\n }\n },\n _scroll: function (e) {\n if (kendo._activeElement() !== this.element[0] || this.element.is('[readonly]')) {\n return;\n }\n e = window.event || e;\n var newEvent = {\n keyCode: 37,\n preventDefault: function () {\n }\n };\n if (e.shiftKey) {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 37 : 39;\n } else {\n newEvent.keyCode = (e.wheelDelta || -e.detail) > 0 ? 38 : 40;\n }\n this._keydown(newEvent);\n e.returnValue = false;\n if (e.preventDefault) {\n e.preventDefault();\n }\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n },\n _form: function () {\n var that = this;\n var element = that.element;\n var formId = element.attr('form');\n var form = formId ? $('#' + formId) : element.closest('form');\n var initialValue = element[0].value;\n if (!initialValue && that.options.value) {\n initialValue = that.options.value;\n }\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(initialValue);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n var interval = 1;\n if (symbol == 'm') {\n interval = this.options.interval || 1;\n }\n this._dateTime.modifyPart(symbol, key == 38 ? interval * 1 : interval * -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n this.element.trigger(CHANGE);\n }\n }\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n var keycode = e.keyCode ? e.keyCode : e.which;\n if (keycode === 8 || keycode === 46) {\n var that = this;\n setTimeout(function () {\n that._input();\n }, 0);\n }\n }\n if (key === keys.ENTER) {\n this._change();\n }\n },\n _selectNearestSegment: function () {\n var selection = caret(this.element[0]);\n var start = selection[0];\n for (var i = start, j = start - 1; i < this._format.length || j >= 0; i++, j--) {\n if (i < this._format.length && knownSymbols.indexOf(this._format[i]) !== -1) {\n this._selectSegment(this._format[i]);\n return;\n }\n if (j >= 0 && knownSymbols.indexOf(this._format[j]) !== -1) {\n this._selectSegment(this._format[j]);\n return;\n }\n }\n },\n _selectSegment: function (symbol) {\n var begin = -1, end = 0;\n for (var i = 0; i < this._format.length; i++) {\n if (this._format[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n caret(this.element, begin, end);\n }\n });\n ui.plugin(DateInput);\n var customDateTime = function (initDate, initFormat, initCulture, initMessages) {\n var value = null;\n var year = true, month = true, date = true, hours = true, minutes = true, seconds = true, milliseconds = true;\n var typedMonthPart = '';\n var typedDayPeriodPart = '';\n var placeholders = {};\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000'\n ];\n function pad(number, digits, end) {\n number = number + '';\n digits = digits || 2;\n end = digits - number.length;\n if (end) {\n return zeros[digits].substring(0, end) + number;\n }\n return number;\n }\n var dateFormatRegExp = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|HH|H|hh|h|mm|m|fff|ff|f|tt|ss|s|zzz|zz|z|\"[^\"]*\"|'[^']*'/g;\n var months = null, calendar = null, days = null, returnsFormat = false;\n var matcher = function (match) {\n var mins, sign;\n var result;\n switch (match) {\n case 'd':\n result = date ? value.getDate() : placeholders.day;\n break;\n case 'dd':\n result = date ? pad(value.getDate()) : placeholders.day;\n break;\n case 'ddd':\n result = date && month && year ? days.namesAbbr[value.getDay()] : placeholders.weekday;\n break;\n case 'dddd':\n result = date && month && year ? days.names[value.getDay()] : placeholders.weekday;\n break;\n case 'M':\n result = month ? value.getMonth() + 1 : placeholders.month;\n break;\n case 'MM':\n result = month ? pad(value.getMonth() + 1) : placeholders.month;\n break;\n case 'MMM':\n result = month ? months.namesAbbr[value.getMonth()] : placeholders.month;\n break;\n case 'MMMM':\n result = month ? months.names[value.getMonth()] : placeholders.month;\n break;\n case 'yy':\n result = year ? pad(value.getFullYear() % 100) : placeholders.year;\n break;\n case 'yyyy':\n result = year ? pad(value.getFullYear(), 4) : placeholders.year;\n break;\n case 'h':\n result = hours ? value.getHours() % 12 || 12 : placeholders.hour;\n break;\n case 'hh':\n result = hours ? pad(value.getHours() % 12 || 12) : placeholders.hour;\n break;\n case 'H':\n result = hours ? value.getHours() : placeholders.hour;\n break;\n case 'HH':\n result = hours ? pad(value.getHours()) : placeholders.hour;\n break;\n case 'm':\n result = minutes ? value.getMinutes() : placeholders.minute;\n break;\n case 'mm':\n result = minutes ? pad(value.getMinutes()) : placeholders.minute;\n break;\n case 's':\n result = seconds ? value.getSeconds() : placeholders.second;\n break;\n case 'ss':\n result = seconds ? pad(value.getSeconds()) : placeholders.second;\n break;\n case 'f':\n result = milliseconds ? Math.floor(value.getMilliseconds() / 100) : milliseconds;\n break;\n case 'ff':\n result = value.getMilliseconds();\n if (result > 99) {\n result = Math.floor(result / 10);\n }\n result = milliseconds ? pad(result) : match;\n break;\n case 'fff':\n result = milliseconds ? pad(value.getMilliseconds(), 3) : match;\n break;\n case 'tt':\n result = hours ? value.getHours() < 12 ? calendar.AM[0] : calendar.PM[0] : placeholders.dayperiod;\n break;\n case 'zzz':\n mins = value.getTimezoneOffset();\n sign = mins < 0;\n result = Math.abs(mins / 60).toString().split('.')[0];\n mins = Math.abs(mins) - result * 60;\n result = (sign ? '+' : '-') + pad(result);\n result += ':' + pad(mins);\n break;\n case 'z':\n case 'zz':\n result = value.getTimezoneOffset() / 60;\n sign = result < 0;\n result = Math.abs(result).toString().split('.')[0];\n result = (sign ? '+' : '-') + (match === 'zz' ? pad(result) : result);\n break;\n }\n result = result !== undefined ? result : match.slice(1, match.length - 1);\n if (returnsFormat) {\n result = '' + result;\n var formatResult = '';\n if (match == 'ddd') {\n match = 'EEE';\n }\n if (match == 'dddd') {\n match = 'EEEE';\n }\n for (var i = 0; i < result.length; i++) {\n formatResult += match[0];\n }\n return formatResult;\n } else {\n return result;\n }\n };\n function generateMatcher(retFormat) {\n returnsFormat = retFormat;\n return matcher;\n }\n function setExisting(symbol, val) {\n switch (symbol) {\n case 'y':\n year = val;\n break;\n case 'M':\n month = val;\n if (!val) {\n value.setMonth(0);\n typedMonthPart = '';\n }\n break;\n case 'd':\n date = val;\n break;\n case 'H':\n case 'h':\n hours = val;\n if (!val) {\n typedDayPeriodPart = '';\n }\n break;\n case 'm':\n minutes = val;\n break;\n case 's':\n seconds = val;\n break;\n default:\n return;\n }\n }\n this.setValue = function (val) {\n date = val;\n };\n this.getValue = function () {\n return date;\n };\n this.modifyPart = function (symbol, offset) {\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n switch (symbol) {\n case 'y':\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case 'M':\n var newMonth = newValue.getMonth() + offset;\n newValue.setMonth(newMonth);\n if (newValue.getMonth() % 12 !== (newMonth + 12) % 12) {\n newValue.setDate(1);\n newValue.setMonth(newMonth);\n }\n break;\n case 'd':\n case 'E':\n newValue.setDate(newValue.getDate() + offset);\n break;\n case 'H':\n case 'h':\n newValue.setHours(newValue.getHours() + offset);\n break;\n case 'm':\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case 's':\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case 't':\n newValue.setHours((newValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n if (newValue.getFullYear() > 0) {\n setExisting(symbol, true);\n value = newValue;\n }\n };\n this.parsePart = function (symbol, currentChar) {\n if (!currentChar) {\n setExisting(symbol, false);\n return true;\n }\n var newValue = new Date(value && value.getTime ? value.getTime() : value);\n var newHours;\n switch (symbol) {\n case 'd':\n var newDate = (date ? newValue.getDate() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newDate)) {\n return;\n }\n while (newDate > 31) {\n newDate = parseInt(newDate.toString().slice(1), 10);\n }\n if (newDate < 1) {\n date = false;\n } else {\n newValue.setDate(newDate);\n if (newValue.getMonth() !== value.getMonth()) {\n return;\n }\n date = true;\n }\n break;\n case 'M':\n var newMonth = (month ? (newValue.getMonth() + 1) * 10 : 0) + parseInt(currentChar, 10);\n if (!isNaN(newMonth)) {\n while (newMonth > 12) {\n newMonth = parseInt(newMonth.toString().slice(1), 10);\n }\n if (newMonth < 1) {\n month = false;\n } else {\n newValue.setMonth(newMonth - 1);\n if (newValue.getMonth() !== newMonth - 1) {\n newValue.setDate(1);\n newValue.setMonth(newMonth - 1);\n }\n month = true;\n }\n } else {\n var monthNames = calendar.months.names;\n typedMonthPart += currentChar.toLowerCase();\n while (typedMonthPart.length > 0) {\n for (var i = 0; i < monthNames.length; i++) {\n if (monthNames[i].toLowerCase().indexOf(typedMonthPart) === 0) {\n newValue.setMonth(i);\n month = true;\n value = newValue;\n return true;\n }\n }\n typedMonthPart = typedMonthPart.substring(1, typedMonthPart.length);\n }\n return false;\n }\n break;\n case 'y':\n var newYear = (year ? newValue.getFullYear() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newYear)) {\n return;\n }\n while (newYear > 9999) {\n newYear = parseInt(newYear.toString().slice(1), 10);\n }\n if (newYear < 1) {\n year = false;\n } else {\n newValue.setFullYear(newYear);\n year = true;\n }\n break;\n case 'h':\n newHours = (hours ? (newValue.getHours() % 12 || 12) * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 12) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(Math.floor(newValue.getHours() / 12) * 12 + newHours % 12);\n hours = true;\n break;\n case 'H':\n newHours = (hours ? newValue.getHours() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newHours)) {\n return;\n }\n while (newHours > 23) {\n newHours = parseInt(newHours.toString().slice(1), 10);\n }\n newValue.setHours(newHours);\n hours = true;\n break;\n case 'm':\n var newMinutes = (minutes ? newValue.getMinutes() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newMinutes)) {\n return;\n }\n while (newMinutes > 59) {\n newMinutes = parseInt(newMinutes.toString().slice(1), 10);\n }\n newValue.setMinutes(newMinutes);\n minutes = true;\n break;\n case 's':\n var newSeconds = (seconds ? newValue.getSeconds() * 10 : 0) + parseInt(currentChar, 10);\n if (isNaN(newSeconds)) {\n return;\n }\n while (newSeconds > 59) {\n newSeconds = parseInt(newSeconds.toString().slice(1), 10);\n }\n newValue.setSeconds(newSeconds);\n seconds = true;\n break;\n case 't':\n if (hours) {\n typedDayPeriodPart += currentChar.toLowerCase();\n while (typedDayPeriodPart.length > 0) {\n if (calendar.AM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() >= 12 || calendar.PM[0].toLowerCase().indexOf(typedDayPeriodPart) === 0 && newValue.getHours() < 12) {\n newValue.setHours((newValue.getHours() + 12) % 24);\n value = newValue;\n return true;\n }\n typedDayPeriodPart = typedDayPeriodPart.substring(1, typedDayPeriodPart.length);\n }\n return false;\n }\n break;\n default:\n break;\n }\n value = newValue;\n return true;\n };\n this.toPair = function (format, culture, messages) {\n if (!format) {\n return [\n '',\n ''\n ];\n }\n culture = kendo.getCulture(culture);\n calendar = culture.calendars.standard;\n format = calendar.patterns[format] || format;\n days = calendar.days;\n months = calendar.months;\n placeholders = messages;\n return [\n format.replace(dateFormatRegExp, generateMatcher(false)),\n format.replace(dateFormatRegExp, generateMatcher(true))\n ];\n };\n this.getDateObject = function () {\n return year && month && date && hours && minutes && seconds && milliseconds ? new Date(value.getTime()) : null;\n };\n if (!initDate) {\n value = new Date();\n var sampleFormat = this.toPair(initFormat, initCulture, initMessages)[1];\n for (var i = 0; i < sampleFormat.length; i++) {\n setExisting(sampleFormat[i], false);\n }\n } else {\n value = new Date(initDate.getTime());\n }\n };\n function approximateStringMatching(oldText, oldFormat, newText, caret) {\n var oldTextSeparator = oldText[caret + oldText.length - newText.length];\n oldText = oldText.substring(0, caret + oldText.length - newText.length);\n newText = newText.substring(0, caret);\n var diff = [];\n var i;\n if (oldText === newText && caret > 0) {\n diff.push([\n oldFormat[caret - 1],\n newText[caret - 1]\n ]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n var deletedSymbol = '';\n for (i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && knownSymbols.indexOf(oldFormat[i]) >= 0) {\n deletedSymbol = oldFormat[i];\n diff.push([\n deletedSymbol,\n ''\n ]);\n }\n }\n return diff;\n }\n if (newText[newText.length - 1] === ' ' || newText[newText.length - 1] === oldTextSeparator) {\n return [[\n oldFormat[caret - 1],\n ' '\n ]];\n }\n if (newText.indexOf(oldText) === 0 || knownSymbols.indexOf(oldFormat[caret - 1]) === -1) {\n var symbol = oldFormat[0];\n for (i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (knownSymbols.indexOf(oldFormat[i]) >= 0) {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[\n symbol,\n newText[caret - 1]\n ]];\n }\n return [[\n oldFormat[caret - 1],\n newText[caret - 1]\n ]];\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.datepicker', [\n 'kendo.calendar',\n 'kendo.popup',\n 'kendo.dateinput'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'datepicker',\n name: 'DatePicker',\n category: 'web',\n description: 'The DatePicker widget allows the user to select a date from a calendar or by direct input.',\n depends: [\n 'calendar',\n 'popup'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, parse = kendo.parseDate, keys = kendo.keys, support = kendo.support, template = kendo.template, activeElement = kendo._activeElement, DIV = '
          ', SPAN = '', ns = '.kendoDatePicker', CLICK = 'click' + ns, UP = support.mouseAndTouchPresent ? kendo.applyEventMap('up', ns.slice(1)) : CLICK, OPEN = 'open', CLOSE = 'close', CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', HOVER = 'k-state-hover', HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, MOUSEDOWN = 'mousedown' + ns, ID = 'id', MIN = 'min', MAX = 'max', MONTH = 'month', ARIA_DISABLED = 'aria-disabled', ARIA_READONLY = 'aria-readonly', ARIA_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container');\n that.options = options = options || {};\n id = options.id;\n if (!options.omitPopup) {\n div.appendTo(body);\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n } else {\n div = options.dateDiv;\n }\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(options.omitPopup ? options.dateDiv : that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div, { componentType: options.componentType });\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n 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 this.popup.close();\n },\n min: function (value) {\n this._option(MIN, value);\n },\n max: function (value) {\n this._option(MAX, value);\n },\n toggle: function () {\n var that = this;\n that[that.popup.visible() ? CLOSE : OPEN]();\n },\n move: function (e) {\n var that = this, key = e.keyCode, calendar = that.calendar, selectIsClicked = e.ctrlKey && key == keys.DOWN || key == keys.ENTER, handled = false;\n if (e.altKey) {\n if (key == keys.DOWN) {\n that.open();\n e.preventDefault();\n handled = true;\n } else if (key == keys.UP) {\n that.close();\n e.preventDefault();\n handled = true;\n }\n } else if (that.popup && 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-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 date is #=kendo.toString(data.current, \"D\")#',\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_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n icon.on(UP, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable).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 that.element.val('');\n }\n that._oldText = that.element.val();\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _blur: function () {\n var that = this, value = that.element.val();\n that.close();\n if (value !== that._oldText) {\n that._change(value);\n if (!value) {\n that.dateView.current(kendo.calendar.getToday());\n }\n }\n that._inputWrapper.removeClass(FOCUSED);\n },\n _click: function (e) {\n var that = this;\n that.dateView.toggle();\n that._focusElement(e.type);\n },\n _focusElement: function (eventType) {\n var element = this.element;\n if ((!support.touch || support.mouseAndTouchPresent && !(eventType || '').match(/touch/i)) && element[0] !== activeElement()) {\n element.trigger('focus');\n }\n },\n _change: function (value) {\n var that = this, oldValue = that.element.val(), dateChanged;\n value = that._update(value);\n dateChanged = !kendo.calendar.isEqualDate(that._old, value);\n var valueUpdated = dateChanged && !that._typing;\n var textFormatted = oldValue !== that.element.val();\n if (valueUpdated || textFormatted) {\n that.element.trigger(CHANGE);\n }\n if (dateChanged) {\n that._old = value;\n that._oldText = that.element.val();\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _keydown: function (e) {\n var that = this, dateView = that.dateView, value = that.element.val(), handled = false;\n if (!dateView.popup.visible() && e.keyCode == keys.ENTER && value !== that._oldText) {\n that._change(value);\n } else {\n handled = dateView.move(e);\n that._updateARIA(dateView._current);\n if (!handled) {\n that._typing = true;\n } else if (that._dateInput && e.stopImmediatePropagation) {\n e.stopImmediatePropagation();\n }\n }\n },\n _icon: function () {\n var that = this, element = that.element, icon;\n icon = element.next('span.k-select');\n if (!icon[0]) {\n icon = $('').insertAfter(element);\n }\n that._dateIcon = icon.attr({\n 'role': 'button',\n 'aria-controls': that.dateView._dateViewID\n });\n },\n _option: function (option, value) {\n var that = this, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = parse(value, options.parseFormats, options.culture);\n if (!value) {\n return;\n }\n options[option] = new DATE(+value);\n that.dateView[option](value);\n },\n _update: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max, current = that._value, date = parse(value, options.parseFormats, options.culture), isSameType = date === null && current === null || date instanceof Date && current instanceof Date, formattedValue;\n if (options.disableDates(date)) {\n date = null;\n if (!that._old && !that.element.val()) {\n value = null;\n }\n }\n if (+date === +current && isSameType) {\n formattedValue = kendo.toString(date, options.format, options.culture);\n if (formattedValue !== value) {\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 = template(this.options.ARIATemplate);\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 cell;\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 cell = calendar._cell;\n cell.attr('aria-label', that._ariaTemplate({ current: date || calendar.current() }));\n that.element.attr('aria-activedescendant', cell.attr('id'));\n }\n }\n });\n ui.plugin(DatePicker);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.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', 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 },\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(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(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 = '.', CLASS_ICON = 'k-icon', LABELCLASSES = 'k-label k-input-label', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, isPlainObject = $.isPlainObject, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n var inputType;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focusout' + ns, proxy(that._focusout, that)).attr('role', 'spinbutton');\n options.placeholder = options.placeholder || element.attr('placeholder');\n min = that.min(element.attr('min'));\n max = that.max(element.attr('max'));\n step = that._parse(element.attr('step'));\n if (options.min === NULL && min !== NULL) {\n options.min = min;\n }\n if (options.max === NULL && max !== NULL) {\n options.max = max;\n }\n if (!isStep && step !== NULL) {\n options.step = step;\n }\n that._initialOptions = extend({}, options);\n inputType = element.attr('type');\n that._reset();\n that._wrapper();\n that._arrows();\n that._validation();\n that._input();\n if (!kendo.support.mobileOS) {\n that._text.on(FOCUS + ns, proxy(that._click, that));\n } else {\n that._text.on(TOUCHEND + ns + ' ' + FOCUS + ns, function () {\n if (kendo.support.browser.edge) {\n that._text.one(FOCUS + ns, function () {\n that._toggleText(false);\n element.focus();\n });\n } else {\n that._toggleText(false);\n element.focus();\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 = 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 kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value',\n label: null\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keyup' + ns).off('input' + ns).off('paste' + ns);\n if (that._inputLabel) {\n that._inputLabel.off(ns);\n }\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that)).on('input' + ns, proxy(that._inputHandler, that));\n if (that._inputLabel) {\n that._inputLabel.on('click' + ns, proxy(that.focus, that));\n }\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n var that = this;\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n if (that.floatingLabel) {\n that.floatingLabel.readonly(readonly === undefined ? true : readonly);\n }\n },\n enable: function (enable) {\n var that = this;\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n if (that.floatingLabel) {\n that.floatingLabel.enable(enable = enable === undefined ? true : enable);\n }\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._arrowsWrap.toggle(that.options.spinners);\n that._inputWrapper.toggleClass('k-expand-padding', !that.options.spinners);\n that._text.prop('placeholder', that.options.placeholder);\n that._placeholder(that.options.placeholder);\n that.element.attr({\n 'aria-valuemin': that.options.min !== NULL ? that.options.min * that.options.factor : that.options.min,\n 'aria-valuemax': that.options.max !== NULL ? that.options.max * that.options.factor : that.options.max\n });\n that.options.format = extractFormat(that.options.format);\n if (options.value !== undefined) {\n that.value(options.value);\n }\n },\n destroy: function () {\n var that = this;\n if (that._inputLabel) {\n that._inputLabel.off(ns);\n if (that.floatingLabel) {\n that.floatingLabel.destroy();\n }\n }\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.' + CLASS_ICON);\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n that._arrowsWrap = arrows.wrapAll('').parent();\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _validation: function () {\n var that = this;\n var element = that.element;\n that._validationIcon = $('').hide().insertAfter(element);\n },\n _blur: function () {\n var that = this;\n that._toggleText(true);\n that._change(that.element.val());\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('(^(-)$)|(^(-)?([\\\\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 _change: function (value) {\n var that = this, factor = that.options.factor;\n if (factor && factor !== 1) {\n value = kendo.parseFloat(value);\n if (value !== null) {\n value = value / factor;\n }\n }\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n that._removeInvalidState();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('').insertBefore(element).addClass(CLASSNAME).attr('aria-hidden', 'true');\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._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 },\n _blinkInvalidState: function () {\n var that = this;\n that._addInvalidState();\n clearTimeout(that._invalidStateTimeout);\n that._invalidStateTimeout = setTimeout(proxy(that._removeInvalidState, that), 100);\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n that._invalidStateTimeout = null;\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0 && that.options.restrictDecimals) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, 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 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 var SUMMARYTEMPLATE = '';\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n that._summaryTemplate = kendo.template(that.options.validationSummary.template || SUMMARYTEMPLATE);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n if (that._validateOnInit()) {\n that.validate();\n }\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '#= message #',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true,\n validationSummary: false\n },\n _allowSubmit: function () {\n return kendo.ui.validator.allowSubmit(this.element, this.errors());\n },\n _validateOnInit: function () {\n return kendo.ui.validator.validateOnInit(this.element);\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.validationSummary) {\n this.validationSummary.off(NS);\n this.validationSummary = null;\n }\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate() && !this._allowSubmit()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n if (this.options.validationSummary && !isValid) {\n this.showValidationSummary();\n }\n this.trigger(VALIDATE, {\n valid: result,\n errors: this.errors()\n });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).addClass('k-hidden'), messageText = !valid ? that._extractMessage(input, result.key) : '', messageLabel = !valid ? parseHtml(template({\n message: decode(messageText),\n field: fieldName\n })) : '', wasValid = !input.attr(ARIAINVALID);\n input.removeAttr(ARIAINVALID);\n if (!valid) {\n that._errors[fieldName] = messageText;\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (lbl.length !== 0) {\n lbl.replaceWith(messageLabel);\n } else {\n var widgetInstance = kendo.widgetInstance(input);\n var parentElement = input.parent().get(0);\n var nextElement = input.next().get(0);\n if (parentElement && parentElement.nodeName === 'LABEL') {\n messageLabel.insertAfter(parentElement);\n } else if (nextElement && nextElement.nodeName === 'LABEL') {\n messageLabel.insertAfter(nextElement);\n } else if (widgetInstance && widgetInstance.wrapper) {\n messageLabel.insertAfter(widgetInstance.wrapper);\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 sorted.push(input.attr(NAME));\n }\n }\n return sorted;\n },\n _associateMessageContainer: function (input, errorId) {\n var nextFocusable = kendo.getWidgetFocusableElement(input);\n if (!nextFocusable || !errorId) {\n return;\n }\n kendo.toggleAttribute(nextFocusable, ARIADESCRIBEDBY, errorId);\n },\n _disassociateMessageContainers: function () {\n var that = this, inputs = that.element.find('.' + INVALIDINPUT).addBack(), input, errorId;\n for (var i = 0; i < inputs.length; i += 1) {\n input = $(inputs[i]);\n if (input.is('input')) {\n errorId = that._findMessageContainer(input.attr(NAME)).add(input.next('.' + INVALIDMSG)).attr('id');\n that._associateMessageContainer(input, errorId);\n }\n }\n },\n _errorsByName: function () {\n var that = this, inputNames = that._getInputNames(), sorted = [];\n for (var i = 0; i < inputNames.length; i += 1) {\n var name = inputNames[i];\n if (that._errors[name]) {\n sorted.push({\n field: name,\n message: that._errors[name]\n });\n }\n }\n return sorted;\n },\n _renderSummary: function () {\n var that = this, options = this.options.validationSummary, element = this.element, prevElement = element.prev(), container;\n if (options.container) {\n container = $(options.container);\n } else if (prevElement && prevElement.hasClass(VALIDATIONSUMMARY)) {\n container = prevElement;\n } else {\n container = $('
          ').insertBefore(that.element);\n }\n container.addClass([\n VALIDATIONSUMMARY,\n MESSAGEBOX\n ].join(' '));\n container.attr('role', 'alert');\n container.on('click' + NS, proxy(that._summaryClick, that));\n return container;\n },\n _summaryClick: function (e) {\n e.preventDefault();\n var that = this, link = $(e.target), target = that.element.find('[name=\\'' + link.data('field') + '\\']'), nextFocusable;\n if (!target.length) {\n return;\n }\n nextFocusable = kendo.getWidgetFocusableElement(target);\n if (nextFocusable) {\n nextFocusable.focus();\n }\n },\n showValidationSummary: function () {\n var that = this, summary = that.validationSummary, errors = that._errorsByName(), errorsList;\n if (!summary) {\n summary = that.validationSummary = that._renderSummary();\n }\n errorsList = parseHtml(that._summaryTemplate({ errors: errors }));\n summary.html(errorsList);\n summary.toggleClass('k-hidden', !errors.length);\n },\n hideValidationSummary: function () {\n var that = this, summary = that.validationSummary;\n if (!summary) {\n return;\n }\n summary.addClass('k-hidden');\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editable', [\n 'kendo.dropdownlist',\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'dropdownlist',\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, POINT = '.', AUTOCOMPLETEVALUE = 'off', nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
          ' + '' + '#= message #' + '' + '
          ', CHANGE = 'change';\n var EQUAL_SET = 'equalSet';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, .k-combobox .k-input, [' + kendo.attr('role') + '=listbox], [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file])').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, attributes = field ? field.attributes : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n id: options.id || options.field,\n name: options.field,\n title: options.title ? options.title : options.field\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n var culture = kendo.getCulture();\n if (typeof rule === 'number' && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString().replace(POINT, numberFormat[POINT]);\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n attr.autocomplete = AUTOCOMPLETEVALUE;\n }\n for (var attributeName in attributes) {\n attr[attributeName] = attributes[attributeName];\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function addIdAttribute(container, attr) {\n var id = container.attr('id');\n if (id) {\n attr.id = id;\n container.removeAttr('id');\n }\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n function getEditorTag(type, options) {\n var tag;\n if (!type.length) {\n return;\n }\n if (type === 'DropDownTree' && options && options.checkboxes || type === 'MultiSelect') {\n tag = '