{"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","Date","getTime","isFunction","clone","UNDEFINED","testRx","agent","rxs","dflt","rx","hasOwnProperty","toHyphens","str","g","toLowerCase","toCamelCase","strMatch","g1","toUpperCase","getComputedStyles","properties","computedStyle","styles","document","defaultView","getComputedStyle","each","idx","value","getPropertyValue","currentStyle","size","isScrollable","className","indexOf","overflow","scrollLeft","isRtl","webkit","mozila","mozilla","el","scrollWidth","clientWidth","Math","abs","obj","key","result","getOffset","type","positioned","offset","sign","top","pointers","msPointers","pageYOffset","documentElement","scrollTop","pageXOffset","parseEffects","input","effects","this","fx","Element","prepareAnimationOptions","options","duration","reverse","complete","STRING","BOOLEAN","extend","init","noop","teardown","hide","completeCallback","animate","instance","queue","promise","toggleClass","classes","add","htmlEncode","ampRegExp","ltRegExp","gtRegExp","quoteRegExp","aposRegExp","parseOption","option","dashRegExp","getAttribute","ns","numberRegExp","parseFloat","jsonRegExp","jsonFormatRegExp","Function","parseOptions","role","templateRegExp","template","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","String","indent","\b","\t","\n","\f","\r","\"","\\","valueOf","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","Number","Boolean","stringify","replacer","space","","findCulture","culture","numberFormat","getCulture","current","formatDate","date","calendar","calendars","standard","days","months","patterns","dateFormatRegExp","minutes","getDate","namesAbbr","getDay","names","getMonth","getFullYear","getHours","getMinutes","getSeconds","getMilliseconds","AM","PM","getTimezoneOffset","formatNumber","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","parseInt","_extractFormat","_activeElement","activeElement","_round","includeMargin","outOfRange","designatorPredicate","designator","mapDesignators","designators","map","adjustDST","hours","setHours","lowerArray","array","lowerLocalInfo","localInfo","newLocalInfo","parseExact","strict","count","pmHour","UTC","matches","amDesignators","pmDesignators","hoursOffset","minutesOffset","hasTime","lookAhead","getNumber","rg","substr","valueIdx","getIndexByName","lower","nameLength","subValue","matchLength","matchIdx","checkLiteral","year","month","day","seconds","milliseconds","defaultYear","_lowerDays","_lowerMonths","longTimeZoneRegExp","shortTimeZoneRegExp","isNaN","setFullYear","parseMicrosoftFormatOffset","getDefaultFormats","cultureFormats","formatIdx","FORMATS_SEQUENCE","STANDARD_FORMATS","formats","concat","internalParseDate","tzoffset","dateRegExp","offsetRegExp","timezone","convert","nonBreakingSpaceRegExp","exponentRegExp","2","3","4","parseDate","parseExactDate","percentSymbol","table","docStyle","transforms","elementProto","mobileOS","documentMode","chrome","_scrollbar","scrollbar","refresh","div","createElement","cssText","innerHTML","body","appendChild","offsetWidth","removeChild","closest","tbodyInnerHtml","touch","HTMLElement","hasHW3D","WebKitCSSMatrix","cssFlexbox","lowPrefix","prefix","hasTransitions","event","devicePixelRatio","screenWidth","screen","availWidth","innerWidth","screenHeight","availHeight","innerHeight","detectOS","ua","minorVersion","os","notAndroidPhone","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","formFactorRxs","tablet","browserRxs","omini","omobile","firefox","mobilesafari","ie","navigator","device","majorVersion","flatVersion","cordova","PhoneGap","appMode","standalone","location","protocol","userAgent","wpDevicePixelRatio","hasNativeScrolling","delayedClick","mouseAndTouchPresent","detectBrowser","edge","safari","opera","detectClipboardAccess","commands","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","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","angular","_hasBindingTarget","kendoBindingTarget","_tabindex","TABINDEX","tabindex","removeAttr","setOptions","_setEvents","force","getSize","currentSize","_size","_resize","dimensions","setSize","destroy","removeData","_destroy","_muteAngularRebind","_muteRebind","dataItems","flatView","_angularItems","cmd","elements","items","dataItem","domElement","offsetHeight","notify","initWidget","roles","fullPath","widgetKeyRegExp","widgetKey","nodeType","isEmptyObject","rolesFromNamespaces","namespaces","find","widgetsArray","makeArray","widgetInstance","progress","container","leftRight","webkitCorrection","containerScrollLeft","mask","opacity","loading","prependTo","remove","plugin","register","widgetEntry","args","method","nullObject","autoApplyNS","kendoDestroy","view","viewElement","viewHasNativeScrolling","useNativeScrolling","eq","appLevelNativeScrolling","application","themes","views","touchScroller","useNative","Scroller","kendoMobileScroller","suites","editorToolbar","onResize","setTimeout","unbindResize","off","attrValue","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","kendoFocusable","setupMouseMute","mouseTrap","bustClick","captureMouse","stopPropagation","muteMouse","clearTimeout","mouseTrapTimeoutID","unMuteMouse","move","cancel","MSPointerEnter","MSPointerLeave","orig","fix","special","delegateType","bindType","handle","ret","related","relatedTarget","handleObj","origType","applyEventMap","pop","search","touchstart","touchend","ruleToDate","rule","targetDay","ourDay","time","cache","getUTCDay","setUTCDate","findRule","utcTime","rules","zone","grep","from","to","findZone","zones","until","zoneRules","zoneAndRule","info","fromOffset","toOffset","diff","fromLocalOffset","toLocalOffset","tempToOffset","toLocalDate","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","Sun","Mon","Tue","Wed","Thu","Fri","Sat","setDayOfWeek","dir","setDate","dayOfWeek","firstDayOfMonth","lastDayOfMonth","last","timeOffset","moveDateToWeekStart","weekStartDay","addDays","calcWeekInYear","firstWeekInYear","newDate","diffInMS","MS_PER_DAY","weekInYear","prevWeekDate","nextWeekDate","weekNumber","toUtcTime","toInvariantTime","isInTimeRange","msValue","msMin","msMax","isInDateRange","setTime","ignoreDST","difference","MS_PER_MINUTE","today","isToday","staticDate","nextDay","previousDay","MS_PER_HOUR","stripWhitespace","iterator","child","createNodeIterator","NodeFilter","SHOW_TEXT","node","FILTER_ACCEPT","FILTER_REJECT","nextNode","referenceNode","textContent","trim","childNodes","nodeValue","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","queueAnimation","runNextAnimation","parseQueryStringParams","queryString","params","paramParts","decodeURIComponent","elementUnderCursor","x","client","wheelDeltaY","jQueryEvent","delta","deltaY","wheelDelta","detail","axis","VERTICAL_AXIS","throttle","delay","timeout","throttled","lastExecTime","elapsed","caret","rangeElement","rangeDuplicated","selectionStart","selectionEnd","isPosition","focus","setSelectionRange","selection","createTextRange","collapse","moveStart","moveEnd","select","duplicate","moveToBookmark","createRange","getBookmark","setEndPoint","text","compileMobileDirective","scope","injector","invoke","$compile","$$phase","$digest","antiForgeryTokens","tokens","csrf_token","csrf_param","cycleForm","form","firstElement","lastElement","keyCode","shiftKey","focusElement","scrollTopPositions","scrollableParents","parentsUntil","setActive","matchesMedia","mediaQuery","media","_bootstrapToMedia","bootstrapMedia","xs","sm","md","lg","xl","postToProxy","dataURI","fileName","proxyURL","proxyTarget","action","contentType","base64","appendTo","submit","saveAsBlob","blob","atob","Uint8Array","Blob","buffer","msSaveBlob","saveAsDataURI","URL","createObjectURL","fileSaver","download","createEvent","initMouseEvent","dispatchEvent","revokeObjectURL","downloadAttribute","saveAs","save","forceProxy","proxyModelSetters","observable","forEach","defineProperty","dirty","amd","a1","a2","a3","parseInteger","parseCSS","propertyName","acc","strip3DTransforms","transformProps","transform2d","normalizeCSS","lowerKey","isTransformed","transformation","cssValues","TRANSFORM","animationProperty","transform","computed","NONE","matrix3dRegExp","translateXRegExp","atan2","capitalize","word","createEffect","definition","effectClass","Effect","direction","opt1","opt2","opt3","theDirection","createToggleEffect","defaultStart","defaultEnd","IN_OUT","startValue","_startValue","endValue","_endValue","shouldHide","_shouldHide","prepare","_direction","startDataValue","startDataValueIsSet","_reverse","clipInHalf","vertical","HEIGHT","WIDTH","CLIPS","curProxy","EffectSet","FOUR_DIRECTIONS","TRANSFER_START_STATE","ROTATIONS","RESTORE_OVERFLOW","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","Transition","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","cssParamsRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transform2units","rotate","skew","cssPrefix","BLANK","PX","AUTO","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","transition","modifier","horizontal","stopQueue","val","transformValue","step","elem","now","cur","prop","exclusive","ease","mirror","redirectedEffect","resolved","$1","$2","effect","effectBody","timeoutID","stopTransitionCalled","stopTransition","oldKeys","speeds","merge","uniqueSort","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","pow","easeOutBack","inner","outer","fitScale","absoluteURL","path","pathPrefix","regEx","host","hashDelimiter","bang","locationHash","stripRoot","root","fixHash","fixBang","CHANGE","BACK","SAME","CHECK_URL_INTERVAL","BROKEN_BACK_NAV","hashStrip","HistoryAdapter","forward","replaceLocation","PushStateAdapter","navigate","title","replaceState","normalize","pathname","change","normalizeCurrent","fixedUrl","hash","hashBang","HashAdapter","_id","_interval","setInterval","clearInterval","History","adapter","createAdapter","historyLength","locations","silent","_navigate","backCalled","decode","_checkUrl","newLength","navigatingInExisting","prev","backButtonPressed","namedParamReplace","optional","routeToRegExp","route","ignoreCase","escapeRegExp","optionalParam","namedParam","splatParam","stripUrl","INIT","ROUTE_MISSING","Route","_callback","queryStringParams","_back","worksWith","Router","routes","_urlChangedProxy","_sameProxy","_backProxy","initEventObject","sameProxy","_same","backProxy","urlChangedProxy","_urlChanged","same","toOdataFilter","useOdataFour","operator","logic","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","error","XmlDataReader","idField","xmlParse","model","errors","serialize","modelBase","Model","fields","xpathToMember","modelInstance","evaluate","record","_parse","xml","parseDOM","parsedNode","attribute","attributes","attributeCount","firstChild","nextSibling","intermediateResult","tree","parseXML","raw","readers","eventHandler","_notifyChange","equal","xtype","ytype","getFieldByName","fieldName","Query","normalizeSort","descriptor","descriptors","normalizeOperator","operatorMap","normalizeFilter","compareDescriptor","f1","f2","normalizeDescriptor","fieldComparer","compareFilters","expr1","expr2","filters1","filters2","normalizeAggregate","expressions","normalizeGroup","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","groups","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","json","object","howMany","thisArg","reduce","reduceRight","every","some","Symbol","_parent","_handlers","shouldSerialize","_set","paths","composite","isSetPrevented","isObservableArray","isDataSource","boolean","default","defaults","_initializers","dirtyFields","editable","initiator","accept","isNew","functionFields","nullable","defaultValue","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","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","_filter","_group","_aggregate","_total","_shouldDetachObservableParents","pushCreate","_pushCreate","pushUpdate","_pushUpdate","pushDestroy","_pushDestroy","offlineStorage","_storage","getItem","localStorage","setItem","reader","_detachObservableParents","_observe","_online","serverSorting","serverPaging","serverFiltering","serverAggregates","inPlaceSort","online","sync","offlineData","_isServerGrouped","_push","_readData","_flatData","useRanges","getByUid","_getByUid","_storeData","_addRange","_process","_observeView","insert","_createNewModel","_wrapInEmptyGroup","_insertModelInRange","pushInsert","pushed","autoSync","pristine","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","_aggregateResult","_skip","endless","_changeHandler","updatePristine","timestamp","_timeStamp","_sortRanges","xhr","errorThrown","_requestInProgress","_pending","_shouldWrap","arrayType","_updateTotalForAction","_calculateAggregates","_take","currentRangeStart","_clearEmptyGroups","_queryProcess","dataToAggregate","_setFilterTotal","_mergeState","_currentRangeStart","moreItemsCount","remote","filterTotal","setDefaultValue","fetch","_query","next","totalPages","_pageableQueryOptions","_emptyAggregates","ceil","inRange","_findRange","lastRange","firstItemUid","enableRequestsInProgress","_skipRequestsInProgress","_currentRequestTimeStamp","pageSkip","_processRangeData","_rangeExists","prefetch","skipIdx","takeIdx","startIndex","endIndex","rangeData","rangeEnd","processed","flatData","_mergeGroups","prevGroup","paging","sorting","filtering","_prefetchSuccessHandler","_timeout","_multiplePrefetch","_removeModelFromRange","_updateRangesLength","rangesLength","mismatchFound","mismatchLength","lengthDifference","transportOptions","hasChildrenObject","childrenField","childrenOptions","_childrenOptions","_initChildren","_updateChildrenField","loaded","level","_childrenLoaded","load","_matchFilter","_hierarchicalFilter","_markHierarchicalQuery","_updateHierarchicalFilter","_find","_dataSource","viewSize","disablePrefetch","_prefetching","_reset","_syncWithDataSource","setViewSize","_recalculate","itemPresent","dataOffset","prefetchThreshold","midPageThreshold","nextMidRange","nextPageThreshold","nextFullRange","pullBackThreshold","previousMidRange","previousFullRange","_goToRange","nextRange","syncDataSource","prefetchOffset","expanding","_expanding","_syncPending","_firstItemUid","batchSize","batchBuffer","endreached","prefetching","prefetched","dataSourceBinding","bindingName","Binder","bindings","_dataBinding","dataBinding","_dataBound","dataBound","_itemChange","itemChange","bindElement","_ns","_parents","removedItems","unbindElementTree","all","addedItems","hds","addedDataItems","multiselect","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","removeAttribute","destroyWidgets","unbindElementChildren","namespace","TypedBinder","arraySplice","binders","VALUE","SOURCE","EVENTS","CHECKED","CSS","dependencies","_access","dependency","currentSource","parsedValue","_parseValue","readonly","dataFormat","invisible","_initChange","cloneNode","reference","insertBefore","checked","selectedIndex","selected","valueIndex","sourceValue","optionIndex","optionValue","check","_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","_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","_wheelTimeout","pullOffset","visibleScrollHints","pullTemplate","releaseTemplate","refreshTemplate","contentResized","_scale","zoomOut","animatedScrollTo","pullHandled","refreshHint","hintContainer","yinertia","xinertia","_paneChange","_dragEnd","scrollBar","tabKeyTrapNS","focusableNodesSelector","TabKeyTrap","OPEN","CLOSE","DEACTIVATE","ACTIVATE","CENTER","TOP","BOTTOM","ABSOLUTE","BODY","LOCATION","VISIBLE","EFFECTS","ACTIVE","ACTIVEBORDER","ACTIVEBORDERREGEXP","ACTIVECHILDREN","MOUSEDOWN","DOCUMENT_ELEMENT","WINDOW","NS","Popup","parentPopup","collisions","collision","downEvent","anchor","_hovered","scrollArea","animation","open","_animationClose","_mousedownProxy","_mousedown","_resizeProxy","toggleTarget","toggleEvent","viewport","copyAnchorStyles","modal","adjustSize","_hideDirClass","_closing","_toggleResize","fixed","flipped","_position","_openAnimation","_showDirClass","_location","dirClass","skipEffects","openEffects","closeEffects","popup","ev","_resizeTimeout","_scrollableParents","_fit","viewPortSize","output","_flip","anchorSize","boxSize","siblingContainer","parentZIndex","viewportOffset","viewportWidth","viewportHeight","pos","anchorParent","offsets","flipPos","elementHeight","wrapperHeight","isWindow","origins","positions","siblings","_align","offsetParent","appendToOffset","verticalOrigin","horizontalOrigin","verticalPosition","horizontalPosition","anchorOffset","anchorWidth","anchorHeight","trap","_keepInTrap","removeTrap","shouldTrap","sortedElements","_focusableElements","_sortFocusableElements","_nextFocusable","_focus","tabIndex","attrName","contentWindow","_haveSelectionRange","elementType","restoreTitle","restoreTitleAttributeForElement","saveTitleAttributeForElement","saveTitleAttributes","DOCUMENT","ARIAIDSUFFIX","DESCRIBEDBY","CONTENTLOAD","KCONTENTFRAME","TEMPLATE","IFRAMETEMPLATE","POSITIONS","REVERSE","DIRCLASSES","DIMENSIONS","DEFAULTCONTENT","Tooltip","_documentKeyDownHandler","_documentKeyDown","showOn","_showOn","_isShownOnMouseEnter","_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","Color","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","regexp","colorNames","toHSV","toRGB","toHex","toBytes","toCss","toCssRgba","rgb","r","toDisplay","other","c1","c2","NaN","h","ref","toHSL","l","resolvedColor","formatRegex","processor","channels","this$1","resolveColor","re","normalizeByte","padDigit","brightness","percBrightness","fromBytes","fromRGB","fromHSV","fromHSL","normalizeText","REPLACE_REGEX","SPACE","objectKey","hashKey","zeroSize","baseline","measureText","measureBox","TextMetrics","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","_length","put","entry","_head","_tail","newer","older","baselineMarkerSize","styleKey","cacheKey","cachedResult","baselineMarker","textStr","_baselineMarker","offsetTop","second","arabicToRoman","roman","defined","definitionId","defId","deg","radians","DEG_TO_RAD","encodeUTF8","fromCharCode","encodeBase64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","utfInput","KEY_STR","eventCoordinates","eventElement","isTransparent","limitValue","mergeSort","cmp","ai","bi","rad","degrees","power","valueOrDefault","bindEvents","getBoundingClientRect","clientTop","clientLeft","elementStyles","stylesArray","getPixels","size$1","unbindEvents","setAccessor","geometryChange","getAccessor","defineAccessors","capitalized","toMatrix","matrix","Transformation","ellipseExtremeAngles","ry","extremeX","extremeY","geometryAccessor","_observerField","defineGeometryAccessors","tolerance","PRECISION","closeOrLess","lineIntersection","p0","p1","p2","p3","s1x","s2x","s1y","s2y","nx","ny","Point","calculateAngle","cx","cy","cos","sin","normalizeArcParameters","cosine","sine","xT","yT","xt2","yt2","rx2","ry2","constT","cxT","cyT","uX","uY","vX","vY","startAngle","angleCosine","angle","endAngle","signEndAngle","largeArc","swipe","acos","radiusX","radiusY","xRotation","bboxStartAngle","pointAccessor","definePointAccessors","isOutOfEndPoint","endPoint","controlPoint","point","rotatedPoint","transformCopy","calculateCurveAt","points","t1","toCubicPolynomial","numberSign","solveQuadraticEquation","squareRoot","solveCubicEquation","Q","b3a","y3","z1","z2","ComplexNumber","nthRoot","multiplyConstant","negate","multiply","isReal","real","hasRootsInRange","rootField","intersection","polynomial","roots","curveIntersectionsCount","bbox","rayIntersection","intersectsRay","bottomRight","lineIntersectionsCount","intersects","arrayLimits","MAX_NUM","MIN_NUM","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","rawBBox","Rect","union","elementsClippedBoundingBox","clippedBBox","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","transform$$1","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","image","exportSVG","slice$1","thing","cls","classList","setCSS","getXY","drawDOM","doOne","setTransform","nodeInfo","_clipbox","_matrix","Matrix","unit","_stackingContext","_avoidLinks","avoidLinks","renderElement","makeTemplate","template$$1","firstElementChild","handlePageBreaks","forceBreak","pageWidth","pageHeight","doPageBreak","splitElement","makePage","pages","pageNum","cacheImages","whenImagesAreActuallyLoaded","keepTogether","adjust","tag","bottomPadding","bottomBorder","saveAdjust","isFirst","fall","tableLayout","breakAtElement","fallsOnMargin","splitText","firstInParent","colgroup","thead","gridHead","querySelector","repeatHeaders","doc","setStartBefore","setEndBefore","extractContents","preventBulletOnListItem","padding","pageClassName","available","nextnode","selectNodeContents","findEOP","setEnd","endOffset","li","_destructive","cloneNodes","tfoot","ol","paddingLeft","paddingRight","beforePageBreak","pdf","defineFont","getFontFaces","forcePageBreak","hasPaperSize","paperSize","paperOptions","getPaperOptions","def","hasMargin","multiPage","_ignoreMargin","canceled","doStylesheet","ss","cssRules","ex","addRules","findFonts","font","splitProperty","getFontURL","styleSheet","family","bold","italic","addRule","styleSheets","getCounter","getAllCounters","getPrototypeOf","incCounter","inc","_root","resetCounter","doCounters","updateCounters","counterIncrement","counterReset","parseColor$1","pending","img","images","onload","onerror","IMAGE_CACHE","urls","dive","parseBackgroundImage","bg","Image","crossOrigin","alphaNumeral","pushNodeInfo","decoration","createsStackingContext","popNodeInfo","updateClipbox","intersect","emptyClipbox","cb","pseudoElt","defa","microsoft","pleaseSetPropertyValue","important","setProperty","getBorder","side","saveStyle","getBorderRadius","sanitizeRadius","getContentBox","wt","wr","wb","wl","getTransform","radiansToDegrees","parseAngle","num","shape","setClipping","clipPath","addArcToPath","Arc$2","curvePoints","curveTo","adjustBorderRadiusForBox","rTL","rTR","rBR","rBL","tl_x","tl_y","tr_x","tr_y","br_x","br_y","bl_x","bl_y","tl","tr","br","bl","elementRoundBox","bt","bb","pt","pr","pb","pl","roundBox","rTL0","rTR0","rBR0","rBL0","Path","fill","stroke","formatCounter","evalPseudoElementContent","displayCounter","separator","getCssText","_renderWithPseudoElements","pseudo","kind","place","psel","KENDO_PSEUDO_ELEMENT","fake","saveClass","_renderElement","adjustBoxes","boxes","tableBorderLeft","tableBorderTop","tableBox","firstCell","firstCellBox","drawEdge","Wtop","Wleft","Wright","rl","rr","drawRoundCorner","ri","anticlockwise","drawBackground","background","backgroundColor","backgroundImage","drawOneBackground","backgroundRepeat","backgroundPosition","backgroundOrigin","backgroundSize","drawBackgroundImage","img_width","img_height","renderBG","rewX","rewY","repeatX","aspect_ratio","orgBox","Image$1","gradientRenderer","drawBullet","_drawBullet","bullet","listStylePosition","textAlign","elementIndex","listStyleType","fontSize","lineHeight","fontFamily","disc","circle","square","drawOneBox","isLast","inv","shouldDrawLeft","shouldDrawRight","textOverflow","saveTextOverflow","innerbox","getClientRects","_pdfLink","clipit","isFormField","maybeRenderWidget","renderContents","pxlen","scaledAngle","implicit","atan","fromRect","LinearGradient","userSpace","visual","wrap$$1","_kendoExportVisual","exportDOMVisual","exportVisual","renderImage","zIndexSort","sa","sb","za","zb","pa","getSelectedOption","selectedOptions","renderCheckbox","Circle","Circle$2","renderFormField","whiteSpace","floats","floating","toDataURL","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","multiplyCopy","b1","d1","e1","b2","d2","e2","kendoDrawing","kendoDrawingUtil","kendoUtil","ObserversMixin","OptionsStore","Size","Element$1","PI_DIV_2","GRADIENT","Paintable","IDENTITY_MATRIX_HASH","Measurable","DEFAULT_STROKE","MAX_INTERVAL","pow$1","ElementsArray","GeometryElementsArray","Segment","MultiPath","ShapeMap","SEGMENT_REGEX","PathParser","DEFAULT_STROKE$1","Arc","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","geometry","NODE_MAP$2","Node$2","GroupNode$2","FRAME_DELAY","RootNode$2","QuadRoot","QuadNode","ROOT_SIZE","LEVEL_STEP","MAX_LEVEL","ShapesQuadTree","SurfaceCursor","PathNode$2","ArcNode$2","CircleNode$2","RectNode$2","ImageNode$2","TextNode$2","MultiPathNode$2","canvas","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","parentObj","_clear","wrapped","det","scaleX","scaleY","IDENTITY","originPoint","distanceTo","doRound","arg0","arg1","arguments$1","minPoint","maxPoint","defineProperties","setOrigin","topLeft","topRight","bottomLeft","fromPoints","expand","expandCopy","containsPoint","_isOnPath","rectOuter","rectInner","rect1","rect2","_optionsChange","parentTransform","parentMatrix","currentTransform","elementTransform","elementMatrix","combinedMatrix","_clippedBBox","transformedPoint","_hasFill","_containsPoint","_hasStroke","setCenter","setRadius","getCenter","pointAt","_pointAt","currentPointX","currentPointY","currentPoint","extremeAngles","inCircle","pointDistance","newFill","strokeWidth","matrixHash","_bboxCache","_matrixHash","_bbox","_geometry","radian","nextAngle","interval","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","_intervalCurvePoints","cp1","cp2","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","inAngleRange","angleRad","pointRadius","startPoint","arcParameters","_splice","_add","_remove","_clearObserver","_setObserver","cNumber","addConstant","rad$$1","nthR","bboxTo","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","_intersectionsTo","intersectionsCount","_isOnCurveTo","endSegment","p4","rotatedPoints","_isOnLineTo","_isOnPathTo","isOnPath","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","parentElement","srcElement","_suspendedTracking","resumeTracking","_elementOffset","paddingTop","_surfacePoint","coord","observe","removeSelf","invalidate","DOMParser","namespaceURI","parser","chartDoc","parseFromString","importedDoc","adoptNode","definitions","clearDefinitions","childNode","createDefinitions","attachTo","setElement","nodes","childElement","renderChildren","updateDefinition","allAttr","allCss","mapTransform","renderTransform","transformChange","mapStyle","cursor","renderOpacity","renderId","hasDefinitions","definitionChange","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","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","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","definedMin","definedMax","srcCategories","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","axisGroupBox","axisBox","paneAnchor","setValue","updateAxisOptions","targetOptions","axesOptions","axisIndex","groupSeries","axisIx","acceptKey","mouseKey","ctrlKey","altKey","toChartAxisRanges","axisRanges","axisRange","createDiv","closestHandle","updateAxisOptions$1","yAxis","xAxis","tooltipAlignment","RAD_60","RAD_30","uat","ub","xComparer","resolveAxisAliases","alias","aliases","AXIS_NAMES","pointByCategoryName","applyAxisDefaults","themeOptions","mapAxisOptions","axisColor","themeAxisDefaults","axisName","applySeriesDefaults","seriesType","baseOptions","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","_defaults","sortDates","uniqueDates","srcDates","transpose","rowIx","colCount","colIx","rowCount","clearMissingValues","originalOptions","fieldValue","originalValue","nullValue","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","seriesIx","pointType","invertAxes","plotValue","otherValues","categorySum","otherStack","isStacked100","plotRange","positive","prevValue","isStackedBar","otherValue","isStacked","categoryAxisCrossingValue","stackLimits","stackName","pIx","updateStackRange","limits","errorTotals","chartSeries","limitsCache","addErrorBar","lowValue","highValue","seriesErrorRanges","addPointErrorBar","stackedErrorRange","errorBar","updateRange","createPoint","owner","noteText","evalPointOptions","doEval","namedValueAxes","categorySlots","chartPoints","valueSlot","pointSlot","categorySlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","crossingValues","seriesIx$1","currentCategory","seriesIx$2","_outOfRangeCallback","_bindPoint","outOfRangePoint","bindCache","_bindCache","formatPointValue","createNote","tooltipTracking","labelTemplate","labelText","_rendered","createMarker","formatValue","markerBorder","markerBox","_childBox","childBox","noteTargetBox","reflowLabel","defaultColor","highlightVisual","halfSize","tooltipAnchor","horizontalAlign","verticalAlign","clipBox","overlapsBox","unclipElements","toGeometryPoints","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","dataLength","clearSeriesPointsCache","seriesSourcePoints","srcData","getFn","aggregator","categoryItem","categoryIdx","categoriesToAdd","defaultPaneName","paneName","stackableChartOptions","firstSeries","axisSeries","categoryAxes","unique","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","createItems","userAlign","innerElement","hasItems","legendBox","containerCustomReflow","containerReflow","alignTarget","containerBox","_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","reverseValue","originalX","sector_center","createPieChart","pieChart","totalSize","seriesWithoutSize","holeSize","currentSeries$1","createDonutChart","donutChart","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","valueRadius","_polarAxisCenter","centerSegment","_hasMissingValuesGap","scatterChart","slotSector","childSector","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","labelPadding","dynamicSlopeReflow","totalHeight","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","firstSegment","maxSegment","dynamicHeight","segmentSpacing","constantSlopeReflow","decreasingWidth","neckRatio","topMostWidth","finalNarrow","dynamicSlope","createFunnelChart","funnelChart","errorLow","errorHigh","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","bindCategories","fontLoaded","_redraw","_attachEvents","_setElementClass","seriesCopies","applySeriesColors","_noTransitionsRedraw","_model","findPaneByName","findPaneByIndex","seriesName","categoryName","togglePointsHighlight","_sharedTooltip","_surfaceWrap","renderAs","_destroySurface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","_getModel","_destroyView","_createTooltip","_setupSelection","_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","_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","_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","_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","layout","refreshBounds","deselect","initialPosition","finalPosition","finalPos","undoRotates","redoRotates","redoAngle","_angle","_innerBounds","_initialize","initialIndices","_toIndex","capacity","begin","commit","execute","_restart","addCompositeItem","toolService","tryActivate","getCursor","virtualScroll","tool","scrollable","movableCanvas","hoveredItem","hoveredAdorner","_hoveredConnector","scrollPos","_storePan","selectSingle","_hitTest","_resizingAdorner","isDragHandle","connections","undoRedoService","isSelected","selectArea","_createConnection","_c","connectionHandle","_connectionManipulation","_removeHover","activeConnection","_cachedTouchTarget","cachedTouchTarget","sourceConnector","Shape","getConnector","_syncConnectionChanges","_connectorsAdorner","isActive","handleName","activeTool","_updateHoveredItem","_activateTool","_updateCursor","updateHovered","keyDown","toRemove","metaKey","_triggerRemove","_syncChanges","_destroyToolBar","_discardNewConnection","selectAll","wheel","zoomRate","zoomOptions","setTool","addToSelection","newConnection","disabledShape","selectedConnections","_selectedItems","Connection","_hitTestItems","_hitTestElements","mainLayer","shapeIdx","connectionIdx","shapeHit","connectionHit","hitTest","rec","getBounds","SAME_SIDE_DISTANCE_RATIO","routePoints","_connectorPoints","_floatingPoints","_resolvedSourceConnector","_resolvedTargetConnector","sourcePoint","targetPoint","_connectorSides","boundsPoint","secondarySign","_connectorSide","sideDistance","minSide","shapeBounds","sides","_sameSideDistance","pointX","pointY","sourceConnectorSide","targetConnectorSide","deltaX","sameSideDistance","shiftX","shiftY","cascadeStartHorizontal","_startHorizontal","sourceSide","_adorners","sp","tp","_ts","spVisual","epVisual","_initialSource","_initialTarget","sourcePointDistance","targetPointDistance","sourceHandle","targetHandle","modelToLayer","_refreshHandler","ctr","_clearVisual","_keepCachedTouchTarget","visualChildren","_manipulating","_initSelection","_createHandles","_internalChange","_rotatedHandler","_resizable","_handleOptions","_bounds","handleBounds","handlesCount","_getHandleBounds","_rotationOffset","_startAngle","_rotates","_positions","initialRotates","initialStates","handleOptions","_sp","_cp","_lp","shapeStates","visibleHandles","dragging","newBounds","staticPoint","thr","newCenter","oldBounds","dtl","dbr","changed","_truncateAngle","_rotating","shouldSnap","_truncateDistance","_displaceBounds","_truncatePositionToGuides","ruler","truncatePositionToGuides","_truncateSizeToGuides","truncateSizeToGuides","snap","snapOptions","snapAngle","snapSize","_diffStates","_syncShapeChanges","rotationThumb","_rotationThumbBounds","_ep","_adorn","visualBounds","modelToView","relative","_visualBounds","HyperTree","LayoutBase","subtype","nodeDistance","iterations","horizontalSeparation","verticalSeparation","underneathVerticalTopOffset","underneathHorizontalOffset","underneathVerticalSeparation","componentSpacingX","componentSpacingY","layerSeparation","layeredIterations","startRadialAngle","endRadialAngle","radialSeparation","radialFirstLevelSeparation","keepComponentsInOneRadialLayout","ignoreContainers","layoutContainerChildren","ignoreInvisible","animateTransitions","gridLayoutComponents","maxWidth","startX","startY","resultLinkSet","resultNodeSet","boundingRect","currentHeight","currentWidth","moveToOffset","nodeBounds","newpoints","deltax","deltay","currentHorizontalOffset","transferOptions","DiagramToHyperTreeAdapter","shapeMap","edgeMap","finalNodes","finalLinks","ignoredConnections","ignoredShapes","hyperMap","hyperTree","finalGraph","_renormalizeShapes","_renormalizeConnections","mapConnection","mapShape","getEdge","listToRoot","containerGraph","parentContainer","firstNonIgnorableContainer","isContainer","_isIgnorableItem","isContainerConnection","isDescendantOf","isIgnorableItem","isCollapsed","_isVisible","_isTop","isShapeMapped","leastCommonAncestor","al","xa","xb","_isCollapsed","sink","sourceNode","sinkNode","newEdge","areConnectedAlready","finalNodeSet","LayoutState","initialTemperature","guessBounds","temperature","_expectedBounds","refineStage","_repulsion","_attraction","_shake","rho","_InverseSquareForce","wn","hn","wm","hm","_SquareForce","av","squareSize","multiplier","TreeLayoutProcessor","treeGraph","layoutSwitch","layoutLeft","setChildrenDirection","setChildrenLayout","TreeDirection","Width","arrange","layoutRight","layoutUp","layoutDown","treeDirection","layoutRadialTree","previousRoot","maxDepth","calculateAngularWidth","radialLayout","Angle","tipOverTree","startFromLevel","aw","diameter","sectorAngle","sortChildren","nl","col","basevalue","normalizeAngle","childAngleFraction","deltaTheta","deltaThetaHalf","parentSector","setPolarLocation","BoundingRectangle","includeStart","rootDirection","rootLayout","childrenLayout","givenSize","shapeWidth","shapeHeight","AngleToParent","SectorAngle","pp","childrenwidth","selfLocation","male","female","leftcount","tipOverTreeStartLevel","TreeLayout","layoutComponents","getTree","givenRootShape","getTreeForRoot","LayeredLayout","_initRuntimeProperties","downstreamLinkCount","upstreamLinkCount","uBaryCenter","dBaryCenter","upstreamPriority","downstreamPriority","gridPosition","_prepare","targetLayer","sortedNodes","minLayer","layerMap","layerCount","o2","o1layer","o2layer","linksTo","_dummify","_optimizeCrossings","_swapPairs","arrangeNodes","_moveThingsAround","_dedummify","setMinDist","minDist","layerIndex","minDistances","getMinDist","i1","i2","placeLeftToRight","leftClasses","classNodes","rightSibling","neighbor","leftPos","placeLeft","POSITIVE_INFINITY","nodeLeftClass","upNodes","downNodes","intDiv","placeRightToLeft","rightClasses","leftSibling","rightPos","placeRight","NEGATIVE_INFINITY","nodeRightClass","_getLeftWing","leftWing","computeClasses","_getRightWing","rightWing","wingPair","ndsinl","vnode","wings","currentWing","wing","_nodesInLink","classIndex","_isVerticalLayout","_isHorizontalLayout","_isIncreasingLayout","maximumHeight","currentNode","currDown","downNode","placed","sequenceStart","sequenceEnd","fromLayerIndex","reachedFinalLayerIndex","layerIncrement","_gridPositionComparer","virtualStartIndex","virtualStart","sequence","virtualEnd","virtualEndIndex","_firstVirtualNode","_sequencer","nextVirtualNode","adjustDirections","prevBridge","prevBridgeTarget","nextBridge","nextBridgeTarget","clayer","j1","j2","getNeighborOnLayer","_sequenceSingle","combineSequences","pair","rightHeap","leftRes","rightRes","leftHeap","_positionDescendingComparer","_positionAscendingComparer","leftClass","_getComposite","rightClass","maxLayoutIterations","it","gridPos","layoutLayer","iconsidered","considered","n1Priority","n2Priority","nodeGridPos","nodeBaryCenter","calcBaryCenter","nodePriority","moveRight","moveLeft","calcDownData","calcUpData","priority","rightNode","rightNodePriority","leftNode","leftNodePriority","mapVirtualNode","nodeToLinkMap","linkToNodeMap","addLinkBetweenLayers","oLayer","dLayer","oPos","dPos","upLayer","downLayer","depthOfDumminess","prevLink","dedum","moves","maxIterations","iter","optimizeLayerCrossings","presorted","inode","compareValue","n1BaryCenter","n2BaryCenter","compareByIndex","downwards","secondPass","hasSwapped","calcCrossings","memCrossings","crossBefore","node1","node2","node1GridPos","node2GridPos","crossAfter","revert","countLinksCrossingBetweenTwoLayers","ulayer","dlayer","link1","link2","n11","n12","n21","n22","l1","l2","n11gp","n12gp","n21gp","n22gp","crossings","numerator","denominator","graphOrNodes","diagramOrGraphOrNodes","GraphAdapter","toggleActive","STATE_ACTIVE","actionSheetWrap","preventClick","findFocusableSibling","getSibling","candidate","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","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","eventData","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","overflowItems","toolbarItems","visibleOverflowItems","visibleToolbarItems","elementPosition","Selectable","ARIASELECTED","SELECTED","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","HOVER","MOUSEENTER","FOCUS","prevent","dateObject","getCalendarInfo","extractFormat","MONTH","makeUnselectable","isIE8","addClassToViewContainer","currentView","isEqualDatePart","value1","value2","isEqualMonth","getDisabledExpr","createDisabledExpr","convertDatesArray","disabledDates","searchExpression","isEqualDate","oldValue","toDateObject","transitionOrigin","KEYDOWN_NS","SLIDE","CENTURY","NAVIGATE","DISABLED","FOCUSED","OTHERMONTHCLASS","OUTOFRANGE","TODAY","CELLSELECTOR","CELLSELECTORVALID","WEEKCOLUMNSELECTOR","BLUR","FOCUS_WITH_NS","MOUSEENTER_WITH_NS","PREVARROW","NEXTARROW","ARIA_DISABLED","ARIA_SELECTED","ARIA_LABEL","decade","century","Calendar","unescape","_templates","_selectable","_header","_viewWrapper","_footer","_focusView","focusOnNav","_cellID","_class","_selectDates","_addClassProxy","_cell","todayString","toDateString","_cellByDate","_removeClassProxy","selectDates","weekColumnHeader","_today","_title","_destroySelectable","_table","_bindTable","_option","navigateToPast","navigateToFuture","navigateUp","navigateDown","future","_oldTable","_changeView","_animate","_visualizeSelectedDatesInView","validSelectedDates","datesUnique","_validateValue","selectedDates","selectableOptions","_onSelect","_onRelatedTarget","_toggleSelection","_cellsBySelector","_deselect","_addSelectedCellsToArray","_rangeSelection","currentCell","toDateCell","daysDifference","currentDateIndex","_dateInView","firstDateInView","lastDateInView","focusedDate","isDisabled","_keyboardToggleSelection","_nextNavigatable","_keyboardRangeSelection","navigatableDate","viewWrapper","insertAfter","_horizontal","viewWidth","float","margin-left","_vertical","disabledDate","firstDayCurrentMonth","isBigger","isTodayDisabled","_todayClick","footerTemplate","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","STATEDISABLED","STATEDEFAULT","STATEINVALID","READONLY","DateInput","insidePicker","_inputWrapper","_form","weekday","hour","minute","dayperiod","_unbindInput","_bindInput","_updateElementValue","_formElement","_resetHandler","_dateTime","getDateObject","stringAndFromat","toPair","_oldText","_format","_editable","_paste","_input","_mouseUp","navigationOnly","valid","difSym","newEvent","stateInvalid","blinkInvalid","parsePart","_selectSegment","_blinkInvalidTimeout","_selectNearestSegment","returnValue","formId","keycode","modifyPart","initDate","initFormat","initCulture","initMessages","generateMatcher","retFormat","returnsFormat","matcher","setExisting","typedMonthPart","typedDayPeriodPart","sampleFormat","placeholders","mins","formatResult","newMonth","currentChar","newHours","monthNames","newYear","newMinutes","newSeconds","parseFormats","DatePicker","DIV","SPAN","DEFAULT","HOVEREVENTS","ARIA_EXPANDED","ARIA_HIDDEN","DateView","_dateViewID","_calendar","popupHovered","selectIsClicked","handled","_initialOptions","dateView","_updateARIA","_icon","aria-expanded","aria-owns","autocomplete","_createDateInput","_old","_update","ARIATemplate","dateInput","_dateInput","_dateIcon","_toggleHover","_focusElement","dateChanged","valueUpdated","textFormatted","_typing","stopImmediatePropagation","aria-controls","isSameType","_ariaTemplate","buttonHtml","CLASS_ICON","truncate","placeholderSupported","INPUT","SPIN","TOUCHEND","STATE_INVALID","INTEGER_REGEXP","NumericTextBox","inputType","isStep","_focusout","_arrows","_validation","_text","_toggleText","restrictDecimals","spinners","upArrowText","downArrowText","_upArrowEventHandler","_downArrowEventHandler","_spin","_upArrow","_downArrow","_keypress","_keyup","_arrowsWrap","_placeholder","aria-valuemin","aria-valuemax","adjusted","_adjust","_focusin","arrows","_spinning","_validationIcon","_focusing","groupRegExp","extractRegExp","caretPosition","_culture","_removeInvalidState","CLASSNAME","accessKey","_step","isNumPadDecimal","isValid","_numericRegex","_addInvalidState","fractionRule","_separator","_floatRegExp","rounder","isNotNull","DOMElement","resolveRules","resolvers","validator","ruleResolvers","numberOfDecimalDigits","parseHtml","parseHTML","searchForMessageContainer","invalidMsgRegExp","Validator","INVALIDMSG","INVALIDINPUT","VALIDINPUT","emailRegExp","urlRegExp","CHECKBOXSELECTOR","NUMBERINPUTSELECTOR","NAME","FORM","NOVALIDATE","VALIDATE","VALIDATE_INPUT","patternMatcher","hasAttribute","validateAttributeSelector","_errorTemplate","errorTemplate","_inputSelector","_checkboxSelector","_errors","_isValidated","required","email","dateCompare","checkbox","raise","validateOnBlur","_checkElement","validateInput","inputs","invalid","lbl","messageText","wasValid","messageLabel","lblId","inputWrap","_checkValidity","_findMessageContainer","_extractMessage","_decorateMessageContainer","hideMessages","locators","messageLocators","locate","ruleKey","nonDefaultMessage","customMessage","fieldType","convertToValueBinding","bindAttr","createAttributes","ruleName","stringRule","validation","DATATYPE","BINDING","specialRules","convertItems","addValidationRules","modelField","oldIE","nameSpecialCharRegExp","ERRORTEMPLATE","EQUAL_SET","editors","kendoNumericTextBox","kendoDatePicker","mobileEditors","Editable","_isMobile","_validateProxy","_validate","clearContainer","skipFocus","editor","isValuesEditor","isCustomEditor","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","LOADING","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","templates","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","userTriggered","lastModal","_actionable","_shouldFocus","windowTop","currentWindow","originalZIndex","windowObject","zIndexNew","shouldRestrictTop","restoreOptions","_sizingAction","actionId","before","$body","$html","_storeOverflowRule","_restoreOverflowRule","$element","_isOverflowStored","overflowRule","win","contentFrame","_triggerRefresh","_ajaxComplete","_loadingIconTimeout","_ajaxError","_ajaxSuccess","_showLoading","iframeSrcAttributes","contentHtml","wrapperPosition","relativeElMarginLeft","relativeElMarginTop","elementPadding","resizeDirection","initialSize","containerOffset","_relativeElMarginLeft","_relativeElMarginTop","leftRtlOffset","scrollOffset","windowBottom","windowRight","newWindowTop","initialWindowPosition","initialPointerPosition","_finishDrag","unifyType","mapChangedItems","itemsToMatch","itemsLength","selectedLength","unchanged","isValidFilterExpr","removeFiltersForField","STATIC_LIST_NS","StaticList","percentageUnitsRegex","GROUPHEADER","ITEMSELECTOR","LABELIDPART","CASCADE","HIDDENCLASS","isIE","quotRegExp","alternativeNames","ComboBox","DropDownList","List","_isSelect","ul","aria-hidden","_listMousedown","columns","_columnsHeader","_noData","_accessors","_initValue","headerTemplate","noDataTemplate","_renderFooter","_renderNoData","_focused","_angularElement","colGroup","currentColumn","columnsHeaderTemplate","currentWidthInt","widthStyle","columnsHeader","noData","_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","_ignoreCase","widgetOptions","fromFilter","_buildExpression","_open","_clearButton","clearButton","_inputValue","_typingTimeout","minLength","_emptySearch","_searchByWord","_unbindDataSource","selectedDataItems","_aria","suggest","_ariaLabel","labelId","focusedElm","inputElm","inputId","labelElm","ariaLabel","ariaLabelledBy","_generateLabelId","_valueBeforeCascade","_userTriggered","_oldIndex","isFiltered","typing","_enable","_dataValue","_offsetHeight","_height","popups","footerHeight","_openHandler","_adjustListWidth","autoWidth","_closeHandler","_focusItem","noFocusedItem","scrollToIndex","_calculateGroupPadding","_calculatePopupHeight","_calculateColumnsHeaderPadding","_resizePopup","_popup","_makeUnselectable","preventFocus","touchEnabled","MSPointers","_prevent","_triggerCascade","_cascadeTriggered","_cascadedValue","_triggerChange","_requestStartHandler","_requestEndHandler","_errorHandler","requireValueMapper","valueMapper","_initial","_initialIndex","_parentWidget","_cascadeSelect","_cascadeValue","_accessorInput","_accessorSelect","_custom","_syncValueAndText","custom","_hideBusy","_busy","_arrowIcon","_showBusy","_request","_requestEnd","_firstItem","focusFirst","_lastItem","focusLast","_nextItem","focusNext","_prevItem","focusPrev","activeFilter","shouldTrigger","_fetch","dataItemByIndex","getElementIndex","focusout","scrollWith","_fetchData","optionLabel","dataText","dataValue","htmlElement","_cascade","cascade","_cascadeHandlerProxy","_cascadeHandler","_cascadeFilterRequests","_selectedValue","_toggleCascadeOnFocus","valueBeforeCascade","_clearSelection","_cascadeChange","filterValue","cascadeFromParentField","cascadeFromField","currentHandler","_touchHandlers","_optionID","_selectedIndices","_dataItems","_getter","_onScroll","_scrollId","_renderHeader","_fixedHeader","endY","tapPosition","_touchTriggered","_triggerClick","itemOffsetTop","itemOffsetHeight","contentScrollTop","contentOffsetHeight","bottomDistance","_getValues","_valueGetter","hasCandidate","_get","focusIndex","skipUpdate","_skipUpdate","filtered","singleSelection","selectedIndices","added","_deselectFiltered","_valueComparer","_valueDeferred","_valueIndices","_valueExpr","normalized","_valueType","_dataItemPosition","valueExpr","removedIndices","templateText","_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","oppositeBuffer","mapValueTo","_selectProxy","_clean","_deferValueSet","mute","_selectingValue","_highlightSelectedItems","_getElementByDataItem","_mute","_createList","_forcePrefetch","shouldClear","_prefetchByValue","_checkValuesOrder","_removedAddedIndexes","dataView","_dataView","forSelection","mapValueToIndex","mapValueToDataItem","indexes","_getIndecies","deferredRange","itemCount","_","existingRange","isEmptyList","_activeDeferred","_getSkip","_findDataItem","_getRange","triggerEvent","_getElementByIndex","_focusedIndex","_getElementLocation","_screenHeight","heightContainer","isAlreadySelected","prefetchStarted","_selectDeferred","_deselectCurrentValues","_listCreated","_lastScrollTop","hasData","setScreenHeight","yPosition","yDownPostion","screenEnd","_generateItems","_saveInitialRanges","_buildValueGetter","_setHeight","getList","_listItems","_whenChanged","_reorderList","padHeight","lastRequestedRange","lastRangeStart","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","CLICKEVENTS","STATE_FILTER","STATE_ACCEPT","MSG_INVALID_OPTION_LABEL","_focusHandler","_focusInputHandler","_focusInput","_optionLabel","_inputTemplate","_prev","_word","_span","_mobile","_filterHeader","_attachFocusHandlers","hasOptionLabel","_textAccessor","_optionLabelText","valueTemplate","optionLabelTemplate","_arrow","_focusFilter","_resizeFilterInput","isInputActive","originalPrevent","_optionLabelDataItem","loweredText","_valueSetter","_assignInstance","_buildOptions","optionLabelValue","initialIndex","_presetValue","_selectValue","_filterPaste","_search","_focusinHandler","_focusoutHandler","isIFrame","self","_wrapperMousedown","_wrapperClick","dropDownWrapper","isPopupVisible","_getElementDataItem","_matchText","_shuffleData","splitIndex","optionDataItem","_selectNext","oldFocusedItem","isInLoop","_last","charCode","_popupOpen","compareElement","jQueryCandidate","_resetOptionLabel","focusedItem","additionalClass","keepState","aria-haspopup","SELECTOR","DOMelement","accesskey","unselectable","getElements","optionLabelText","origEvent","isAutoConnector","closestConnector","resCtr","minimumDistance","MAXINT","indicesOfItems","filterShapeDataItem","filterConnectionDataItem","fromConnector","fromX","fromY","toConnector","toX","toY","connectionSelector","kendoDropDownList","InactiveItem","InactiveItemsCollection","cloneDataItem","splitDiagramElements","createModel","clearField","copyDefaultOptions","mainOptions","translateToOrigin","defaultButtons","DiagramElement","Connector","Diagram","DiagramToolBar","Editor","PopupEditor","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","optionsValue","dataName","eventKey","optionName","ignoredOwnProperties","ignoredAttributes","kDataSource","createDataSource","PanelBar","Menu","$log","warn","kendoWidget","$parse","formValue","isForm","formRegExp","haveChangeOnElement","viewRender","onChange","currentVal","$viewValue","$modelValue","$render","formPristine","$pristine","$setViewValue","$setPristine","digest","AutoComplete","$isEmpty","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","attributeName","rebindAttr","templateOptions","isUpload","_cleanUp","WIDGET_TEMPLATE_OPTIONS","templateContents","replaceChild","setTemplate","createDirectives","klass","make","directiveName","widgetName","module","directive","directiveFactory","shortcut","dashed","SKIP_SHORTCUTS","TAGNAMES","scopeField","kScopeField","MANUAL_DIRECTIVES","kendoWidgetInstance","isDigesting","destroyScope","$destroy","defadvice","origMethod","pendingPatches","$injector","$defaultCompile","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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GC,GACxB,MAAO,KAAMlE,KAAKC,IAAID,KAAKC,IAAIgE,EAAIC,GAAK,KAsQ5C,QAASqyF,IAAWv3F,GAChB,MAAOA,IAAS,KAAS,EA77LhC,GAEOwkB,IACA09D,GACAypB,GACAtN,GACAzlG,GACAsgH,GACAvf,GACAsY,GACA+vB,GACA/rB,GACA1xF,GACAvnB,GACAsB,GACA2jI,GACAC,GACAC,GACAC,GACAtpD,GACAF,GACAypD,GACAvJ,GACAwJ,GACAC,GACA/rB,GACAgsB,GACAlJ,GACAmJ,GACAn9G,GACAo9G,GACA7iG,GACA8iG,GACAC,GACA19G,GACAw3F,GACAwc,GACAr7F,GACAglG,GACAC,GACAC,GACA/kI,GACAglI,GACA59G,GACAugD,GACA/iE,GACAi2E,GACAoqD,GACAxpE,GACAypE,GACApjG,GACAqjG,GACA9uH,GACA+uH,GAmDAxL,GAuCAU,GAwCA+K,GAWA50H,GACA60H,GAaAC,GACAC,GAwCAC,GAkCAC,GACAC,GASAC,GAKAjL,GAOAkL,GAuCAC,GAoBAC,GACAC,GAyDA52C,GACAtlD,GACAqqD,GACA9B,GACAG,GACA7O,GACArM,GACAkc,GACAD,GACAh/D,GACAm/D,GACAjD,GACAsD,GACAv/E,GACAmgF,GACAT,GACA+xC,GAwFAxvC,GAuCAklC,GA4LAuK,GA6GAC,GAeAC,GACAC,GA6BAC,GAsOAC,GAkGAC,GAkGAC,GACAC,GACAC,GA4JAC,GAoGAC,GAmJAC,GACApuB,GAqCAquB,GACAC,GAwIAC,GA8BAC,GA+EAC,GACAC,GACAC,GAkSAC,GAkpBAnJ,GACAF,GACAF,GACAD,GACAD,GACAD,GACAD,GACAD,GACA6J,GACArJ,GACAtB,GACAW,GACAL,GACA8D,GACAD,GACAD,GACAjC,GA4MA2I,GAaAC,GA0dA7F,GACA8F,GAUAnG,GACAz9F,GACAw8F,GAUAF,GAUAuH,GAsCAC,GA8LAC,GA8cAC,GACAC,GAuSAC,GA0MAC,GACAC,GAsXAC,GA8DAC,GAqLAC,GAsKAC,GAoIAC,GAiBAC,GAoBAC,GACAC,GACAC,EA9tLJjuI,Q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EzD6C,WAAY,SAAUv8J,GAAV,GACuD5yC,GACtD9C,EADLwM,EAAOtH,KAAMgO,EAAU1G,GAAAA,EAAK2jM,aAAaz6J,EAC7C,KAAS11C,EAAI,EAAGA,EAAIkT,EAAQzW,OAAQuD,IAChC8C,EAAQoV,SAAShF,EAAQhX,OAAO8D,GAAI,IACpCwM,EAAK0G,QAAQxF,KAAK5K,GAClB0J,EAAK80H,YAAcx+H,CAEvB0J,GAAKurM,UAAYriK,EAAOlpC,EAAK3M,YAEjCm4M,aAAc,SAAU9C,EAAeH,GACnC,IAAK,GAAI/0M,GAAI,EAAGA,EAAI+0M,EAAOt4M,OAAQuD,IAC/B,GAAIkF,KAAK6vM,EAAO/0M,IAAIhB,GAAGk2M,EAAcpyM,MAAOoyM,EAAcl9L,OACtD,MAAO+8L,GAAO/0M,EAGtBkF,MAAKuqM,sBAAsByF,EAAcpyM,MAAM5G,OAAOg5M,EAAcl9L,SAExEm4L,cACI,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,SAEJ8H,KAAM,MAEVtI,EAAUuI,SAAWtJ,EAAYhpM,QAC7BoG,KAAM,aACN+oM,QAAS,OAEbpF,EAAUwI,SAAWvJ,EAAYhpM,QAC7BoG,KAAM,aACN+oM,QAAS,OAEbpF,EAAUyI,SAAWxJ,EAAYhpM,QAC7BoG,K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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 = '2019.2.514'.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) {\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, mozilla = support.browser.mozilla;\n support.msPointers = !chrome && window.MSPointerEvent;\n support.pointers = !chrome && !mozilla && window.PointerEvent;\n support.kineticScrollNeeded = mobileOS && (support.touch || support.msPointers || support.pointers);\n }());\n function size(obj) {\n var result = 0, key;\n for (key in obj) {\n if (obj.hasOwnProperty(key) && key != 'toJSON') {\n result++;\n }\n }\n return result;\n }\n function getOffset(element, type, positioned) {\n if (!type) {\n type = 'offset';\n }\n var offset = element[type]();\n var result = {\n top: offset.top,\n right: offset.right,\n bottom: offset.bottom,\n left: offset.left\n };\n if (support.browser.msie && (support.pointers || support.msPointers) && !positioned) {\n var sign = support.isRtl(element) ? 1 : -1;\n result.top -= window.pageYOffset - document.documentElement.scrollTop;\n result.left -= window.pageXOffset + sign * document.documentElement.scrollLeft;\n }\n return result;\n }\n var directions = {\n left: { reverse: 'right' },\n right: { reverse: 'left' },\n down: { reverse: 'up' },\n up: { reverse: 'down' },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': { reverse: 'out' },\n out: { reverse: 'in' }\n };\n function parseEffects(input) {\n var effects = {};\n each(typeof input === 'string' ? input.split(' ') : input, function (idx) {\n effects[idx] = this;\n });\n return effects;\n }\n function fx(element) {\n return new kendo.effects.Element(element);\n }\n var effects = {};\n $.extend(effects, {\n enabled: true,\n Element: function (element) {\n this.element = $(element);\n },\n promise: function (element, options) {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (options.init) {\n options.init();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n element.dequeue();\n },\n disable: function () {\n this.enabled = false;\n this.promise = this.promiseShim;\n },\n enable: function () {\n this.enabled = true;\n this.promise = this.animatedPromise;\n }\n });\n effects.promiseShim = effects.promise;\n function prepareAnimationOptions(options, duration, reverse, complete) {\n if (typeof options === STRING) {\n if (isFunction(duration)) {\n complete = duration;\n duration = 400;\n reverse = false;\n }\n if (isFunction(reverse)) {\n complete = reverse;\n reverse = false;\n }\n if (typeof duration === BOOLEAN) {\n reverse = duration;\n duration = 400;\n }\n options = {\n effects: options,\n duration: duration,\n reverse: reverse,\n complete: complete\n };\n }\n return extend({\n effects: {},\n duration: 400,\n reverse: false,\n init: noop,\n teardown: noop,\n hide: false\n }, options, {\n completeCallback: options.complete,\n complete: noop\n });\n }\n function animate(element, options, duration, reverse, complete) {\n var idx = 0, length = element.length, instance;\n for (; idx < length; idx++) {\n instance = $(element[idx]);\n instance.queue(function () {\n effects.promise(instance, prepareAnimationOptions(options, duration, reverse, complete));\n });\n }\n return element;\n }\n function toggleClass(element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n }\n if (!('kendoAnimate' in $.fn)) {\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n return this.stop(clearQueue, gotoEnd);\n },\n kendoAnimate: function (options, duration, reverse, complete) {\n return animate(this, options, duration, reverse, complete);\n },\n kendoAddClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, true);\n },\n kendoRemoveClass: function (classes, options) {\n return kendo.toggleClass(this, classes, options, false);\n },\n kendoToggleClass: function (classes, options, toggle) {\n return kendo.toggleClass(this, classes, options, toggle);\n }\n });\n }\n var ampRegExp = /&/g, ltRegExp = //g;\n function htmlEncode(value) {\n return ('' + value).replace(ampRegExp, '&').replace(ltRegExp, '<').replace(gtRegExp, '>').replace(quoteRegExp, '"').replace(aposRegExp, ''');\n }\n var eventTarget = function (e) {\n return e.target;\n };\n if (support.touch) {\n eventTarget = function (e) {\n var touches = 'originalEvent' in e ? e.originalEvent.changedTouches : 'changedTouches' in e ? e.changedTouches : null;\n return touches ? document.elementFromPoint(touches[0].clientX, touches[0].clientY) : e.target;\n };\n each([\n 'swipe',\n 'swipeLeft',\n 'swipeRight',\n 'swipeUp',\n 'swipeDown',\n 'doubleTap',\n 'tap'\n ], function (m, value) {\n $.fn[value] = function (callback) {\n return this.bind(value, callback);\n };\n });\n }\n if (support.touch) {\n if (!support.mobileOS) {\n support.mousedown = 'mousedown touchstart';\n support.mouseup = 'mouseup touchend';\n support.mousemove = 'mousemove touchmove';\n support.mousecancel = 'mouseleave touchcancel';\n support.click = 'click';\n support.resize = 'resize';\n } else {\n support.mousedown = 'touchstart';\n support.mouseup = 'touchend';\n support.mousemove = 'touchmove';\n support.mousecancel = 'touchcancel';\n support.click = 'touchend';\n support.resize = 'orientationchange';\n }\n } else if (support.pointers) {\n support.mousemove = 'pointermove';\n support.mousedown = 'pointerdown';\n support.mouseup = 'pointerup';\n support.mousecancel = 'pointercancel';\n support.click = 'pointerup';\n support.resize = 'orientationchange resize';\n } else if (support.msPointers) {\n support.mousemove = 'MSPointerMove';\n support.mousedown = 'MSPointerDown';\n support.mouseup = 'MSPointerUp';\n support.mousecancel = 'MSPointerCancel';\n support.click = 'MSPointerUp';\n support.resize = 'orientationchange resize';\n } else {\n support.mousemove = 'mousemove';\n support.mousedown = 'mousedown';\n support.mouseup = 'mouseup';\n support.mousecancel = 'mouseleave';\n support.click = 'click';\n support.resize = 'resize';\n }\n var wrapExpression = function (members, paramName) {\n var result = paramName || 'd', index, idx, length, member, count = 1;\n for (idx = 0, length = members.length; idx < length; idx++) {\n member = members[idx];\n if (member !== '') {\n index = member.indexOf('[');\n if (index !== 0) {\n if (index == -1) {\n member = '.' + member;\n } else {\n count++;\n member = '.' + member.substring(0, index) + ' || {})' + member.substring(index);\n }\n }\n count++;\n result += member + (idx < length - 1 ? ' || {})' : ')');\n }\n }\n return new Array(count).join('(') + result;\n }, localUrlRe = /^([a-z]+:)?\\/\\//i;\n extend(kendo, {\n widgets: [],\n _widgetRegisteredCallbacks: [],\n ui: kendo.ui || {},\n fx: kendo.fx || fx,\n effects: kendo.effects || effects,\n mobile: kendo.mobile || {},\n data: kendo.data || {},\n dataviz: kendo.dataviz || {},\n drawing: kendo.drawing || {},\n spreadsheet: { messages: {} },\n keys: {\n INSERT: 45,\n DELETE: 46,\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESC: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n END: 35,\n HOME: 36,\n SPACEBAR: 32,\n PAGEUP: 33,\n PAGEDOWN: 34,\n F2: 113,\n F10: 121,\n F12: 123,\n NUMPAD_PLUS: 107,\n NUMPAD_MINUS: 109,\n NUMPAD_DOT: 110\n },\n support: kendo.support || support,\n animate: kendo.animate || animate,\n ns: '',\n attr: function (value) {\n return 'data-' + kendo.ns + value;\n },\n getShadows: getShadows,\n wrap: wrap,\n deepExtend: deepExtend,\n getComputedStyles: getComputedStyles,\n isScrollable: isScrollable,\n scrollLeft: scrollLeft,\n size: size,\n toCamelCase: toCamelCase,\n toHyphens: toHyphens,\n getOffset: kendo.getOffset || getOffset,\n parseEffects: kendo.parseEffects || parseEffects,\n toggleClass: kendo.toggleClass || toggleClass,\n directions: kendo.directions || directions,\n Observable: Observable,\n Class: Class,\n Template: Template,\n template: proxy(Template.compile, Template),\n render: proxy(Template.render, Template),\n stringify: proxy(JSON.stringify, JSON),\n eventTarget: eventTarget,\n htmlEncode: htmlEncode,\n isLocalUrl: function (url) {\n return url && !localUrlRe.test(url);\n },\n expr: function (expression, safe, paramName) {\n expression = expression || '';\n if (typeof safe == STRING) {\n paramName = safe;\n safe = false;\n }\n paramName = paramName || 'd';\n if (expression && expression.charAt(0) !== '[') {\n expression = '.' + expression;\n }\n if (safe) {\n expression = expression.replace(/\"([^.]*)\\.([^\"]*)\"/g, '\"$1_$DOT$_$2\"');\n expression = expression.replace(/'([^.]*)\\.([^']*)'/g, '\\'$1_$DOT$_$2\\'');\n expression = wrapExpression(expression.split('.'), paramName);\n expression = expression.replace(/_\\$DOT\\$_/g, '.');\n } else {\n expression = paramName + expression;\n }\n return expression;\n },\n getter: function (expression, safe) {\n var key = expression + safe;\n return getterCache[key] = getterCache[key] || new Function('d', 'return ' + kendo.expr(expression, safe));\n },\n setter: function (expression) {\n return setterCache[expression] = setterCache[expression] || new Function('d,value', kendo.expr(expression) + '=value');\n },\n accessor: function (expression) {\n return {\n get: kendo.getter(expression),\n set: kendo.setter(expression)\n };\n },\n guid: function () {\n var id = '', i, random;\n for (i = 0; i < 32; i++) {\n random = math.random() * 16 | 0;\n if (i == 8 || i == 12 || i == 16 || i == 20) {\n id += '-';\n }\n id += (i == 12 ? 4 : i == 16 ? random & 3 | 8 : random).toString(16);\n }\n return id;\n },\n roleSelector: function (role) {\n return role.replace(/(\\S+)/g, '[' + kendo.attr('role') + '=$1],').slice(0, -1);\n },\n directiveSelector: function (directives) {\n var selectors = directives.split(' ');\n if (selectors) {\n for (var i = 0; i < selectors.length; i++) {\n if (selectors[i] != 'view') {\n selectors[i] = selectors[i].replace(/(\\w*)(view|bar|strip|over)$/, '$1-$2');\n }\n }\n }\n return selectors.join(' ').replace(/(\\S+)/g, 'kendo-mobile-$1,').slice(0, -1);\n },\n triggeredByInput: function (e) {\n return /^(label|input|textarea|select)$/i.test(e.target.tagName);\n },\n onWidgetRegistered: function (callback) {\n for (var i = 0, len = kendo.widgets.length; i < len; i++) {\n callback(kendo.widgets[i]);\n }\n kendo._widgetRegisteredCallbacks.push(callback);\n },\n logToConsole: function (message, type) {\n var console = window.console;\n if (!kendo.suppressLog && typeof console != 'undefined' && console.log) {\n console[type || 'log'](message);\n }\n }\n });\n var Widget = Observable.extend({\n init: function (element, options) {\n var that = this;\n that.element = kendo.jQuery(element).handler(that);\n that.angular('init', options);\n Observable.fn.init.call(that);\n var dataSource = options ? options.dataSource : null;\n if (dataSource) {\n options = extend({}, options, { dataSource: {} });\n }\n options = that.options = extend(true, {}, that.options, options);\n if (dataSource) {\n options.dataSource = dataSource;\n }\n if (!that.element.attr(kendo.attr('role'))) {\n that.element.attr(kendo.attr('role'), (options.name || '').toLowerCase());\n }\n that.element.data('kendo' + options.prefix + options.name, that);\n that.bind(that.events, options);\n },\n events: [],\n options: { prefix: '' },\n _hasBindingTarget: function () {\n return !!this.element[0].kendoBindingTarget;\n },\n _tabindex: function (target) {\n target = target || this.wrapper;\n var element = this.element, TABINDEX = 'tabindex', tabindex = target.attr(TABINDEX) || element.attr(TABINDEX);\n element.removeAttr(TABINDEX);\n target.attr(TABINDEX, !isNaN(tabindex) ? tabindex : 0);\n },\n setOptions: function (options) {\n this._setEvents(options);\n $.extend(this.options, options);\n },\n _setEvents: function (options) {\n var that = this, idx = 0, length = that.events.length, e;\n for (; idx < length; idx++) {\n e = that.events[idx];\n if (that.options[e] && options[e]) {\n that.unbind(e, that.options[e]);\n }\n }\n that.bind(that.events, options);\n },\n resize: function (force) {\n var size = this.getSize(), currentSize = this._size;\n if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n size: function (size) {\n if (!size) {\n return this.getSize();\n } else {\n this.setSize(size);\n }\n },\n setSize: $.noop,\n _resize: $.noop,\n destroy: function () {\n var that = this;\n that.element.removeData('kendo' + that.options.prefix + that.options.name);\n that.element.removeData('handler');\n that.unbind();\n },\n _destroy: function () {\n this.destroy();\n },\n angular: function () {\n },\n _muteAngularRebind: function (callback) {\n this._muteRebind = true;\n callback.call(this);\n this._muteRebind = false;\n }\n });\n var DataBoundWidget = Widget.extend({\n dataItems: function () {\n return this.dataSource.flatView();\n },\n _angularItems: function (cmd) {\n var that = this;\n that.angular(cmd, function () {\n return {\n elements: that.items(),\n data: $.map(that.dataItems(), function (dataItem) {\n return { dataItem: dataItem };\n })\n };\n });\n }\n });\n kendo.dimensions = function (element, dimensions) {\n var domElement = element[0];\n if (dimensions) {\n element.css(dimensions);\n }\n return {\n width: domElement.offsetWidth,\n height: domElement.offsetHeight\n };\n };\n kendo.notify = noop;\n var templateRegExp = /template$/i, jsonRegExp = /^\\s*(?:\\{(?:.|\\r\\n|\\n)*\\}|\\[(?:.|\\r\\n|\\n)*\\])\\s*$/, jsonFormatRegExp = /^\\{(\\d+)(:[^\\}]+)?\\}|^\\[[A-Za-z_]+\\]$/, dashRegExp = /([A-Z])/g;\n function parseOption(element, option) {\n var value;\n if (option.indexOf('data') === 0) {\n option = option.substring(4);\n option = option.charAt(0).toLowerCase() + option.substring(1);\n }\n option = option.replace(dashRegExp, '-$1');\n value = element.getAttribute('data-' + kendo.ns + option);\n if (value === null) {\n value = undefined;\n } else if (value === 'null') {\n value = null;\n } else if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (numberRegExp.test(value) && option != 'mask') {\n value = parseFloat(value);\n } else if (jsonRegExp.test(value) && !jsonFormatRegExp.test(value)) {\n value = new Function('return (' + value + ')')();\n }\n return value;\n }\n function parseOptions(element, options, 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, widget.fn.options), options);\n if (dataSource) {\n if (typeof dataSource === STRING) {\n options.dataSource = kendo.getter(dataSource)(window);\n } else {\n options.dataSource = dataSource;\n }\n }\n for (idx = 0, length = widget.fn.events.length; idx < length; idx++) {\n option = widget.fn.events[idx];\n value = parseOption(element, option);\n if (value !== undefined) {\n options[option] = kendo.getter(value)(window);\n }\n }\n if (!result) {\n result = new widget(element, options);\n } else if (!$.isEmptyObject(options)) {\n result.setOptions(options);\n }\n return result;\n };\n kendo.rolesFromNamespaces = function (namespaces) {\n var roles = [], idx, length;\n if (!namespaces[0]) {\n namespaces = [\n kendo.ui,\n kendo.dataviz.ui\n ];\n }\n for (idx = 0, length = namespaces.length; idx < length; idx++) {\n roles[idx] = namespaces[idx].roles;\n }\n return extend.apply(null, [{}].concat(roles.reverse()));\n };\n kendo.init = function (element) {\n var roles = kendo.rolesFromNamespaces(slice.call(arguments, 1));\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n kendo.initWidget(this, {}, roles);\n });\n };\n kendo.destroy = function (element) {\n $(element).find('[data-' + kendo.ns + 'role]').addBack().each(function () {\n var data = $(this).data();\n for (var key in data) {\n if (key.indexOf('kendo') === 0 && typeof data[key].destroy === FUNCTION) {\n data[key].destroy();\n }\n }\n });\n };\n function containmentComparer(a, b) {\n return $.contains(a, b) ? -1 : 1;\n }\n function resizableWidget() {\n var widget = $(this);\n return $.inArray(widget.attr('data-' + kendo.ns + 'role'), [\n 'slider',\n 'rangeslider'\n ]) > -1 || widget.is(':visible');\n }\n kendo.resize = function (element, force) {\n var widgets = $(element).find('[data-' + kendo.ns + 'role]').addBack().filter(resizableWidget);\n if (!widgets.length) {\n return;\n }\n var widgetsArray = $.makeArray(widgets);\n widgetsArray.sort(containmentComparer);\n $.each(widgetsArray, function () {\n var widget = kendo.widgetInstance($(this));\n if (widget) {\n widget.resize(force);\n }\n });\n };\n kendo.parseOptions = parseOptions;\n extend(kendo.ui, {\n Widget: Widget,\n DataBoundWidget: DataBoundWidget,\n roles: {},\n progress: function (container, toggle, options) {\n var mask = container.find('.k-loading-mask'), support = kendo.support, browser = support.browser, isRtl, leftRight, webkitCorrection, containerScrollLeft, cssClass;\n options = $.extend({}, {\n width: '100%',\n height: '100%',\n top: container.scrollTop(),\n opacity: false\n }, options);\n cssClass = options.opacity ? 'k-loading-mask k-opaque' : 'k-loading-mask';\n if (toggle) {\n if (!mask.length) {\n isRtl = support.isRtl(container);\n leftRight = isRtl ? 'right' : 'left';\n containerScrollLeft = container.scrollLeft();\n webkitCorrection = browser.webkit ? !isRtl ? 0 : container[0].scrollWidth - container.width() - 2 * containerScrollLeft : 0;\n mask = $(kendo.format('
{1}
', cssClass, kendo.ui.progress.messages.loading)).width(options.width).height(options.height).css('top', options.top).css(leftRight, Math.abs(containerScrollLeft) + webkitCorrection).prependTo(container);\n }\n } else if (mask) {\n mask.remove();\n }\n },\n plugin: function (widget, register, prefix) {\n var name = widget.fn.options.name, getter;\n register = register || kendo.ui;\n prefix = prefix || '';\n register[name] = widget;\n register.roles[name.toLowerCase()] = widget;\n getter = 'getKendo' + prefix + name;\n name = 'kendo' + prefix + name;\n var widgetEntry = {\n name: name,\n widget: widget,\n prefix: prefix || ''\n };\n kendo.widgets.push(widgetEntry);\n for (var i = 0, len = kendo._widgetRegisteredCallbacks.length; i < len; i++) {\n kendo._widgetRegisteredCallbacks[i](widgetEntry);\n }\n $.fn[name] = function (options) {\n var value = this, args;\n if (typeof options === STRING) {\n args = slice.call(arguments, 1);\n this.each(function () {\n var widget = $.data(this, name), method, result;\n if (!widget) {\n throw new Error(kendo.format('Cannot call method \\'{0}\\' of {1} before it is initialized', options, name));\n }\n method = widget[options];\n if (typeof method !== FUNCTION) {\n throw new Error(kendo.format('Cannot find method \\'{0}\\' of {1}', options, name));\n }\n result = method.apply(widget, args);\n if (result !== undefined) {\n value = result;\n return false;\n }\n });\n } else {\n this.each(function () {\n return new widget(this, options);\n });\n }\n return value;\n };\n $.fn[name].widget = widget;\n $.fn[getter] = function () {\n return this.data(name);\n };\n }\n });\n kendo.ui.progress.messages = { loading: 'Loading...' };\n var ContainerNullObject = {\n bind: function () {\n return this;\n },\n nullObject: true,\n options: {}\n };\n var MobileWidget = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.autoApplyNS();\n this.wrapper = this.element;\n this.element.addClass('km-widget');\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.kendoDestroy();\n },\n options: { prefix: 'Mobile' },\n events: [],\n view: function () {\n var viewElement = this.element.closest(kendo.roleSelector('view splitview modalview drawer'));\n return kendo.widgetInstance(viewElement, kendo.mobile.ui) || ContainerNullObject;\n },\n viewHasNativeScrolling: function () {\n var view = this.view();\n return view && view.options.useNativeScrolling;\n },\n container: function () {\n var element = this.element.closest(kendo.roleSelector('view layout modalview drawer splitview'));\n return kendo.widgetInstance(element.eq(0), kendo.mobile.ui) || ContainerNullObject;\n }\n });\n extend(kendo.mobile, {\n init: function (element) {\n kendo.init(element, kendo.mobile.ui, kendo.ui, kendo.dataviz.ui);\n },\n appLevelNativeScrolling: function () {\n return kendo.mobile.application && kendo.mobile.application.options && kendo.mobile.application.options.useNativeScrolling;\n },\n roles: {},\n ui: {\n Widget: MobileWidget,\n DataBoundWidget: DataBoundWidget.extend(MobileWidget.prototype),\n roles: {},\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.mobile.ui, 'Mobile');\n }\n }\n });\n deepExtend(kendo.dataviz, {\n init: function (element) {\n kendo.init(element, kendo.dataviz.ui);\n },\n ui: {\n roles: {},\n themes: {},\n views: [],\n plugin: function (widget) {\n kendo.ui.plugin(widget, kendo.dataviz.ui);\n }\n },\n roles: {}\n });\n kendo.touchScroller = function (elements, options) {\n if (!options) {\n options = {};\n }\n options.useNative = true;\n return $(elements).map(function (idx, element) {\n element = $(element);\n if (support.kineticScrollNeeded && kendo.mobile.ui.Scroller && !element.data('kendoMobileScroller')) {\n element.kendoMobileScroller(options);\n return element.data('kendoMobileScroller');\n } else {\n return false;\n }\n })[0];\n };\n kendo.preventDefault = function (e) {\n e.preventDefault();\n };\n kendo.widgetInstance = function (element, suites) {\n var role = element.data(kendo.ns + 'role'), widgets = [], i, length;\n if (role) {\n if (role === 'content') {\n role = 'scroller';\n }\n if (role === 'editortoolbar') {\n var editorToolbar = element.data('kendoEditorToolbar');\n if (editorToolbar) {\n return editorToolbar;\n }\n }\n if (role === 'view') {\n return element.data('kendoView');\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 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 (typeof callback === STRING) {\n context = that.data('handler');\n callback = context[callback];\n args[args.length - 1] = function (e) {\n callback.call(context, e);\n };\n }\n args[0] = events;\n on.apply(that, args);\n return that;\n },\n kendoDestroy: function (ns) {\n ns = ns || this.data('kendoNS');\n if (ns) {\n this.off('.' + ns);\n }\n return this;\n }\n });\n kendo.jQuery = kendoJQuery;\n kendo.eventMap = eventMap;\n kendo.timezone = function () {\n var months = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11\n };\n var days = {\n Sun: 0,\n Mon: 1,\n Tue: 2,\n Wed: 3,\n Thu: 4,\n Fri: 5,\n Sat: 6\n };\n function ruleToDate(year, rule) {\n var date;\n var targetDay;\n var ourDay;\n var month = rule[3];\n var on = rule[4];\n var time = rule[5];\n var cache = rule[8];\n if (!cache) {\n rule[8] = cache = {};\n }\n if (cache[year]) {\n return cache[year];\n }\n if (!isNaN(on)) {\n date = new Date(Date.UTC(year, months[month], on, time[0], time[1], time[2], 0));\n } else if (on.indexOf('last') === 0) {\n date = new Date(Date.UTC(year, months[month] + 1, 1, time[0] - 24, time[1], time[2], 0));\n targetDay = days[on.substr(4, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay - (targetDay > ourDay ? 7 : 0));\n } else if (on.indexOf('>=') >= 0) {\n date = new Date(Date.UTC(year, months[month], on.substr(5), time[0], time[1], time[2], 0));\n targetDay = days[on.substr(0, 3)];\n ourDay = date.getUTCDay();\n date.setUTCDate(date.getUTCDate() + targetDay - ourDay + (targetDay < ourDay ? 7 : 0));\n }\n return cache[year] = date;\n }\n function findRule(utcTime, rules, zone) {\n rules = rules[zone];\n if (!rules) {\n var time = zone.split(':');\n var offset = 0;\n if (time.length > 1) {\n offset = time[0] * 60 + Number(time[1]);\n }\n return [\n -1000000,\n 'max',\n '-',\n 'Jan',\n 1,\n [\n 0,\n 0,\n 0\n ],\n offset,\n '-'\n ];\n }\n var year = new Date(utcTime).getUTCFullYear();\n rules = jQuery.grep(rules, function (rule) {\n var from = rule[0];\n var to = rule[1];\n return from <= year && (to >= year || from == year && to == 'only' || to == 'max');\n });\n rules.push(utcTime);\n rules.sort(function (a, b) {\n if (typeof a != 'number') {\n a = Number(ruleToDate(year, a));\n }\n if (typeof b != 'number') {\n b = Number(ruleToDate(year, b));\n }\n return a - b;\n });\n var rule = rules[jQuery.inArray(utcTime, rules) - 1] || rules[rules.length - 1];\n return isNaN(rule) ? rule : null;\n }\n function findZone(utcTime, zones, timezone) {\n var zoneRules = zones[timezone];\n if (typeof zoneRules === 'string') {\n zoneRules = zones[zoneRules];\n }\n if (!zoneRules) {\n throw new Error('Timezone \"' + timezone + '\" is either incorrect, or kendo.timezones.min.js is not included.');\n }\n for (var idx = zoneRules.length - 1; idx >= 0; idx--) {\n var until = zoneRules[idx][3];\n if (until && utcTime > until) {\n break;\n }\n }\n var zone = zoneRules[idx + 1];\n if (!zone) {\n throw new Error('Timezone \"' + timezone + '\" not found on ' + utcTime + '.');\n }\n return zone;\n }\n function zoneAndRule(utcTime, zones, rules, timezone) {\n if (typeof utcTime != NUMBER) {\n utcTime = Date.UTC(utcTime.getFullYear(), utcTime.getMonth(), utcTime.getDate(), utcTime.getHours(), utcTime.getMinutes(), utcTime.getSeconds(), utcTime.getMilliseconds());\n }\n var zone = findZone(utcTime, zones, timezone);\n return {\n zone: zone,\n rule: findRule(utcTime, rules, zone[1])\n };\n }\n function offset(utcTime, timezone) {\n if (timezone == 'Etc/UTC' || timezone == 'Etc/GMT') {\n return 0;\n }\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n return kendo.parseFloat(rule ? zone[0] - rule[6] : zone[0]);\n }\n function abbr(utcTime, timezone) {\n var info = zoneAndRule(utcTime, this.zones, this.rules, timezone);\n var zone = info.zone;\n var rule = info.rule;\n var base = zone[2];\n if (base.indexOf('/') >= 0) {\n return base.split('/')[rule && +rule[6] ? 1 : 0];\n } else if (base.indexOf('%s') >= 0) {\n return base.replace('%s', !rule || rule[7] == '-' ? '' : rule[7]);\n }\n return base;\n }\n function convert(date, fromOffset, toOffset) {\n var tempToOffset = toOffset;\n var diff;\n if (typeof fromOffset == STRING) {\n fromOffset = this.offset(date, fromOffset);\n }\n if (typeof toOffset == STRING) {\n toOffset = this.offset(date, toOffset);\n }\n var fromLocalOffset = date.getTimezoneOffset();\n date = new Date(date.getTime() + (fromOffset - toOffset) * 60000);\n var toLocalOffset = date.getTimezoneOffset();\n if (typeof tempToOffset == STRING) {\n tempToOffset = this.offset(date, tempToOffset);\n }\n diff = toLocalOffset - fromLocalOffset + (toOffset - tempToOffset);\n return new Date(date.getTime() + diff * 60000);\n }\n function apply(date, timezone) {\n return this.convert(date, date.getTimezoneOffset(), timezone);\n }\n function remove(date, timezone) {\n return this.convert(date, timezone, date.getTimezoneOffset());\n }\n function toLocalDate(time) {\n return this.apply(new Date(time), 'Etc/UTC');\n }\n return {\n zones: {},\n rules: {},\n offset: offset,\n convert: convert,\n apply: apply,\n remove: remove,\n abbr: abbr,\n toLocalDate: toLocalDate\n };\n }();\n kendo.date = function () {\n var MS_PER_MINUTE = 60000, MS_PER_DAY = 86400000;\n function adjustDST(date, hours) {\n if (hours === 0 && date.getHours() === 23) {\n date.setHours(date.getHours() + 2);\n return true;\n }\n return false;\n }\n function setDayOfWeek(date, day, dir) {\n var hours = date.getHours();\n dir = dir || 1;\n day = (day - date.getDay() + 7 * dir) % 7;\n date.setDate(date.getDate() + day);\n adjustDST(date, hours);\n }\n function dayOfWeek(date, day, dir) {\n date = new Date(date);\n setDayOfWeek(date, day, dir);\n return date;\n }\n function firstDayOfMonth(date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n }\n function lastDayOfMonth(date) {\n var last = new Date(date.getFullYear(), date.getMonth() + 1, 0), first = firstDayOfMonth(date), timeOffset = Math.abs(last.getTimezoneOffset() - first.getTimezoneOffset());\n if (timeOffset) {\n last.setHours(first.getHours() + timeOffset / 60);\n }\n return last;\n }\n function moveDateToWeekStart(date, weekStartDay) {\n if (weekStartDay !== 1) {\n return addDays(dayOfWeek(date, weekStartDay, -1), 4);\n }\n return addDays(date, 4 - (date.getDay() || 7));\n }\n function calcWeekInYear(date, weekStartDay) {\n var firstWeekInYear = new Date(date.getFullYear(), 0, 1, -6);\n var newDate = moveDateToWeekStart(date, weekStartDay);\n var diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n var days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n }\n function weekInYear(date, weekStartDay) {\n if (weekStartDay === undefined) {\n weekStartDay = kendo.culture().calendar.firstDay;\n }\n var prevWeekDate = addDays(date, -7);\n var nextWeekDate = addDays(date, 7);\n var weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n }\n function getDate(date) {\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n adjustDST(date, 0);\n return date;\n }\n function toUtcTime(date) {\n return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n function getMilliseconds(date) {\n return toInvariantTime(date).getTime() - getDate(toInvariantTime(date));\n }\n function isInTimeRange(value, min, max) {\n var msMin = getMilliseconds(min), msMax = getMilliseconds(max), msValue;\n if (!value || msMin == msMax) {\n return true;\n }\n if (min >= max) {\n max += MS_PER_DAY;\n }\n msValue = getMilliseconds(value);\n if (msMin > msValue) {\n msValue += MS_PER_DAY;\n }\n if (msMax < msMin) {\n msMax += MS_PER_DAY;\n }\n return msValue >= msMin && msValue <= msMax;\n }\n function isInDateRange(value, min, max) {\n var msMin = min.getTime(), msMax = max.getTime(), msValue;\n if (msMin >= msMax) {\n msMax += MS_PER_DAY;\n }\n msValue = value.getTime();\n return msValue >= msMin && msValue <= msMax;\n }\n function addDays(date, offset) {\n var hours = date.getHours();\n date = new Date(date);\n setTime(date, offset * MS_PER_DAY);\n adjustDST(date, hours);\n return date;\n }\n function setTime(date, milliseconds, ignoreDST) {\n var offset = date.getTimezoneOffset();\n var difference;\n date.setTime(date.getTime() + milliseconds);\n if (!ignoreDST) {\n difference = date.getTimezoneOffset() - offset;\n date.setTime(date.getTime() + difference * MS_PER_MINUTE);\n }\n }\n function setHours(date, time) {\n date = new Date(kendo.date.getDate(date).getTime() + kendo.date.getMilliseconds(time));\n adjustDST(date, time.getHours());\n return date;\n }\n function today() {\n return getDate(new Date());\n }\n function isToday(date) {\n return getDate(date).getTime() == today().getTime();\n }\n function toInvariantTime(date) {\n var staticDate = new Date(1980, 1, 1, 0, 0, 0);\n if (date) {\n staticDate.setHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n }\n return staticDate;\n }\n return {\n adjustDST: adjustDST,\n dayOfWeek: dayOfWeek,\n setDayOfWeek: setDayOfWeek,\n getDate: getDate,\n isInDateRange: isInDateRange,\n isInTimeRange: isInTimeRange,\n isToday: isToday,\n nextDay: function (date) {\n return addDays(date, 1);\n },\n previousDay: function (date) {\n return addDays(date, -1);\n },\n toUtcTime: toUtcTime,\n MS_PER_DAY: MS_PER_DAY,\n MS_PER_HOUR: 60 * MS_PER_MINUTE,\n MS_PER_MINUTE: MS_PER_MINUTE,\n setTime: setTime,\n setHours: setHours,\n addDays: addDays,\n today: today,\n toInvariantTime: toInvariantTime,\n firstDayOfMonth: firstDayOfMonth,\n lastDayOfMonth: lastDayOfMonth,\n weekInYear: weekInYear,\n getMilliseconds: getMilliseconds\n };\n }();\n kendo.stripWhitespace = function (element) {\n if (document.createNodeIterator) {\n var iterator = document.createNodeIterator(element, NodeFilter.SHOW_TEXT, function (node) {\n return node.parentNode == element ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }, false);\n while (iterator.nextNode()) {\n if (iterator.referenceNode && !iterator.referenceNode.textContent.trim()) {\n iterator.referenceNode.parentNode.removeChild(iterator.referenceNode);\n }\n }\n } else {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (child.nodeType == 3 && !/\\S/.test(child.nodeValue)) {\n element.removeChild(child);\n i--;\n }\n if (child.nodeType == 1) {\n kendo.stripWhitespace(child);\n }\n }\n }\n };\n var animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n setTimeout(callback, 1000 / 60);\n };\n kendo.animationFrame = function (callback) {\n animationFrame.call(window, callback);\n };\n var animationQueue = [];\n kendo.queueAnimation = function (callback) {\n animationQueue[animationQueue.length] = callback;\n if (animationQueue.length === 1) {\n kendo.runNextAnimation();\n }\n };\n kendo.runNextAnimation = function () {\n kendo.animationFrame(function () {\n if (animationQueue[0]) {\n animationQueue.shift()();\n if (animationQueue[0]) {\n kendo.runNextAnimation();\n }\n }\n });\n };\n kendo.parseQueryStringParams = function (url) {\n var queryString = url.split('?')[1] || '', params = {}, paramParts = queryString.split(/&|=/), length = paramParts.length, idx = 0;\n for (; idx < length; idx += 2) {\n if (paramParts[idx] !== '') {\n params[decodeURIComponent(paramParts[idx])] = decodeURIComponent(paramParts[idx + 1]);\n }\n }\n return params;\n };\n kendo.elementUnderCursor = function (e) {\n if (typeof e.x.client != 'undefined') {\n return document.elementFromPoint(e.x.client, e.y.client);\n }\n };\n kendo.wheelDeltaY = function (jQueryEvent) {\n var e = jQueryEvent.originalEvent, deltaY = e.wheelDeltaY, delta;\n if (e.wheelDelta) {\n if (deltaY === undefined || deltaY) {\n delta = e.wheelDelta;\n }\n } else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n delta = -e.detail * 10;\n }\n return delta;\n };\n kendo.throttle = function (fn, delay) {\n var timeout;\n var lastExecTime = 0;\n if (!delay || delay <= 0) {\n return fn;\n }\n var throttled = function () {\n var that = this;\n var elapsed = +new Date() - lastExecTime;\n var args = arguments;\n function exec() {\n fn.apply(that, args);\n lastExecTime = +new Date();\n }\n if (!lastExecTime) {\n return exec();\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n if (elapsed > delay) {\n exec();\n } else {\n timeout = setTimeout(exec, delay - elapsed);\n }\n };\n throttled.cancel = function () {\n clearTimeout(timeout);\n };\n return throttled;\n };\n kendo.caret = function (element, start, end) {\n var rangeElement;\n var isPosition = start !== undefined;\n if (end === undefined) {\n end = start;\n }\n if (element[0]) {\n element = element[0];\n }\n if (isPosition && element.disabled) {\n return;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n element.focus();\n var mobile = support.mobileOS;\n if (mobile.wp || mobile.android) {\n setTimeout(function () {\n element.setSelectionRange(start, end);\n }, 0);\n } else {\n element.setSelectionRange(start, end);\n }\n } else {\n start = [\n element.selectionStart,\n element.selectionEnd\n ];\n }\n } else if (document.selection) {\n if ($(element).is(':visible')) {\n element.focus();\n }\n rangeElement = element.createTextRange();\n if (isPosition) {\n rangeElement.collapse(true);\n rangeElement.moveStart('character', start);\n rangeElement.moveEnd('character', end - start);\n rangeElement.select();\n } else {\n var rangeDuplicated = rangeElement.duplicate(), selectionStart, selectionEnd;\n rangeElement.moveToBookmark(document.selection.createRange().getBookmark());\n rangeDuplicated.setEndPoint('EndToStart', rangeElement);\n selectionStart = rangeDuplicated.text.length;\n selectionEnd = selectionStart + rangeElement.text.length;\n start = [\n selectionStart,\n selectionEnd\n ];\n }\n }\n } catch (e) {\n start = [];\n }\n return start;\n };\n kendo.compileMobileDirective = function (element, scope) {\n var angular = window.angular;\n element.attr('data-' + kendo.ns + 'role', element[0].tagName.toLowerCase().replace('kendo-mobile-', '').replace('-', ''));\n angular.element(element).injector().invoke([\n '$compile',\n function ($compile) {\n $compile(element)(scope);\n if (!/^\\$(digest|apply)$/.test(scope.$$phase)) {\n scope.$digest();\n }\n }\n ]);\n return kendo.widgetInstance(element, kendo.mobile.ui);\n };\n kendo.antiForgeryTokens = function () {\n var tokens = {}, csrf_token = $('meta[name=csrf-token],meta[name=_csrf]').attr('content'), csrf_param = $('meta[name=csrf-param],meta[name=_csrf_header]').attr('content');\n $('input[name^=\\'__RequestVerificationToken\\']').each(function () {\n tokens[this.name] = this.value;\n });\n if (csrf_param !== undefined && csrf_token !== undefined) {\n tokens[csrf_param] = csrf_token;\n }\n return tokens;\n };\n kendo.cycleForm = function (form) {\n var firstElement = form.find('input, .k-widget').first();\n var lastElement = form.find('button, .k-button').last();\n function focus(el) {\n var widget = kendo.widgetInstance(el);\n if (widget && widget.focus) {\n widget.focus();\n } else {\n el.focus();\n }\n }\n lastElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && !e.shiftKey) {\n e.preventDefault();\n focus(firstElement);\n }\n });\n firstElement.on('keydown', function (e) {\n if (e.keyCode == kendo.keys.TAB && e.shiftKey) {\n e.preventDefault();\n focus(lastElement);\n }\n });\n };\n kendo.focusElement = function (element) {\n var scrollTopPositions = [];\n var scrollableParents = element.parentsUntil('body').filter(function (index, element) {\n var computedStyle = kendo.getComputedStyles(element, ['overflow']);\n return computedStyle.overflow !== 'visible';\n }).add(window);\n scrollableParents.each(function (index, parent) {\n scrollTopPositions[index] = $(parent).scrollTop();\n });\n try {\n element[0].setActive();\n } catch (e) {\n element[0].focus();\n }\n scrollableParents.each(function (index, parent) {\n $(parent).scrollTop(scrollTopPositions[index]);\n });\n };\n 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 (function () {\n function postToProxy(dataURI, fileName, proxyURL, proxyTarget) {\n var form = $('
').attr({\n action: proxyURL,\n method: 'POST',\n target: proxyTarget\n });\n var data = kendo.antiForgeryTokens();\n data.fileName = fileName;\n var parts = dataURI.split(';base64,');\n data.contentType = parts[0].replace('data:', '');\n data.base64 = parts[1];\n for (var name in data) {\n if (data.hasOwnProperty(name)) {\n $('').attr({\n value: data[name],\n name: name,\n type: 'hidden'\n }).appendTo(form);\n }\n }\n form.appendTo('body').submit().remove();\n }\n var fileSaver = document.createElement('a');\n var downloadAttribute = 'download' in fileSaver && !kendo.support.browser.edge;\n function saveAsBlob(dataURI, fileName) {\n var blob = dataURI;\n if (typeof dataURI == 'string') {\n var parts = dataURI.split(';base64,');\n var contentType = parts[0];\n var base64 = atob(parts[1]);\n var array = new Uint8Array(base64.length);\n for (var idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n blob = new Blob([array.buffer], { type: contentType });\n }\n navigator.msSaveBlob(blob, fileName);\n }\n function saveAsDataURI(dataURI, fileName) {\n if (window.Blob && dataURI instanceof Blob) {\n dataURI = URL.createObjectURL(dataURI);\n }\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n var e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n fileSaver.dispatchEvent(e);\n setTimeout(function () {\n URL.revokeObjectURL(dataURI);\n });\n }\n kendo.saveAs = function (options) {\n var save = postToProxy;\n if (!options.forceProxy) {\n if (downloadAttribute) {\n save = saveAsDataURI;\n } else if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n save(options.dataURI, options.fileName, options.proxyURL, options.proxyTarget);\n };\n }());\n kendo.proxyModelSetters = function proxyModelSetters(data) {\n var observable = {};\n Object.keys(data || {}).forEach(function (property) {\n Object.defineProperty(observable, property, {\n get: function () {\n return data[property];\n },\n set: function (value) {\n data[property] = value;\n data.dirty = true;\n }\n });\n });\n return observable;\n };\n }(jQuery, window));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.fx', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'fx',\n name: 'Effects',\n category: 'framework',\n description: 'Required for animation effects in all Kendo UI widgets.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, fx = kendo.effects, each = $.each, extend = $.extend, proxy = $.proxy, support = kendo.support, browser = support.browser, transforms = support.transforms, transitions = support.transitions, scaleProperties = {\n scale: 0,\n scalex: 0,\n scaley: 0,\n scale3d: 0\n }, translateProperties = {\n translate: 0,\n translatex: 0,\n translatey: 0,\n translate3d: 0\n }, hasZoom = typeof document.documentElement.style.zoom !== 'undefined' && !transforms, matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i, cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i, translateXRegExp = /translatex?$/i, oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/, singleEffectRegExp = /(zoom|fade|expand)/, unitRegExp = /[xy]$/i, transformProps = [\n 'perspective',\n 'rotate',\n 'rotatex',\n 'rotatey',\n 'rotatez',\n 'rotate3d',\n 'scale',\n 'scalex',\n 'scaley',\n 'scalez',\n 'scale3d',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'translatez',\n 'translate3d',\n 'matrix',\n 'matrix3d'\n ], transform2d = [\n 'rotate',\n 'scale',\n 'scalex',\n 'scaley',\n 'skew',\n 'skewx',\n 'skewy',\n 'translate',\n 'translatex',\n 'translatey',\n 'matrix'\n ], transform2units = {\n 'rotate': 'deg',\n scale: '',\n skew: 'px',\n translate: 'px'\n }, cssPrefix = transforms.css, round = Math.round, BLANK = '', PX = 'px', NONE = 'none', AUTO = 'auto', WIDTH = 'width', HEIGHT = 'height', HIDDEN = 'hidden', ORIGIN = 'origin', ABORT_ID = 'abortId', OVERFLOW = 'overflow', TRANSLATE = 'translate', POSITION = 'position', COMPLETE_CALLBACK = 'completeCallback', TRANSITION = cssPrefix + 'transition', TRANSFORM = cssPrefix + 'transform', BACKFACE = cssPrefix + 'backface-visibility', PERSPECTIVE = cssPrefix + 'perspective', DEFAULT_PERSPECTIVE = '1500px', TRANSFORM_PERSPECTIVE = 'perspective(' + DEFAULT_PERSPECTIVE + ')', directions = {\n left: {\n reverse: 'right',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: 'left',\n property: 'left',\n transition: 'translatex',\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: 'up',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: 'down',\n property: 'top',\n transition: 'translatey',\n vertical: true,\n modifier: -1\n },\n top: { reverse: 'bottom' },\n bottom: { reverse: 'top' },\n 'in': {\n reverse: 'out',\n modifier: -1\n },\n out: {\n reverse: 'in',\n modifier: 1\n },\n vertical: { reverse: 'vertical' },\n horizontal: { reverse: 'horizontal' }\n };\n kendo.directions = directions;\n extend($.fn, {\n kendoStop: function (clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n if (transforms && !transitions) {\n each(transform2d, function (idx, value) {\n $.fn[value] = function (val) {\n if (typeof val == 'undefined') {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0], transformValue = value + '(' + val + transform2units[value.replace(unitRegExp, '')] + ')';\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + '\\\\(.*?\\\\)', 'i'), transformValue);\n }\n }\n return this;\n };\n $.fx.step[value] = function (fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function () {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n return curProxy.apply(this, arguments);\n };\n }\n kendo.toggleClass = function (element, classes, options, add) {\n if (classes) {\n classes = classes.split(' ');\n if (transitions) {\n options = extend({\n exclusive: 'all',\n duration: 400,\n ease: 'ease-out'\n }, options);\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease);\n setTimeout(function () {\n element.css(TRANSITION, '').css(HEIGHT);\n }, options.duration);\n }\n each(classes, function (idx, value) {\n element.toggleClass(value, add);\n });\n }\n return element;\n };\n kendo.parseEffects = function (input, mirror) {\n var effects = {};\n if (typeof input === 'string') {\n each(input.split(' '), function (idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value), resolved = value.replace(oldEffectsRegExp, function (match, $1, $2) {\n return $1 + ':' + $2.toLowerCase();\n }), effect = resolved.split(':'), direction = effect[1], effectBody = {};\n if (effect.length > 1) {\n effectBody.direction = mirror && redirectedEffect ? directions[direction].reverse : direction;\n }\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function (idx) {\n var direction = this.direction;\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n effects[idx] = this;\n });\n }\n return effects;\n };\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n return properties;\n }\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n if (isTransformed) {\n transformation.push(key + '(' + value + ')');\n } else {\n cssValues[key] = value;\n }\n }\n }\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(' ');\n }\n return cssValues;\n }\n if (transitions) {\n extend(fx, {\n transition: function (element, properties, options) {\n var css, delay = 0, oldKeys = element.data('keys') || [], timeoutID;\n options = extend({\n duration: 200,\n ease: 'ease-out',\n complete: null,\n exclusive: 'all'\n }, options);\n var stopTransitionCalled = false;\n var stopTransition = function () {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n element.removeData(ABORT_ID).dequeue().css(TRANSITION, '').css(TRANSITION);\n options.complete.call(element);\n }\n };\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n css = normalizeCSS(element, properties);\n $.merge(oldKeys, keys(css));\n element.data('keys', $.uniqueSort(oldKeys)).height();\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.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 () {\n var idx, length = this.length, value, json = new Array(length);\n for (idx = 0; idx < length; idx++) {\n value = this[idx];\n if (value instanceof ObservableObject) {\n value = value.toJSON();\n }\n json[idx] = value;\n }\n return json;\n },\n parent: noop,\n wrapAll: function (source, target) {\n var that = this, idx, length, parent = function () {\n return that;\n };\n target = target || [];\n for (idx = 0, length = source.length; idx < length; idx++) {\n target[idx] = that.wrap(source[idx], parent);\n }\n return target;\n },\n wrap: function (object, parent) {\n var that = this, observable;\n if (object !== null && toString.call(object) === '[object Object]') {\n observable = object instanceof that.type || object instanceof Model;\n if (!observable) {\n object = object instanceof ObservableObject ? object.toJSON() : object;\n object = new that.type(object);\n }\n object.parent = parent;\n object.bind(CHANGE, function (e) {\n that.trigger(CHANGE, {\n field: e.field,\n node: e.node,\n index: e.index,\n items: e.items || [this],\n action: e.node ? e.action || 'itemloaded' : 'itemchange'\n });\n });\n }\n return object;\n },\n push: function () {\n var index = this.length, items = this.wrapAll(arguments), result;\n result = push.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n return result;\n },\n slice: slice,\n sort: [].sort,\n join: join,\n pop: function () {\n var length = this.length, result = pop.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: length - 1,\n items: [result]\n });\n }\n return result;\n },\n splice: function (index, howMany, item) {\n var items = this.wrapAll(slice.call(arguments, 2)), result, i, len;\n result = splice.apply(this, [\n index,\n howMany\n ].concat(items));\n if (result.length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: index,\n items: result\n });\n for (i = 0, len = result.length; i < len; i++) {\n if (result[i] && result[i].children) {\n result[i].unbind(CHANGE);\n }\n }\n }\n if (item) {\n this.trigger(CHANGE, {\n action: 'add',\n index: index,\n items: items\n });\n }\n return result;\n },\n shift: function () {\n var length = this.length, result = shift.apply(this);\n if (length) {\n this.trigger(CHANGE, {\n action: 'remove',\n index: 0,\n items: [result]\n });\n }\n return result;\n },\n unshift: function () {\n var items = this.wrapAll(arguments), result;\n result = unshift.apply(this, items);\n this.trigger(CHANGE, {\n action: 'add',\n index: 0,\n items: items\n });\n return result;\n },\n indexOf: function (item) {\n var that = this, idx, length;\n for (idx = 0, length = that.length; idx < length; idx++) {\n if (that[idx] === item) {\n return idx;\n }\n }\n return -1;\n },\n forEach: function (callback, thisArg) {\n var idx = 0;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n callback.call(context, this[idx], idx, this);\n }\n },\n map: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n result[idx] = callback.call(context, this[idx], idx, this);\n }\n return result;\n },\n reduce: function (callback) {\n var idx = 0, result, length = this.length;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx < length) {\n result = this[idx++];\n }\n for (; idx < length; idx++) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n reduceRight: function (callback) {\n var idx = this.length - 1, result;\n if (arguments.length == 2) {\n result = arguments[1];\n } else if (idx > 0) {\n result = this[idx--];\n }\n for (; idx >= 0; idx--) {\n result = callback(result, this[idx], idx, this);\n }\n return result;\n },\n filter: function (callback, thisArg) {\n var idx = 0;\n var result = [];\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n result[result.length] = item;\n }\n }\n return result;\n },\n find: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return item;\n }\n }\n },\n every: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (!callback.call(context, item, idx, this)) {\n return false;\n }\n }\n return true;\n },\n some: function (callback, thisArg) {\n var idx = 0;\n var item;\n var length = this.length;\n var context = thisArg || window;\n for (; idx < length; idx++) {\n item = this[idx];\n if (callback.call(context, item, idx, this)) {\n return true;\n }\n }\n return false;\n },\n remove: function (item) {\n var idx = this.indexOf(item);\n if (idx !== -1) {\n this.splice(idx, 1);\n }\n },\n empty: function () {\n this.splice(0, this.length);\n }\n });\n if (typeof Symbol !== 'undefined' && Symbol.iterator && !ObservableArray.prototype[Symbol.iterator]) {\n ObservableArray.prototype[Symbol.iterator] = [][Symbol.iterator];\n }\n var LazyObservableArray = ObservableArray.extend({\n init: function (data, type, 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) {\n return this.hasOwnProperty(field) && field !== '_handlers' && field !== '_events' && typeof this[field] !== FUNCTION && field !== 'uid';\n },\n forEach: function (f) {\n for (var i in this) {\n if (this.shouldSerialize(i)) {\n f(this[i], i);\n }\n }\n },\n toJSON: function () {\n var result = {}, value, field;\n for (field in this) {\n if (this.shouldSerialize(field)) {\n value = this[field];\n if (value instanceof ObservableObject || value instanceof ObservableArray) {\n value = value.toJSON();\n }\n result[field] = value;\n }\n }\n return result;\n },\n get: function (field) {\n var that = this, result;\n that.trigger(GET, { field: field });\n if (field === 'this') {\n result = that;\n } else {\n result = kendo.getter(field, true)(that);\n }\n return result;\n },\n _set: function (field, value) {\n var that = this;\n var composite = field.indexOf('.') >= 0;\n if (composite) {\n var paths = field.split('.'), path = '';\n while (paths.length > 1) {\n path += paths.shift();\n var obj = kendo.getter(path, true)(that);\n if (obj instanceof ObservableObject) {\n obj.set(paths.join('.'), value);\n return composite;\n }\n path += '.';\n }\n }\n kendo.setter(field)(that, value);\n return composite;\n },\n set: function (field, value) {\n var that = this, isSetPrevented = false, composite = field.indexOf('.') >= 0, current = kendo.getter(field, true)(that);\n if (current !== value) {\n if (current instanceof Observable && this._handlers[field]) {\n if (this._handlers[field].get) {\n current.unbind(GET, this._handlers[field].get);\n }\n current.unbind(CHANGE, this._handlers[field].change);\n }\n isSetPrevented = that.trigger('set', {\n field: field,\n value: value\n });\n if (!isSetPrevented) {\n if (!composite) {\n value = that.wrap(value, field, function () {\n return that;\n });\n }\n if (!that._set(field, value) || field.indexOf('(') >= 0 || field.indexOf('[') >= 0) {\n that.trigger(CHANGE, { field: field });\n }\n }\n }\n return isSetPrevented;\n },\n parent: noop,\n wrap: function (object, field, parent) {\n var that = this;\n var get;\n var change;\n var type = toString.call(object);\n if (object != null && (type === '[object Object]' || type === '[object Array]')) {\n var isObservableArray = object instanceof ObservableArray;\n var isDataSource = object instanceof DataSource;\n if (type === '[object Object]' && !isDataSource && !isObservableArray) {\n if (!(object instanceof ObservableObject)) {\n object = new ObservableObject(object);\n }\n get = eventHandler(that, GET, field, true);\n object.bind(GET, get);\n change = eventHandler(that, CHANGE, field, true);\n object.bind(CHANGE, change);\n that._handlers[field] = {\n get: get,\n change: change\n };\n } else if (type === '[object Array]' || isObservableArray || isDataSource) {\n if (!isObservableArray && !isDataSource) {\n object = new ObservableArray(object);\n }\n change = eventHandler(that, CHANGE, field, false);\n object.bind(CHANGE, change);\n that._handlers[field] = { change: change };\n }\n object.parent = parent;\n }\n return object;\n }\n });\n function equal(x, y) {\n if (x === y) {\n return true;\n }\n var xtype = $.type(x), ytype = $.type(y), field;\n if (xtype !== ytype) {\n return false;\n }\n if (xtype === 'date') {\n return x.getTime() === y.getTime();\n }\n if (xtype !== 'object' && xtype !== 'array') {\n return false;\n }\n for (field in x) {\n if (!equal(x[field], y[field])) {\n return false;\n }\n }\n return true;\n }\n var parsers = {\n 'number': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseFloat(value);\n },\n 'date': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return kendo.parseDate(value);\n },\n 'boolean': function (value) {\n if (typeof value === STRING) {\n if (value.toLowerCase() === 'null') {\n return null;\n } else {\n return value.toLowerCase() === 'true';\n }\n }\n return value != null ? !!value : value;\n },\n 'string': function (value) {\n if (typeof value === STRING && value.toLowerCase() === 'null') {\n return null;\n }\n return value != null ? value + '' : value;\n },\n 'default': function (value) {\n return value;\n }\n };\n var defaultValues = {\n 'string': '',\n 'number': 0,\n 'date': new Date(),\n 'boolean': false,\n 'default': ''\n };\n function getFieldByName(obj, name) {\n var field, fieldName;\n for (fieldName in obj) {\n field = obj[fieldName];\n if (isPlainObject(field) && field.field && field.field === name) {\n return field;\n } else if (field === name) {\n return field;\n }\n }\n return null;\n }\n var Model = ObservableObject.extend({\n init: function (data) {\n var that = this;\n if (!data || $.isEmptyObject(data)) {\n data = $.extend({}, that.defaults, data);\n if (that._initializers) {\n for (var idx = 0; idx < that._initializers.length; idx++) {\n var name = that._initializers[idx];\n data[name] = that.defaults[name]();\n }\n }\n }\n ObservableObject.fn.init.call(that, data);\n that.dirty = false;\n that.dirtyFields = {};\n if (that.idField) {\n that.id = that.get(that.idField);\n if (that.id === undefined) {\n that.id = that._defaultId;\n }\n }\n },\n shouldSerialize: function (field) {\n return ObservableObject.fn.shouldSerialize.call(this, field) && field !== 'uid' && !(this.idField !== 'id' && field === 'id') && field !== 'dirty' && field !== 'dirtyFields' && field !== '_accessors';\n },\n _parse: function (field, value) {\n var that = this, fieldName = field, fields = that.fields || {}, parse;\n field = fields[field];\n if (!field) {\n field = getFieldByName(fields, fieldName);\n }\n if (field) {\n parse = field.parse;\n if (!parse && field.type) {\n parse = parsers[field.type.toLowerCase()];\n }\n }\n return parse ? parse(value) : value;\n },\n _notifyChange: function (e) {\n var action = e.action;\n if (action == 'add' || action == 'remove') {\n this.dirty = true;\n this.dirtyFields[e.field] = true;\n }\n },\n editable: function (field) {\n field = (this.fields || {})[field];\n return field ? field.editable !== false : true;\n },\n set: function (field, value, initiator) {\n var that = this;\n var dirty = that.dirty;\n if (that.editable(field)) {\n value = that._parse(field, value);\n if (!equal(value, that.get(field))) {\n that.dirty = true;\n that.dirtyFields[field] = true;\n if (ObservableObject.fn.set.call(that, field, value, initiator) && !dirty) {\n that.dirty = dirty;\n if (!that.dirty) {\n that.dirtyFields[field] = false;\n }\n }\n } else {\n that.trigger('equalSet', {\n field: field,\n value: value\n });\n }\n }\n },\n accept: function (data) {\n var that = this, parent = function () {\n return that;\n }, field;\n for (field in data) {\n var value = data[field];\n if (field.charAt(0) != '_') {\n value = that.wrap(data[field], field, parent);\n }\n that._set(field, value);\n }\n if (that.idField) {\n that.id = that.get(that.idField);\n }\n that.dirty = false;\n that.dirtyFields = {};\n },\n isNew: function () {\n return this.id === this._defaultId;\n }\n });\n Model.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = Model;\n }\n var model, proto = extend({ defaults: {} }, options), name, field, type, value, idx, length, fields = {}, originalName, id = proto.id, functionFields = [];\n if (id) {\n proto.idField = id;\n }\n if (proto.id) {\n delete proto.id;\n }\n if (id) {\n proto.defaults[id] = proto._defaultId = '';\n }\n if (toString.call(proto.fields) === '[object Array]') {\n for (idx = 0, length = proto.fields.length; idx < length; idx++) {\n field = proto.fields[idx];\n if (typeof field === STRING) {\n fields[field] = {};\n } else if (field.field) {\n fields[field.field] = field;\n }\n }\n proto.fields = fields;\n }\n for (name in proto.fields) {\n field = proto.fields[name];\n type = field.type || 'default';\n value = null;\n originalName = name;\n name = typeof field.field === STRING ? field.field : name;\n if (!field.nullable) {\n value = proto.defaults[originalName !== name ? originalName : name] = field.defaultValue !== undefined ? field.defaultValue : defaultValues[type.toLowerCase()];\n if (typeof value === 'function') {\n functionFields.push(name);\n }\n }\n if (options.id === name) {\n proto._defaultId = value;\n }\n proto.defaults[originalName !== name ? originalName : name] = value;\n field.parse = field.parse || parsers[type];\n }\n if (functionFields.length > 0) {\n proto._initializers = functionFields;\n }\n model = base.extend(proto);\n model.define = function (options) {\n return Model.define(model, options);\n };\n if (proto.fields) {\n model.fields = proto.fields;\n model.idField = proto.idField;\n }\n return model;\n };\n var Comparer = {\n selector: function (field) {\n return isFunction(field) ? field : getter(field);\n },\n compare: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n a = selector(a);\n b = selector(b);\n if (a == null && b == null) {\n return 0;\n }\n if (a == null) {\n return -1;\n }\n if (b == null) {\n return 1;\n }\n if (a.localeCompare) {\n return a.localeCompare(b);\n }\n return a > b ? 1 : a < b ? -1 : 0;\n };\n },\n create: function (sort) {\n var compare = sort.compare || this.compare(sort.field);\n if (sort.dir == 'desc') {\n return function (a, b) {\n return compare(b, a, true);\n };\n }\n return compare;\n },\n combine: function (comparers) {\n return function (a, b) {\n var result = comparers[0](a, b), idx, length;\n for (idx = 1, length = comparers.length; idx < length; idx++) {\n result = result || comparers[idx](a, b);\n }\n return result;\n };\n }\n };\n var StableComparer = extend({}, Comparer, {\n asc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return -1;\n }\n if (valueB == null) {\n return 1;\n }\n if (valueA.localeCompare) {\n return valueA.localeCompare(valueB);\n }\n return valueA > valueB ? 1 : -1;\n };\n },\n desc: function (field) {\n var selector = this.selector(field);\n return function (a, b) {\n var valueA = selector(a);\n var valueB = selector(b);\n if (valueA && valueA.getTime && valueB && valueB.getTime) {\n valueA = valueA.getTime();\n valueB = valueB.getTime();\n }\n if (valueA === valueB) {\n return a.__position - b.__position;\n }\n if (valueA == null) {\n return 1;\n }\n if (valueB == null) {\n return -1;\n }\n if (valueB.localeCompare) {\n return valueB.localeCompare(valueA);\n }\n return valueA < valueB ? 1 : -1;\n };\n },\n create: function (sort) {\n return this[sort.dir](sort.field);\n }\n });\n map = function (array, callback) {\n var idx, length = array.length, result = new Array(length);\n for (idx = 0; idx < length; idx++) {\n result[idx] = callback(array[idx], idx, array);\n }\n return result;\n };\n var operators = function () {\n function quote(str) {\n if (typeof str == 'string') {\n str = str.replace(/[\\r\\n]+/g, '');\n }\n return JSON.stringify(str);\n }\n function textOp(impl) {\n return function (a, b, ignore, 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 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) {\n descriptors = normalizeGroup(descriptors || []);\n allData = allData || this.data;\n var that = this, result = new Query(that.data), descriptor;\n if (descriptors.length > 0) {\n descriptor = descriptors[0];\n result = result.groupBy(descriptor).select(function (group) {\n var data = new Query(allData).filter([{\n field: group.field,\n operator: 'eq',\n value: group.value,\n ignoreCase: false\n }]);\n return {\n field: group.field,\n value: group.value,\n items: descriptors.length > 1 ? new Query(group.items).group(descriptors.slice(1), data.toArray()).toArray() : group.items,\n hasSubgroups: descriptors.length > 1,\n aggregates: data.aggregate(descriptor.aggregates)\n };\n });\n }\n return result;\n },\n groupBy: function (descriptor) {\n 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 _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 && !inPlace) {\n query = query.sort(sort);\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);\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.hasSubgroups) {\n convertGroup(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n } else {\n convertRecords(record.items, getters, modelInstance, originalFieldNames, fieldNames);\n }\n }\n }\n function wrapDataAccess(originalFunction, model, converter, getters, originalFieldNames, fieldNames) {\n return function (data) {\n data = originalFunction(data);\n 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.hasSubgroups) {\n result = result.concat(flattenGroups(group.items));\n } else {\n items = group.items;\n for (itemIndex = 0; itemIndex < items.length; itemIndex++) {\n result.push(items.at(itemIndex));\n }\n }\n }\n return result;\n }\n function wrapGroupItems(data, model) {\n var idx, length, group;\n if (model) {\n for (idx = 0, length = data.length; idx < length; idx++) {\n group = data.at(idx);\n if (group.hasSubgroups) {\n wrapGroupItems(group.items, model);\n } else {\n group.items = new LazyObservableArray(group.items, model, group.items._events);\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 var length = data.length;\n var dataItem;\n var idx;\n for (idx = 0; idx < length; idx++) {\n dataItem = data[idx];\n if (dataItem.uid && dataItem.uid == model.uid) {\n data.splice(idx, 1);\n return dataItem;\n }\n }\n }\n function indexOfPristineModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid && item.uid == model.uid || item[model.idField] === model.id && model.id !== model._defaultId;\n });\n }\n return -1;\n }\n function indexOfModel(data, model) {\n if (model) {\n return indexOf(data, function (item) {\n return item.uid == model.uid;\n });\n }\n return -1;\n }\n function indexOf(data, comparer) {\n var idx, length;\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (comparer(data[idx])) {\n return idx;\n }\n }\n return -1;\n }\n function fieldNameFromModel(fields, name) {\n if (fields && !isEmptyObject(fields)) {\n var descriptor = fields[name];\n var fieldName;\n if (isPlainObject(descriptor)) {\n fieldName = descriptor.from || descriptor.field || name;\n } else {\n fieldName = fields[name] || name;\n }\n if (isFunction(fieldName)) {\n return name;\n }\n return fieldName;\n }\n return name;\n }\n function convertFilterDescriptorsField(descriptor, model) {\n var idx, length, target = {};\n for (var field in descriptor) {\n if (field !== 'filters') {\n target[field] = descriptor[field];\n }\n }\n if (descriptor.filters) {\n target.filters = [];\n for (idx = 0, length = descriptor.filters.length; idx < length; idx++) {\n target.filters[idx] = convertFilterDescriptorsField(descriptor.filters[idx], model);\n }\n } else {\n target.field = fieldNameFromModel(model.fields, target.field);\n }\n return target;\n }\n function convertDescriptorsField(descriptors, model) {\n var idx, length, result = [], target, descriptor;\n for (idx = 0, length = descriptors.length; idx < length; idx++) {\n target = {};\n descriptor = descriptors[idx];\n for (var field in descriptor) {\n target[field] = descriptor[field];\n }\n target.field = fieldNameFromModel(model.fields, target.field);\n if (target.aggregates && isArray(target.aggregates)) {\n target.aggregates = convertDescriptorsField(target.aggregates, model);\n }\n result.push(target);\n }\n return result;\n }\n var DataSource = Observable.extend({\n init: function (options) {\n var that = this, model, data;\n if (options) {\n data = options.data;\n }\n options = that.options = extend({}, that.options, options);\n that._map = {};\n that._prefetch = {};\n that._data = [];\n that._pristineData = [];\n that._ranges = [];\n that._view = [];\n that._pristineTotal = 0;\n that._destroyed = [];\n that._pageSize = options.pageSize;\n that._page = options.page || (options.pageSize ? 1 : undefined);\n that._sort = normalizeSort(options.sort);\n that._filter = normalizeFilter(options.filter);\n that._group = normalizeGroup(options.group);\n that._aggregate = options.aggregate;\n that._total = options.total;\n that._shouldDetachObservableParents = true;\n Observable.fn.init.call(that);\n that.transport = Transport.create(options, data, that);\n if (isFunction(that.transport.push)) {\n that.transport.push({\n pushCreate: proxy(that._pushCreate, that),\n pushUpdate: proxy(that._pushUpdate, that),\n pushDestroy: proxy(that._pushDestroy, that)\n });\n }\n if (options.offlineStorage != null) {\n if (typeof options.offlineStorage == 'string') {\n var key = options.offlineStorage;\n that._storage = {\n getItem: function () {\n return JSON.parse(localStorage.getItem(key));\n },\n setItem: function (item) {\n localStorage.setItem(key, stringify(that.reader.serialize(item)));\n }\n };\n } else {\n that._storage = options.offlineStorage;\n }\n }\n that.reader = new kendo.data.readers[options.schema.type || 'json'](options.schema);\n model = that.reader.model || {};\n that._detachObservableParents();\n that._data = that._observe(that._data);\n that._online = true;\n that.bind([\n 'push',\n ERROR,\n CHANGE,\n REQUESTSTART,\n SYNC,\n REQUESTEND,\n PROGRESS\n ], options);\n },\n options: {\n data: null,\n schema: { modelBase: Model },\n offlineStorage: null,\n serverSorting: false,\n serverPaging: false,\n serverFiltering: false,\n serverGrouping: false,\n serverAggregates: false,\n batch: false,\n inPlaceSort: false\n },\n clone: function () {\n return this;\n },\n online: function (value) {\n if (value !== undefined) {\n if (this._online != value) {\n this._online = value;\n if (value) {\n return this.sync();\n }\n }\n return $.Deferred().resolve().promise();\n } else {\n return this._online;\n }\n },\n offlineData: function (state) {\n if (this.options.offlineStorage == null) {\n return null;\n }\n if (state !== undefined) {\n return this._storage.setItem(state);\n }\n return this._storage.getItem() || [];\n },\n _isServerGrouped: function () {\n var group = this.group() || [];\n return this.options.serverGrouping && group.length;\n },\n _pushCreate: function (result) {\n this._push(result, 'pushCreate');\n },\n _pushUpdate: function (result) {\n this._push(result, 'pushUpdate');\n },\n _pushDestroy: function (result) {\n this._push(result, 'pushDestroy');\n },\n _push: function (result, operation) {\n var data = this._readData(result);\n if (!data) {\n data = result;\n }\n this[operation](data);\n },\n _flatData: function (data, skip) {\n if (data) {\n if (this._isServerGrouped()) {\n return flattenGroups(data);\n }\n if (!skip) {\n for (var idx = 0; idx < data.length; idx++) {\n data.at(idx);\n }\n }\n }\n return data;\n },\n parent: noop,\n get: function (id) {\n var idx, length, data = this._flatData(this._data, this.options.useRanges);\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].id == id) {\n return data[idx];\n }\n }\n },\n getByUid: function (id) {\n return this._getByUid(id, this._data);\n },\n _getByUid: function (id, dataItems) {\n var idx, length, data = this._flatData(dataItems, this.options.useRanges);\n if (!data) {\n return;\n }\n for (idx = 0, length = data.length; idx < length; idx++) {\n if (data[idx].uid == id) {\n return data[idx];\n }\n }\n },\n indexOf: function (model) {\n return indexOfModel(this._data, model);\n },\n at: function (index) {\n return this._data.at(index);\n },\n data: function (value) {\n var that = this;\n if (value !== undefined) {\n that._detachObservableParents();\n that._data = this._observe(value);\n that._pristineData = value.slice(0);\n that._storeData();\n that._ranges = [];\n that.trigger('reset');\n that._addRange(that._data);\n that._total = that._data.length;\n that._pristineTotal = that._total;\n that._process(that._data);\n } else {\n if (that._data) {\n for (var idx = 0; idx < that._data.length; idx++) {\n that._data.at(idx);\n }\n }\n return that._data;\n }\n },\n view: function (value) {\n if (value === undefined) {\n return this._view;\n } else {\n this._view = this._observeView(value);\n }\n },\n _observeView: function (data) {\n var that = this;\n replaceWithObservable(data, that._data, that._ranges, that.reader.model || ObservableObject, that._isServerGrouped());\n var view = new LazyObservableArray(data, that.reader.model);\n view.parent = function () {\n return that.parent();\n };\n return view;\n },\n flatView: function () {\n var groups = this.group() || [];\n if (groups.length) {\n return flattenGroups(this._view);\n } else {\n return this._view;\n }\n },\n add: function (model) {\n return this.insert(this._data.length, model);\n },\n _createNewModel: function (model) {\n if (this.reader.model) {\n return new this.reader.model(model);\n }\n if (model instanceof ObservableObject) {\n return model;\n }\n return new ObservableObject(model);\n },\n insert: function (index, model) {\n if (!model) {\n model = index;\n index = 0;\n }\n if (!(model instanceof Model)) {\n model = this._createNewModel(model);\n }\n if (this._isServerGrouped()) {\n this._data.splice(index, 0, this._wrapInEmptyGroup(model));\n } else {\n this._data.splice(index, 0, model);\n }\n this._insertModelInRange(index, model);\n return model;\n },\n pushInsert: function (index, items) {\n 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 });\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 }\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._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 = start + that._flatData(data, true).length;\n that._ranges.push({\n start: start,\n end: end,\n data: data,\n pristineData: data.toJSON(),\n timestamp: that._timeStamp()\n });\n that._sortRanges();\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 }, data);\n if (!that.options.serverPaging) {\n delete options.take;\n delete options.skip;\n delete options.page;\n delete options.pageSize;\n }\n if (!that.options.serverGrouping) {\n delete options.group;\n } else if (that.reader.model && options.group) {\n options.group = convertDescriptorsField(options.group, that.reader.model);\n }\n if (!that.options.serverFiltering) {\n delete options.filter;\n } else if (that.reader.model && options.filter) {\n options.filter = convertFilterDescriptorsField(options.filter, that.reader.model);\n }\n if (!that.options.serverSorting) {\n delete options.sort;\n } else if (that.reader.model && options.sort) {\n options.sort = convertDescriptorsField(options.sort, that.reader.model);\n }\n if (!that.options.serverAggregates) {\n delete options.aggregate;\n } else if (that.reader.model && options.aggregate) {\n options.aggregate = convertDescriptorsField(options.aggregate, that.reader.model);\n }\n return options;\n },\n _queueRequest: function (options, callback) {\n var that = this;\n if (!that._requestInProgress) {\n that._requestInProgress = true;\n that._pending = undefined;\n callback();\n } else {\n that._pending = {\n callback: proxy(callback, that),\n options: options\n };\n }\n },\n _dequeueRequest: function () {\n var that = this;\n that._requestInProgress = false;\n if (that._pending) {\n that._queueRequest(that._pending.options, that._pending.callback);\n }\n },\n _handleCustomErrors: function (response) {\n if (this.reader.errors) {\n var errors = this.reader.errors(response);\n if (errors) {\n this.trigger(ERROR, {\n xhr: null,\n status: 'customerror',\n errorThrown: 'custom error',\n errors: errors\n });\n return true;\n }\n }\n return false;\n },\n _shouldWrap: function (data) {\n var model = this.reader.model;\n if (model && data.length) {\n return !(data[0] instanceof model);\n }\n return false;\n },\n _observe: function (data) {\n var that = this, model = that.reader.model;\n that._shouldDetachObservableParents = true;\n if (data instanceof ObservableArray) {\n that._shouldDetachObservableParents = false;\n if (that._shouldWrap(data)) {\n data.type = that.reader.model;\n data.wrapAll(data, data);\n }\n } else {\n var arrayType = that.pageSize() && !that.options.serverPaging ? LazyObservableArray : ObservableArray;\n data = new arrayType(data, that.reader.model);\n data.parent = function () {\n return that.parent();\n };\n }\n if (that._isServerGrouped()) {\n wrapGroupItems(data, model);\n }\n if (that._changeHandler && that._data && that._data instanceof ObservableArray && !(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 result = that._queryProcess(data, options);\n if (that.options.serverAggregates !== true) {\n that._aggregateResult = that._calculateAggregates(result.dataToAggregate || data, options);\n }\n that.view(result.data);\n that._setFilterTotal(result.total, false);\n e = e || {};\n e.items = e.items || that._view;\n that.trigger(CHANGE, e);\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 }\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 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.view(result.data);\n this.trigger(REQUESTEND, { type: 'read' });\n this.trigger(CHANGE, { items: result.data });\n }\n return $.Deferred().resolve(isPrevented).promise();\n },\n _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 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._query({ sort: val });\n return;\n }\n return that._sort;\n },\n filter: function (val) {\n var that = this;\n if (val === undefined) {\n return that._filter;\n }\n that.trigger('reset');\n that._query({\n filter: val,\n page: 1\n });\n },\n group: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ group: val });\n return;\n }\n return that._group;\n },\n total: function () {\n return parseInt(this._total || 0, 10);\n },\n aggregate: function (val) {\n var that = this;\n if (val !== undefined) {\n that._query({ aggregate: val });\n return;\n }\n return that._aggregate;\n },\n aggregates: function () {\n var result = this._aggregateResult;\n if (isEmptyObject(result)) {\n result = this._emptyAggregates(this.aggregate());\n }\n return result;\n },\n _emptyAggregates: function (aggregates) {\n var result = {};\n if (!isEmptyObject(aggregates)) {\n var aggregate = {};\n if (!isArray(aggregates)) {\n aggregates = [aggregates];\n }\n for (var idx = 0; idx < aggregates.length; idx++) {\n aggregate[aggregates[idx].aggregate] = 0;\n result[aggregates[idx].field] = aggregate;\n }\n }\n return result;\n },\n _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();\n return math.ceil((that.total() || 0) / pageSize);\n },\n inRange: function (skip, take) {\n var that = this, end = math.min(skip + take, that.total());\n if (!that.options.serverPaging && that._data.length > 0) {\n return true;\n }\n return that._findRange(skip, end).length > 0;\n },\n lastRange: function () {\n var ranges = this._ranges;\n return ranges[ranges.length - 1] || {\n start: 0,\n end: 0,\n data: []\n };\n },\n firstItemUid: function () {\n var ranges = this._ranges;\n return ranges.length && ranges[0].data.length && ranges[0].data[0].uid;\n },\n enableRequestsInProgress: function () {\n this._skipRequestsInProgress = false;\n },\n _timeStamp: function () {\n return new Date().getTime();\n },\n range: function (skip, take, callback) {\n this._currentRequestTimeStamp = this._timeStamp();\n this._skipRequestsInProgress = true;\n skip = math.min(skip || 0, this.total());\n callback = isFunction(callback) ? callback : noop;\n var that = this, pageSkip = math.max(math.floor(skip / take), 0) * take, size = math.min(pageSkip + take, that.total()), data;\n data = that._findRange(skip, math.min(skip + take, that.total()));\n if (data.length || that.total() === 0) {\n that._processRangeData(data, skip, take, pageSkip, size);\n callback();\n return;\n }\n if (take !== undefined) {\n if (!that._rangeExists(pageSkip, size)) {\n that.prefetch(pageSkip, take, function () {\n if (skip > pageSkip && size < that.total() && !that._rangeExists(size, math.min(size + take, that.total()))) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n } else {\n that.range(skip, take, callback);\n }\n });\n } else if (pageSkip < skip) {\n that.prefetch(size, take, function () {\n that.range(skip, take, callback);\n });\n }\n }\n },\n _findRange: function (start, end) {\n var that = this, ranges = that._ranges, range, data = [], skipIdx, takeIdx, startIndex, endIndex, rangeData, rangeEnd, processed, options = that.options, remote = options.serverSorting || options.serverPaging || options.serverFiltering || options.serverGrouping || options.serverAggregates, flatData, count, length;\n for (skipIdx = 0, length = ranges.length; skipIdx < length; skipIdx++) {\n range = ranges[skipIdx];\n if (start >= range.start && start <= range.end) {\n count = 0;\n for (takeIdx = skipIdx; takeIdx < length; takeIdx++) {\n range = ranges[takeIdx];\n flatData = that._flatData(range.data, true);\n if (flatData.length && start + count >= range.start) {\n rangeData = range.data;\n rangeEnd = range.end;\n if (!remote) {\n if (options.inPlaceSort) {\n processed = that._queryProcess(range.data, { filter: that.filter() });\n } else {\n var sort = 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 }\n return [];\n },\n _mergeGroups: function (data, range, skip, take) {\n if (this._isServerGrouped()) {\n var temp = range.toJSON(), prevGroup;\n if (data.length) {\n prevGroup = data[data.length - 1];\n }\n mergeGroups(prevGroup, temp, skip, take);\n return data.concat(temp);\n }\n return data.concat(range.slice(skip, take));\n },\n _processRangeData: function (data, skip, take, pageSkip, size) {\n var that = this;\n that._pending = undefined;\n that._skip = skip > that.skip() ? math.min(size, (that.totalPages() - 1) * that.take()) : pageSkip;\n that._currentRangeStart = skip;\n that._take = take;\n var paging = that.options.serverPaging;\n var sorting = that.options.serverSorting;\n var filtering = that.options.serverFiltering;\n var aggregates = that.options.serverAggregates;\n try {\n that.options.serverPaging = true;\n if (!that._isServerGrouped() && !(that.group() && that.group().length)) {\n that.options.serverSorting = true;\n }\n that.options.serverFiltering = true;\n that.options.serverPaging = true;\n that.options.serverAggregates = true;\n if (paging) {\n that._detachObservableParents();\n that._data = data = that._observe(data);\n }\n that._process(data);\n } finally {\n that.options.serverPaging = paging;\n that.options.serverSorting = sorting;\n that.options.serverFiltering = filtering;\n that.options.serverAggregates = aggregates;\n }\n },\n skip: function () {\n var that = this;\n if (that._skip === undefined) {\n return that._page !== undefined ? (that._page - 1) * (that.take() || 1) : undefined;\n }\n return that._skip;\n },\n currentRangeStart: function () {\n return this._currentRangeStart || 0;\n },\n take: function () {\n return this._take || this._pageSize;\n },\n _prefetchSuccessHandler: function (skip, size, callback, force) {\n var that = this;\n var timestamp = that._timeStamp();\n return function (data) {\n var found = false, range = {\n start: skip,\n end: size,\n data: [],\n timestamp: that._timeStamp()\n }, idx, length, temp;\n that._dequeueRequest();\n that.trigger(REQUESTEND, {\n response: data,\n type: 'read'\n });\n data = that.reader.parse(data);\n temp = that._readData(data);\n if (temp.length) {\n for (idx = 0, length = that._ranges.length; idx < length; idx++) {\n if (that._ranges[idx].start === skip) {\n found = true;\n range = that._ranges[idx];\n range.pristineData = temp;\n range.data = that._observe(temp);\n range.end = range.start + that._flatData(range.data, true).length;\n that._sortRanges();\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._rangeExists(skip, size)) {\n clearTimeout(that._timeout);\n that._timeout = setTimeout(function () {\n that._queueRequest(options, function () {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback),\n error: function () {\n var args = slice.call(arguments);\n that.error.apply(that, args);\n }\n });\n } else {\n that._dequeueRequest();\n }\n });\n }, 100);\n } else if (callback) {\n callback();\n }\n },\n _multiplePrefetch: function (skip, take, callback) {\n var that = this, size = math.min(skip + take, that.total()), options = {\n take: take,\n skip: skip,\n page: skip / take + 1,\n pageSize: take,\n sort: that._sort,\n filter: that._filter,\n group: that._group,\n aggregate: that._aggregate\n };\n if (!that._rangeExists(skip, size)) {\n if (!that.trigger(REQUESTSTART, { type: 'read' })) {\n that.transport.read({\n data: that._params(options),\n success: that._prefetchSuccessHandler(skip, size, callback, true)\n });\n }\n } else if (callback) {\n callback();\n }\n },\n _rangeExists: function (start, end) {\n var that = this, ranges = that._ranges, idx, length;\n for (idx = 0, length = ranges.length; idx < length; idx++) {\n if (ranges[idx].start <= start && ranges[idx].end >= end) {\n return true;\n }\n }\n return false;\n },\n _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 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 range;\n var i;\n for (i = 0; i < rangesLength; i++) {\n range = ranges[i];\n lengthDifference = that._flatData(range.data, true).length - math.abs(range.end - range.start);\n if (!mismatchFound && lengthDifference !== 0) {\n mismatchFound = true;\n mismatchLength = lengthDifference;\n range.end += mismatchLength;\n continue;\n }\n if (mismatchFound) {\n range.start += mismatchLength;\n range.end += mismatchLength;\n }\n }\n }\n });\n var Transport = {};\n Transport.create = function (options, data, dataSource) {\n var transport, transportOptions = options.transport ? $.extend({}, options.transport) : null;\n if (transportOptions) {\n transportOptions.read = typeof transportOptions.read === STRING ? { url: transportOptions.read } : transportOptions.read;\n if (options.type === 'jsdo') {\n transportOptions.dataSource = dataSource;\n }\n if (options.type) {\n kendo.data.transports = kendo.data.transports || {};\n kendo.data.schemas = kendo.data.schemas || {};\n if (!kendo.data.transports[options.type]) {\n kendo.logToConsole('Unknown DataSource transport type \\'' + options.type + '\\'.\\nVerify that registration scripts for this type are included after Kendo UI on the page.', 'warn');\n } else if (!isPlainObject(kendo.data.transports[options.type])) {\n transport = new kendo.data.transports[options.type](extend(transportOptions, { data: data }));\n } else {\n transportOptions = extend(true, {}, kendo.data.transports[options.type], transportOptions);\n }\n options.schema = extend(true, {}, kendo.data.schemas[options.type], options.schema);\n }\n if (!transport) {\n transport = isFunction(transportOptions.read) ? transportOptions : new RemoteTransport(transportOptions);\n }\n } else {\n transport = new LocalTransport({ data: options.data || [] });\n }\n return transport;\n };\n DataSource.create = function (options) {\n if (isArray(options) || options instanceof ObservableArray) {\n options = { data: options };\n }\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, table = dataSource.table, select = dataSource.select, idx, length, model = {}, field;\n if (!data && fields && !dataSource.transport) {\n if (table) {\n data = inferTable(table, fields);\n } else if (select) {\n data = inferSelect(select, fields);\n if (dataSource.group === undefined && data[0] && data[0].optgroup !== undefined) {\n dataSource.group = 'optgroup';\n }\n }\n }\n if (kendo.data.Model && fields && (!dataSource.schema || !dataSource.schema.model)) {\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n if (field.type) {\n model[field.field] = field;\n }\n }\n if (!isEmptyObject(model)) {\n dataSource.schema = extend(true, dataSource.schema, { model: { fields: model } });\n }\n }\n dataSource.data = data;\n select = null;\n dataSource.select = null;\n table = null;\n dataSource.table = null;\n return dataSource instanceof DataSource ? dataSource : new DataSource(dataSource);\n };\n function inferSelect(select, fields) {\n select = $(select)[0];\n var options = select.options;\n var firstField = fields[0];\n var secondField = fields[1];\n var data = [];\n var idx, length;\n var optgroup;\n var option;\n var record;\n var value;\n for (idx = 0, length = options.length; idx < length; idx++) {\n record = {};\n option = options[idx];\n optgroup = option.parentNode;\n if (optgroup === select) {\n optgroup = null;\n }\n if (option.disabled || optgroup && optgroup.disabled) {\n continue;\n }\n if (optgroup) {\n record.optgroup = optgroup.label;\n }\n record[firstField.field] = option.text;\n value = option.attributes.value;\n if (value && value.specified) {\n value = option.value;\n } else {\n value = option.text;\n }\n record[secondField.field] = value;\n data.push(record);\n }\n return data;\n }\n function inferTable(table, fields) {\n var tbody = $(table)[0].tBodies[0], rows = tbody ? tbody.rows : [], idx, length, fieldIndex, fieldCount = fields.length, data = [], cells, record, cell, empty;\n for (idx = 0, length = rows.length; idx < length; idx++) {\n record = {};\n empty = true;\n cells = rows[idx].cells;\n for (fieldIndex = 0; fieldIndex < fieldCount; fieldIndex++) {\n cell = cells[fieldIndex];\n if (cell.nodeName.toLowerCase() !== 'th') {\n empty = false;\n record[fields[fieldIndex].field] = cell.innerHTML;\n }\n }\n if (!empty) {\n data.push(record);\n }\n }\n return data;\n }\n var Node = Model.define({\n idField: 'id',\n init: function (value) {\n var that = this, hasChildren = that.hasChildren || value && value.hasChildren, childrenField = 'items', childrenOptions = {};\n kendo.data.Model.fn.init.call(that, value);\n if (typeof that.children === STRING) {\n childrenField = that.children;\n }\n childrenOptions = {\n schema: {\n data: childrenField,\n model: {\n hasChildren: hasChildren,\n id: that.idField,\n fields: that.fields\n }\n }\n };\n if (typeof that.children !== STRING) {\n extend(childrenOptions, that.children);\n }\n childrenOptions.data = value;\n if (!hasChildren) {\n hasChildren = childrenOptions.schema.data;\n }\n if (typeof hasChildren === STRING) {\n hasChildren = kendo.getter(hasChildren);\n }\n if (isFunction(hasChildren)) {\n var hasChildrenObject = hasChildren.call(that, that);\n if (hasChildrenObject && hasChildrenObject.length === 0) {\n that.hasChildren = false;\n } else {\n that.hasChildren = !!hasChildrenObject;\n }\n }\n that._childrenOptions = childrenOptions;\n if (that.hasChildren) {\n that._initChildren();\n }\n that._loaded = !!(value && value._loaded);\n },\n _initChildren: function () {\n var that = this;\n var children, transport, parameterMap;\n if (!(that.children instanceof HierarchicalDataSource)) {\n children = that.children = new HierarchicalDataSource(that._childrenOptions);\n transport = children.transport;\n parameterMap = transport.parameterMap;\n transport.parameterMap = function (data, type) {\n data[that.idField || 'id'] = that.id;\n if (parameterMap) {\n data = parameterMap(data, type);\n }\n return data;\n };\n children.parent = function () {\n return that;\n };\n children.bind(CHANGE, function (e) {\n e.node = e.node || that;\n that.trigger(CHANGE, e);\n });\n children.bind(ERROR, function (e) {\n var collection = that.parent();\n if (collection) {\n e.node = e.node || that;\n collection.trigger(ERROR, e);\n }\n });\n that._updateChildrenField();\n }\n },\n append: function (model) {\n this._initChildren();\n this.loaded(true);\n this.children.add(model);\n },\n hasChildren: false,\n level: function () {\n var parentNode = this.parentNode(), level = 0;\n while (parentNode && parentNode.parentNode) {\n level++;\n parentNode = parentNode.parentNode ? parentNode.parentNode() : null;\n }\n return level;\n },\n _updateChildrenField: function () {\n var fieldName = this._childrenOptions.schema.data;\n this[fieldName || 'items'] = this.children.data();\n },\n _childrenLoaded: function () {\n this._loaded = true;\n this._updateChildrenField();\n },\n load: function () {\n var options = {};\n var method = '_query';\n var children, promise;\n if (this.hasChildren) {\n this._initChildren();\n children = this.children;\n options[this.idField || 'id'] = this.id;\n if (!this._loaded) {\n children._data = undefined;\n method = 'read';\n }\n children.one(CHANGE, proxy(this._childrenLoaded, this));\n if (this._matchFilter) {\n options.filter = {\n field: '_matchFilter',\n operator: 'eq',\n value: true\n };\n }\n promise = children[method](options);\n } else {\n this.loaded(true);\n }\n return promise || $.Deferred().resolve().promise();\n },\n parentNode: function () {\n var array = this.parent();\n return array.parent();\n },\n loaded: function (value) {\n if (value !== undefined) {\n this._loaded = value;\n } else {\n return this._loaded;\n }\n },\n shouldSerialize: function (field) {\n return Model.fn.shouldSerialize.call(this, field) && field !== 'children' && field !== '_loaded' && field !== 'hasChildren' && field !== '_childrenOptions';\n }\n });\n function dataMethod(name) {\n return function () {\n var data = this._data, result = DataSource.fn[name].apply(this, slice.call(arguments));\n if (this._data != data) {\n this._attachBubbleHandlers();\n }\n return result;\n };\n }\n var HierarchicalDataSource = DataSource.extend({\n init: function (options) {\n var node = Node.define({ children: options });\n if (options.filter && !options.serverFiltering) {\n this._hierarchicalFilter = options.filter;\n options.filter = null;\n }\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: node,\n model: node\n }\n }, options));\n this._attachBubbleHandlers();\n },\n _attachBubbleHandlers: function () {\n var that = this;\n that._data.bind(ERROR, function (e) {\n that.trigger(ERROR, e);\n });\n },\n read: function (data) {\n var result = DataSource.fn.read.call(this, data);\n if (this._hierarchicalFilter) {\n if (this._data && this._data.length > 0) {\n this.filter(this._hierarchicalFilter);\n } else {\n this.options.filter = this._hierarchicalFilter;\n this._filter = normalizeFilter(this.options.filter);\n this._hierarchicalFilter = null;\n }\n }\n return result;\n },\n remove: function (node) {\n var parentNode = node.parentNode(), dataSource = this, result;\n if (parentNode && parentNode._initChildren) {\n dataSource = parentNode.children;\n }\n result = DataSource.fn.remove.call(dataSource, node);\n if (parentNode && !dataSource.data().length) {\n parentNode.hasChildren = false;\n }\n return result;\n },\n success: dataMethod('success'),\n data: dataMethod('data'),\n insert: function (index, model) {\n var parentNode = this.parent();\n if (parentNode && parentNode._initChildren) {\n parentNode.hasChildren = true;\n parentNode._initChildren();\n }\n return DataSource.fn.insert.call(this, index, model);\n },\n filter: function (val) {\n if (val === undefined) {\n return this._filter;\n }\n if (!this.options.serverFiltering && this._markHierarchicalQuery(val)) {\n val = {\n logic: 'or',\n filters: [\n val,\n {\n field: '_matchFilter',\n operator: 'equals',\n value: true\n }\n ]\n };\n }\n this.trigger('reset');\n this._query({\n filter: val,\n page: 1\n });\n },\n _markHierarchicalQuery: function (expressions) {\n var compiled;\n var predicate;\n var fields;\n var operators;\n var filter;\n 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 && $.trim(className.replace('k-sprite', ''));\n }\n if (list.length) {\n record.items = inferList(list.eq(0), fields);\n }\n if (item.attr('data-hasChildren') == 'true') {\n record.hasChildren = true;\n }\n data.push(record);\n }\n return data;\n }\n HierarchicalDataSource.create = function (options) {\n options = options && options.push ? { data: options } : options;\n var dataSource = options || {}, data = dataSource.data, fields = dataSource.fields, list = dataSource.list;\n if (data && data._dataSource) {\n return data._dataSource;\n }\n if (!data && fields && !dataSource.transport) {\n if (list) {\n data = inferList(list, fields);\n }\n }\n dataSource.data = data;\n return dataSource instanceof HierarchicalDataSource ? dataSource : new HierarchicalDataSource(dataSource);\n };\n var Buffer = kendo.Observable.extend({\n init: function (dataSource, viewSize, disablePrefetch) {\n kendo.Observable.fn.init.call(this);\n this._prefetching = false;\n this.dataSource = dataSource;\n this.prefetch = !disablePrefetch;\n var buffer = this;\n dataSource.bind('change', function () {\n buffer._change();\n });\n dataSource.bind('reset', function () {\n buffer._reset();\n });\n this._syncWithDataSource();\n this.setViewSize(viewSize);\n },\n setViewSize: function (viewSize) {\n this.viewSize = viewSize;\n this._recalculate();\n },\n at: function (index) {\n var pageSize = this.pageSize, itemPresent = true;\n if (index >= this.total()) {\n this.trigger('endreached', { index: index });\n return null;\n }\n if (!this.useRanges) {\n return this.dataSource.view()[index];\n }\n if (this.useRanges) {\n if (index < this.dataOffset || index >= this.skip + pageSize) {\n itemPresent = this.range(Math.floor(index / pageSize) * pageSize);\n }\n if (index === this.prefetchThreshold) {\n this._prefetch();\n }\n if (index === this.midPageThreshold) {\n this.range(this.nextMidRange, true);\n } else if (index === this.nextPageThreshold) {\n this.range(this.nextFullRange);\n } else if (index === this.pullBackThreshold) {\n if (this.offset === this.skip) {\n this.range(this.previousMidRange);\n } else {\n this.range(this.previousFullRange);\n }\n }\n if (itemPresent) {\n return this.dataSource.at(index - this.dataOffset);\n } else {\n this.trigger('endreached', { index: index });\n return null;\n }\n }\n },\n indexOf: function (item) {\n return this.dataSource.data().indexOf(item) + this.dataOffset;\n },\n total: function () {\n return parseInt(this.dataSource.total(), 10);\n },\n next: function () {\n var buffer = this, pageSize = buffer.pageSize, offset = buffer.skip - buffer.viewSize + pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize;\n this.offset = offset;\n this.dataSource.prefetch(pageSkip, pageSize, function () {\n buffer._goToRange(offset, true);\n });\n },\n range: function (offset, nextRange) {\n if (this.offset === offset) {\n return true;\n }\n var buffer = this, pageSize = this.pageSize, pageSkip = math.max(math.floor(offset / pageSize), 0) * pageSize, dataSource = this.dataSource;\n if (nextRange) {\n pageSkip += pageSize;\n }\n if (dataSource.inRange(offset, pageSize)) {\n this.offset = offset;\n this._recalculate();\n this._goToRange(offset);\n return true;\n } else if (this.prefetch) {\n dataSource.prefetch(pageSkip, pageSize, function () {\n buffer.offset = offset;\n buffer._recalculate();\n buffer._goToRange(offset, true);\n });\n return false;\n }\n return true;\n },\n syncDataSource: function () {\n var offset = this.offset;\n this.offset = null;\n this.range(offset);\n },\n destroy: function () {\n this.unbind();\n },\n _prefetch: function () {\n var buffer = this, pageSize = this.pageSize, prefetchOffset = this.skip + pageSize, dataSource = this.dataSource;\n if (!dataSource.inRange(prefetchOffset, pageSize) && !this._prefetching && this.prefetch) {\n this._prefetching = true;\n this.trigger('prefetching', {\n skip: prefetchOffset,\n take: pageSize\n });\n dataSource.prefetch(prefetchOffset, pageSize, function () {\n buffer._prefetching = false;\n buffer.trigger('prefetched', {\n skip: prefetchOffset,\n take: pageSize\n });\n });\n }\n },\n _goToRange: function (offset, expanding) {\n if (this.offset !== offset) {\n return;\n }\n this.dataOffset = offset;\n this._expanding = expanding;\n this.dataSource.range(offset, this.pageSize);\n this.dataSource.enableRequestsInProgress();\n },\n _reset: function () {\n this._syncPending = true;\n },\n _change: function () {\n var dataSource = this.dataSource;\n this.length = this.useRanges ? dataSource.lastRange().end : dataSource.view().length;\n if (this._syncPending) {\n this._syncWithDataSource();\n this._recalculate();\n this._syncPending = false;\n this.trigger('reset', { offset: this.offset });\n }\n this.trigger('resize');\n if (this._expanding) {\n this.trigger('expand');\n }\n delete this._expanding;\n },\n _syncWithDataSource: function () {\n var dataSource = this.dataSource;\n this._firstItemUid = dataSource.firstItemUid();\n this.dataOffset = this.offset = dataSource.skip() || 0;\n this.pageSize = dataSource.pageSize();\n this.useRanges = dataSource.options.serverPaging;\n },\n _recalculate: function () {\n var pageSize = this.pageSize, offset = this.offset, viewSize = this.viewSize, skip = Math.ceil(offset / pageSize) * pageSize;\n this.skip = skip;\n this.midPageThreshold = skip + pageSize - 1;\n this.nextPageThreshold = skip + viewSize - 1;\n this.prefetchThreshold = skip + Math.floor(pageSize / 3 * 2);\n this.pullBackThreshold = this.offset - 1;\n this.nextMidRange = skip + pageSize - viewSize;\n this.nextFullRange = skip;\n this.previousMidRange = offset - viewSize;\n this.previousFullRange = skip - pageSize;\n }\n });\n var BatchBuffer = kendo.Observable.extend({\n init: function (dataSource, batchSize) {\n var batchBuffer = this;\n kendo.Observable.fn.init.call(batchBuffer);\n this.dataSource = dataSource;\n this.batchSize = batchSize;\n this._total = 0;\n this.buffer = new Buffer(dataSource, batchSize * 3);\n this.buffer.bind({\n 'endreached': function (e) {\n batchBuffer.trigger('endreached', { index: e.index });\n },\n 'prefetching': function (e) {\n batchBuffer.trigger('prefetching', {\n skip: e.skip,\n take: e.take\n });\n },\n 'prefetched': function (e) {\n batchBuffer.trigger('prefetched', {\n skip: e.skip,\n take: e.take\n });\n },\n 'reset': function () {\n batchBuffer._total = 0;\n batchBuffer.trigger('reset');\n },\n 'resize': function () {\n batchBuffer._total = Math.ceil(this.length / batchBuffer.batchSize);\n batchBuffer.trigger('resize', {\n total: batchBuffer.total(),\n offset: this.offset\n });\n }\n });\n },\n syncDataSource: function () {\n this.buffer.syncDataSource();\n },\n at: function (index) {\n var buffer = this.buffer, skip = index * this.batchSize, take = this.batchSize, view = [], item;\n if (buffer.offset > skip) {\n buffer.at(buffer.offset - 1);\n }\n for (var i = 0; i < take; i++) {\n item = buffer.at(skip + i);\n if (item === null) {\n break;\n }\n view.push(item);\n }\n return view;\n },\n total: function () {\n return this._total;\n },\n destroy: function () {\n this.buffer.destroy();\n this.unbind();\n }\n });\n extend(true, kendo.data, {\n readers: { json: DataReader },\n Query: Query,\n DataSource: DataSource,\n HierarchicalDataSource: HierarchicalDataSource,\n Node: Node,\n ObservableObject: ObservableObject,\n ObservableArray: ObservableArray,\n LazyObservableArray: LazyObservableArray,\n LocalTransport: LocalTransport,\n RemoteTransport: RemoteTransport,\n Cache: Cache,\n DataReader: DataReader,\n Model: Model,\n Buffer: Buffer,\n BatchBuffer: BatchBuffer\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.binder', [\n 'kendo.core',\n 'kendo.data'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'binder',\n name: 'MVVM',\n category: 'framework',\n description: 'Model View ViewModel (MVVM) is a design pattern which helps developers separate the Model (the data) from the View (the UI).',\n depends: [\n 'core',\n 'data'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, Observable = kendo.Observable, ObservableObject = kendo.data.ObservableObject, ObservableArray = kendo.data.ObservableArray, toString = {}.toString, binders = {}, Class = kendo.Class, proxy = $.proxy, VALUE = 'value', SOURCE = 'source', EVENTS = 'events', CHECKED = 'checked', CSS = 'css', deleteExpando = true, FUNCTION = 'function', CHANGE = 'change';\n (function () {\n var a = document.createElement('a');\n try {\n delete a.test;\n } catch (e) {\n deleteExpando = false;\n }\n }());\n var Binding = Observable.extend({\n init: function (parents, path) {\n var that = this;\n Observable.fn.init.call(that);\n that.source = parents[0];\n that.parents = parents;\n that.path = path;\n that.dependencies = {};\n that.dependencies[path] = true;\n that.observable = that.source instanceof Observable;\n that._access = function (e) {\n that.dependencies[e.field] = true;\n };\n if (that.observable) {\n that._change = function (e) {\n that.change(e);\n };\n that.source.bind(CHANGE, that._change);\n }\n },\n _parents: function () {\n var parents = this.parents;\n var value = this.get();\n if (value && typeof value.parent == 'function') {\n var parent = value.parent();\n if ($.inArray(parent, parents) < 0) {\n parents = [parent].concat(parents);\n }\n }\n return parents;\n },\n change: function (e) {\n var dependency, ch, field = e.field, that = this;\n if (that.path === 'this') {\n that.trigger(CHANGE, e);\n } else {\n for (dependency in that.dependencies) {\n if (dependency.indexOf(field) === 0) {\n ch = dependency.charAt(field.length);\n if (!ch || ch === '.' || ch === '[') {\n that.trigger(CHANGE, e);\n break;\n }\n }\n }\n }\n },\n start: function (source) {\n source.bind('get', this._access);\n },\n stop: function (source) {\n source.unbind('get', this._access);\n },\n get: function () {\n var that = this, source = that.source, index = 0, path = that.path, result = source;\n if (!that.observable) {\n return result;\n }\n that.start(that.source);\n result = source.get(path);\n while (result === undefined && source) {\n source = that.parents[++index];\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n if (result === undefined) {\n source = that.source;\n while (result === undefined && source) {\n source = source.parent();\n if (source instanceof ObservableObject) {\n result = source.get(path);\n }\n }\n }\n if (typeof result === 'function') {\n index = path.lastIndexOf('.');\n if (index > 0) {\n source = source.get(path.substring(0, index));\n }\n that.start(source);\n if (source !== that.source) {\n result = result.call(source, that.source);\n } else {\n result = result.call(source);\n }\n that.stop(source);\n }\n if (source && source !== that.source) {\n that.currentSource = source;\n source.unbind(CHANGE, that._change).bind(CHANGE, that._change);\n }\n that.stop(that.source);\n return result;\n },\n set: function (value) {\n var source = this.currentSource || this.source;\n var field = kendo.getter(this.path)(source);\n if (typeof field === 'function') {\n if (source !== this.source) {\n field.call(source, this.source, value);\n } else {\n field.call(source, value);\n }\n } else {\n source.set(this.path, value);\n }\n },\n destroy: function () {\n if (this.observable) {\n this.source.unbind(CHANGE, this._change);\n if (this.currentSource) {\n this.currentSource.unbind(CHANGE, this._change);\n }\n }\n this.unbind();\n }\n });\n var EventBinding = Binding.extend({\n get: function () {\n var source = this.source, path = this.path, index = 0, handler;\n handler = source.get(path);\n while (!handler && source) {\n source = this.parents[++index];\n if (source instanceof ObservableObject) {\n handler = source.get(path);\n }\n }\n return proxy(handler, source);\n }\n });\n var TemplateBinding = Binding.extend({\n init: function (source, path, template) {\n var that = this;\n Binding.fn.init.call(that, source, path);\n that.template = template;\n },\n render: function (value) {\n var html;\n this.start(this.source);\n html = kendo.render(this.template, value);\n this.stop(this.source);\n return html;\n }\n });\n var Binder = Class.extend({\n init: function (element, bindings, options) {\n this.element = element;\n this.bindings = bindings;\n this.options = options;\n },\n bind: function (binding, attribute) {\n var that = this;\n binding = attribute ? binding[attribute] : binding;\n binding.bind(CHANGE, function (e) {\n that.refresh(attribute || e);\n });\n that.refresh(attribute);\n },\n destroy: function () {\n }\n });\n var TypedBinder = Binder.extend({\n dataType: function () {\n var dataType = this.element.getAttribute('data-type') || this.element.type || 'text';\n return dataType.toLowerCase();\n },\n parsedValue: function () {\n return this._parseValue(this.element.value, this.dataType());\n },\n _parseValue: function (value, dataType) {\n if (dataType == 'date') {\n value = kendo.parseDate(value, 'yyyy-MM-dd');\n } else if (dataType == 'datetime-local') {\n value = kendo.parseDate(value, [\n 'yyyy-MM-ddTHH:mm:ss',\n 'yyyy-MM-ddTHH:mm'\n ]);\n } else if (dataType == 'number') {\n value = kendo.parseFloat(value);\n } else if (dataType == 'boolean') {\n value = value.toLowerCase();\n if (kendo.parseFloat(value) !== null) {\n value = Boolean(kendo.parseFloat(value));\n } else {\n value = value.toLowerCase() === 'true';\n }\n }\n return value;\n }\n });\n binders.attr = Binder.extend({\n refresh: function (key) {\n this.element.setAttribute(key, this.bindings.attr[key].get());\n }\n });\n binders.css = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.classes = {};\n },\n refresh: function (className) {\n var element = $(this.element), binding = this.bindings.css[className], hasClass = this.classes[className] = binding.get();\n if (hasClass) {\n element.addClass(className);\n } else {\n element.removeClass(className);\n }\n }\n });\n binders.style = Binder.extend({\n refresh: function (key) {\n this.element.style[key] = this.bindings.style[key].get() || '';\n }\n });\n binders.enabled = Binder.extend({\n refresh: function () {\n if (this.bindings.enabled.get()) {\n this.element.removeAttribute('disabled');\n } else {\n this.element.setAttribute('disabled', 'disabled');\n }\n }\n });\n binders.readonly = Binder.extend({\n refresh: function () {\n if (this.bindings.readonly.get()) {\n this.element.setAttribute('readonly', 'readonly');\n } else {\n this.element.removeAttribute('readonly');\n }\n }\n });\n binders.disabled = Binder.extend({\n refresh: function () {\n if (this.bindings.disabled.get()) {\n this.element.setAttribute('disabled', 'disabled');\n } else {\n this.element.removeAttribute('disabled');\n }\n }\n });\n binders.events = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n this.handlers = {};\n },\n refresh: function (key) {\n var element = $(this.element), binding = this.bindings.events[key], handler = this.handlers[key];\n if (handler) {\n element.off(key, handler);\n }\n handler = this.handlers[key] = binding.get();\n element.on(key, binding.source, handler);\n },\n destroy: function () {\n var element = $(this.element), handler;\n for (handler in this.handlers) {\n element.off(handler, this.handlers[handler]);\n }\n }\n });\n binders.text = Binder.extend({\n refresh: function () {\n var text = this.bindings.text.get();\n var dataFormat = this.element.getAttribute('data-format') || '';\n if (text == null) {\n text = '';\n }\n $(this.element).text(kendo.toString(text, dataFormat));\n }\n });\n binders.visible = Binder.extend({\n refresh: function () {\n if (this.bindings.visible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.invisible = Binder.extend({\n refresh: function () {\n if (!this.bindings.invisible.get()) {\n this.element.style.display = '';\n } else {\n this.element.style.display = 'none';\n }\n }\n });\n binders.html = Binder.extend({\n refresh: function () {\n this.element.innerHTML = this.bindings.html.get();\n }\n });\n binders.value = TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n this.eventName = options.valueUpdate || CHANGE;\n $(this.element).on(this.eventName, this._change);\n this._initChange = false;\n },\n change: function () {\n this._initChange = this.eventName != CHANGE;\n this.bindings[VALUE].set(this.parsedValue());\n this._initChange = false;\n },\n refresh: function () {\n if (!this._initChange) {\n var value = this.bindings[VALUE].get();\n if (value == null) {\n value = '';\n }\n var type = this.dataType();\n if (type == 'date') {\n value = kendo.toString(value, 'yyyy-MM-dd');\n } else if (type == 'datetime-local') {\n value = kendo.toString(value, 'yyyy-MM-ddTHH:mm:ss');\n }\n this.element.value = value;\n }\n this._initChange = false;\n },\n destroy: function () {\n $(this.element).off(this.eventName, this._change);\n }\n });\n binders.source = Binder.extend({\n init: function (element, bindings, options) {\n Binder.fn.init.call(this, element, bindings, options);\n var source = this.bindings.source.get();\n if (source instanceof kendo.data.DataSource && options.autoBind !== false) {\n source.fetch();\n }\n },\n refresh: function (e) {\n var that = this, source = that.bindings.source.get();\n if (source instanceof ObservableArray || source instanceof kendo.data.DataSource) {\n e = e || {};\n if (e.action == 'add') {\n that.add(e.index, e.items);\n } else if (e.action == 'remove') {\n that.remove(e.index, e.items);\n } else if (e.action != 'itemchange') {\n that.render();\n }\n } else {\n that.render();\n }\n },\n container: function () {\n var element = this.element;\n if (element.nodeName.toLowerCase() == 'table') {\n if (!element.tBodies[0]) {\n element.appendChild(document.createElement('tbody'));\n }\n element = element.tBodies[0];\n }\n return element;\n },\n template: function () {\n var options = this.options, template = options.template, nodeName = this.container().nodeName.toLowerCase();\n if (!template) {\n if (nodeName == 'select') {\n if (options.valueField || options.textField) {\n template = kendo.format('', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '';\n }\n } else if (nodeName == 'tbody') {\n template = '#:data#';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '
  • #:data#
  • ';\n } else {\n template = '#:data#';\n }\n template = kendo.template(template);\n }\n return template;\n },\n add: function (index, items) {\n var element = this.container(), parents, idx, length, child, clone = element.cloneNode(false), reference = element.children[index];\n $(clone).html(kendo.render(this.template(), items));\n if (clone.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = items.length; idx < length; idx++) {\n child = clone.children[0];\n element.insertBefore(child, reference || null);\n bindElement(child, items[idx], this.options.roles, [items[idx]].concat(parents));\n }\n }\n },\n remove: function (index, items) {\n var idx, element = this.container();\n for (idx = 0; idx < items.length; idx++) {\n var child = element.children[index];\n unbindElementTree(child, true);\n if (child.parentNode == element) {\n element.removeChild(child);\n }\n }\n },\n render: function () {\n var source = this.bindings.source.get(), parents, idx, length, element = this.container(), template = this.template();\n if (source == null) {\n return;\n }\n if (source instanceof kendo.data.DataSource) {\n source = source.view();\n }\n if (!(source instanceof ObservableArray) && toString.call(source) !== '[object Array]') {\n source = [source];\n }\n if (this.bindings.template) {\n unbindElementChildren(element, true);\n $(element).html(this.bindings.template.render(source));\n if (element.children.length) {\n parents = this.bindings.source._parents();\n for (idx = 0, length = source.length; idx < length; idx++) {\n bindElement(element.children[idx], source[idx], this.options.roles, [source[idx]].concat(parents));\n }\n }\n } else {\n $(element).html(kendo.render(template, source));\n }\n }\n });\n binders.input = {\n checked: TypedBinder.extend({\n init: function (element, bindings, options) {\n TypedBinder.fn.init.call(this, element, bindings, options);\n this._change = proxy(this.change, this);\n $(this.element).change(this._change);\n },\n change: function () {\n var element = this.element;\n var value = this.value();\n if (element.type == 'radio') {\n value = this.parsedValue();\n this.bindings[CHECKED].set(value);\n } else if (element.type == 'checkbox') {\n var source = this.bindings[CHECKED].get();\n var index;\n if (source instanceof ObservableArray) {\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n if (index > -1) {\n source.splice(index, 1);\n } else {\n source.push(value);\n }\n } else {\n this.bindings[CHECKED].set(value);\n }\n }\n },\n refresh: function () {\n var value = this.bindings[CHECKED].get(), source = value, type = this.dataType(), element = this.element;\n if (element.type == 'checkbox') {\n if (source instanceof ObservableArray) {\n var index = -1;\n value = this.parsedValue();\n if (value instanceof Date) {\n for (var i = 0; i < source.length; i++) {\n if (source[i] instanceof Date && +source[i] === +value) {\n index = i;\n break;\n }\n }\n } else {\n index = source.indexOf(value);\n }\n element.checked = index >= 0;\n } else {\n element.checked = source;\n }\n } else if (element.type == 'radio') {\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) {\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 that._initOptions(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, { 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 if (that._finished) {\n return;\n }\n that.x.move(touchInfo.location);\n that.y.move(touchInfo.location);\n if (!that._moved) {\n if (that._withinIgnoreThreshold()) {\n return;\n }\n if (!UserEvents.current || UserEvents.current === that.userEvents) {\n that._start(touchInfo);\n } else {\n return that.dispose();\n }\n }\n if (!that._finished) {\n that._trigger(MOVE, touchInfo);\n }\n },\n end: function (touchInfo) {\n this.endTime = now();\n if (this._finished) {\n return;\n }\n this._finished = true;\n this._trigger(RELEASE, touchInfo);\n if (this._moved) {\n this._trigger(END, touchInfo);\n } else {\n if (!this.useClickAsTap) {\n 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 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.options.holdToDrag && 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 that._snapBack();\n } else {\n velocity = e.touch.id === MOUSE_WHEEL_ID ? 0 : e.touch[that.axis].velocity;\n that.velocity = Math.max(Math.min(velocity * that.velocityMultiplier, MAX_VELOCITY), -MAX_VELOCITY);\n that.tapCapture.captureNext();\n Animation.fn.start.call(that);\n }\n },\n tick: function () {\n var that = this, dimension = that.dimension, friction = that.paneAxis.outOfBounds() ? OUT_OF_BOUNDS_FRICTION : that.friction, delta = that.velocity *= friction, location = that.movable[that.axis] + delta;\n if (!that.elastic && dimension.outOfBounds(location)) {\n location = Math.max(Math.min(location, dimension.max), dimension.min);\n that.velocity = 0;\n }\n that.movable.moveAxis(that.axis, location);\n },\n _end: function () {\n this.tapCapture.cancelCapture();\n this.end();\n },\n _snapBack: function () {\n var that = this, dimension = that.dimension, snapBack = that.movable[that.axis] > dimension.max ? dimension.max : dimension.min;\n that._moveTo(snapBack);\n },\n _moveTo: function (location) {\n this.transition.moveTo({\n location: location,\n duration: SNAPBACK_DURATION,\n ease: Transition.easeOutExpo\n });\n }\n });\n var AnimatedScroller = Animation.extend({\n init: function (options) {\n var that = this;\n kendo.effects.Animation.fn.init.call(this);\n extend(that, options, {\n origin: {},\n destination: {},\n offset: {}\n });\n },\n tick: function () {\n this._updateCoordinates();\n this.moveTo(this.origin);\n },\n done: function () {\n return abs(this.offset.y) < ANIMATED_SCROLLER_PRECISION && abs(this.offset.x) < ANIMATED_SCROLLER_PRECISION;\n },\n onEnd: function () {\n this.moveTo(this.destination);\n if (this.callback) {\n this.callback.call();\n }\n },\n setCoordinates: function (from, to) {\n this.offset = {};\n this.origin = from;\n this.destination = to;\n },\n setCallback: function (callback) {\n if (callback && kendo.isFunction(callback)) {\n this.callback = callback;\n } else {\n callback = undefined;\n }\n },\n _updateCoordinates: function () {\n this.offset = {\n x: (this.destination.x - this.origin.x) / 4,\n y: (this.destination.y - this.origin.y) / 4\n };\n this.origin = {\n y: this.origin.y + this.offset.y,\n x: this.origin.x + this.offset.x\n };\n }\n });\n var ScrollBar = Class.extend({\n init: function (options) {\n var that = this, horizontal = options.axis === 'x', element = $('
    ');\n extend(that, options, {\n element: element,\n elementSize: 0,\n movable: new Movable(element),\n scrollMovable: options.movable,\n alwaysVisible: options.alwaysVisible,\n size: horizontal ? 'width' : 'height'\n });\n that.scrollMovable.bind(CHANGE, proxy(that.refresh, that));\n that.container.append(element);\n if (options.alwaysVisible) {\n that.show();\n }\n },\n refresh: function () {\n var that = this, axis = that.axis, dimension = that.dimension, paneSize = dimension.size, scrollMovable = that.scrollMovable, sizeRatio = paneSize / dimension.total, position = Math.round(-scrollMovable[axis] * sizeRatio), size = Math.round(paneSize * sizeRatio);\n if (sizeRatio >= 1) {\n this.element.css('display', 'none');\n } else {\n this.element.css('display', '');\n }\n if (position + size > paneSize) {\n size = paneSize - position;\n } else if (position < 0) {\n size += position;\n position = 0;\n }\n if (that.elementSize != size) {\n that.element.css(that.size, size + 'px');\n that.elementSize = size;\n }\n that.movable.moveAxis(axis, position);\n },\n show: function () {\n this.element.css({\n opacity: SCROLLBAR_OPACITY,\n visibility: 'visible'\n });\n },\n hide: function () {\n if (!this.alwaysVisible) {\n this.element.css({ opacity: 0 });\n }\n }\n });\n var Scroller = Widget.extend({\n init: function (element, options) {\n var that = this;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n that._native = that.options.useNative && kendo.support.hasNativeScrolling;\n if (that._native) {\n element.addClass('km-native-scroller').prepend('
    ');\n extend(that, {\n scrollElement: element,\n fixedContainer: element.children().first()\n });\n return;\n }\n element.css('overflow', 'hidden').addClass('km-scroll-wrapper').wrapInner('
    ').prepend('
    ');\n var inner = element.children().eq(1), tapCapture = new kendo.TapCapture(element), movable = new Movable(inner), dimensions = new PaneDimensions({\n element: inner,\n container: element,\n forcedEnabled: that.options.zoom\n }), avoidScrolling = this.options.avoidScrolling, userEvents = new kendo.UserEvents(element, {\n touchAction: 'pan-y',\n fastTap: true,\n allowSelection: true,\n preventDragEvent: true,\n captureUpIfMoved: true,\n multiTouch: that.options.zoom,\n 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 (!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 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)) {\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 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 },\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.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 },\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 Color = Class.extend({\n init: function (value) {\n var this$1 = this;\n if (arguments.length === 1) {\n var formats = Color.formats;\n var resolvedColor = this.resolveColor(value);\n for (var idx = 0; idx < formats.length; idx++) {\n var formatRegex = formats[idx].re;\n var processor = formats[idx].process;\n var parts = formatRegex.exec(resolvedColor);\n if (parts) {\n var channels = processor(parts);\n this$1.r = channels[0];\n this$1.g = channels[1];\n this$1.b = channels[2];\n }\n }\n } else {\n this.r = arguments[0];\n this.g = arguments[1];\n this.b = arguments[2];\n }\n this.r = this.normalizeByte(this.r);\n this.g = this.normalizeByte(this.g);\n this.b = this.normalizeByte(this.b);\n },\n toHex: function () {\n var pad = this.padDigit;\n var r = this.r.toString(16);\n var g = this.g.toString(16);\n var b = this.b.toString(16);\n return '#' + pad(r) + pad(g) + pad(b);\n },\n resolveColor: function (value) {\n var color = value || 'black';\n if (color.charAt(0) === '#') {\n color = color.substr(1, 6);\n }\n color = color.replace(/ /g, '');\n color = color.toLowerCase();\n color = Color.namedColors[color] || color;\n return color;\n },\n normalizeByte: function (value) {\n if (value < 0 || isNaN(value)) {\n return 0;\n }\n return value > 255 ? 255 : value;\n },\n padDigit: function (value) {\n return value.length === 1 ? '0' + value : value;\n },\n brightness: function (value) {\n var round = Math.round;\n this.r = round(this.normalizeByte(this.r * value));\n this.g = round(this.normalizeByte(this.g * value));\n this.b = round(this.normalizeByte(this.b * value));\n return this;\n },\n percBrightness: function () {\n return Math.sqrt(0.241 * this.r * this.r + 0.691 * this.g * this.g + 0.068 * this.b * this.b);\n }\n });\n Color.fromBytes = function (r, g, b, a) {\n return new Bytes(r, g, b, a != null ? a : 1);\n };\n Color.fromRGB = function (r, g, b, a) {\n return new RGB(r, g, b, a != null ? a : 1);\n };\n Color.fromHSV = function (h, s, v, a) {\n return new HSV(h, s, v, a != null ? a : 1);\n };\n Color.fromHSL = function (h, s, l, a) {\n return new HSL(h, s, l, a != null ? a : 1);\n };\n Color.formats = [\n {\n re: /^rgb\\((\\d{1,3}),\\s*(\\d{1,3}),\\s*(\\d{1,3})\\)$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 10),\n parseInt(parts[2], 10),\n parseInt(parts[3], 10)\n ];\n }\n },\n {\n re: /^(\\w{2})(\\w{2})(\\w{2})$/,\n process: function (parts) {\n return [\n parseInt(parts[1], 16),\n parseInt(parts[2], 16),\n parseInt(parts[3], 16)\n ];\n }\n },\n {\n re: /^(\\w{1})(\\w{1})(\\w{1})$/,\n process: function (parts) {\n return [\n parseInt(parts[1] + parts[1], 16),\n parseInt(parts[2] + parts[2], 16),\n parseInt(parts[3] + parts[3], 16)\n ];\n }\n }\n ];\n Color.namedColors = namedColors;\n kendo.deepExtend(kendo, {\n parseColor: parseColor,\n Color: Color\n });\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/kendo-drawing', [\n 'drawing/util',\n 'kendo.color',\n 'util/text-metrics'\n ], f);\n}(function () {\n (function ($) {\n window.kendo = window.kendo || {};\n var kendoDrawing = kendo.drawing;\n var kendoDrawingUtil = kendoDrawing.util;\n var Class = kendo.Class;\n var kendoUtil = kendo.util;\n var support = kendo.support;\n var supportBrowser = support.browser;\n var createPromise = kendoDrawingUtil.createPromise;\n var promiseAll = kendoDrawingUtil.promiseAll;\n var ObserversMixin = {\n extend: function (proto) {\n var this$1 = this;\n for (var method in this) {\n if (method !== 'extend') {\n proto[method] = this$1[method];\n }\n }\n },\n observers: function () {\n this._observers = this._observers || [];\n return this._observers;\n },\n addObserver: function (element) {\n if (!this._observers) {\n this._observers = [element];\n } else {\n this._observers.push(element);\n }\n return this;\n },\n removeObserver: function (element) {\n var observers = this.observers();\n var index = observers.indexOf(element);\n if (index !== -1) {\n observers.splice(index, 1);\n }\n return this;\n },\n trigger: function (methodName, event) {\n var observers = this._observers;\n if (observers && !this._suspended) {\n for (var idx = 0; idx < observers.length; idx++) {\n var observer = observers[idx];\n if (observer[methodName]) {\n observer[methodName](event);\n }\n }\n }\n return this;\n },\n optionsChange: function (e) {\n if (e === void 0) {\n e = {};\n }\n e.element = this;\n this.trigger('optionsChange', e);\n },\n geometryChange: function () {\n this.trigger('geometryChange', { element: this });\n },\n suspend: function () {\n this._suspended = (this._suspended || 0) + 1;\n return this;\n },\n resume: function () {\n this._suspended = Math.max((this._suspended || 0) - 1, 0);\n return this;\n },\n _observerField: function (field, value) {\n if (this[field]) {\n this[field].removeObserver(this);\n }\n this[field] = value;\n value.addObserver(this);\n }\n };\n function append(first, second) {\n first.push.apply(first, second);\n return first;\n }\n var literals = {\n 1: 'i',\n 10: 'x',\n 100: 'c',\n 2: 'ii',\n 20: 'xx',\n 200: 'cc',\n 3: 'iii',\n 30: 'xxx',\n 300: 'ccc',\n 4: 'iv',\n 40: 'xl',\n 400: 'cd',\n 5: 'v',\n 50: 'l',\n 500: 'd',\n 6: 'vi',\n 60: 'lx',\n 600: 'dc',\n 7: 'vii',\n 70: 'lxx',\n 700: 'dcc',\n 8: 'viii',\n 80: 'lxxx',\n 800: 'dccc',\n 9: 'ix',\n 90: 'xc',\n 900: 'cm',\n 1000: 'm'\n };\n function arabicToRoman(n) {\n var values = [\n 1000,\n 900,\n 800,\n 700,\n 600,\n 500,\n 400,\n 300,\n 200,\n 100,\n 90,\n 80,\n 70,\n 60,\n 50,\n 40,\n 30,\n 20,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ];\n var roman = '';\n while (n > 0) {\n if (n < values[0]) {\n values.shift();\n } else {\n roman += literals[values[0]];\n n -= values[0];\n }\n }\n return roman;\n }\n var UNDEFINED = 'undefined';\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n var defId = 1;\n function definitionId() {\n return 'kdef' + defId++;\n }\n var DEG_TO_RAD = Math.PI / 180;\n var MAX_NUM = Number.MAX_VALUE;\n var MIN_NUM = -Number.MAX_VALUE;\n function deg(radians) {\n return radians / DEG_TO_RAD;\n }\n var KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n var fromCharCode = String.fromCharCode;\n function encodeUTF8(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 128) {\n output += fromCharCode(c);\n } else if (c < 2048) {\n output += fromCharCode(192 | c >>> 6);\n output += fromCharCode(128 | c & 63);\n } else if (c < 65536) {\n output += fromCharCode(224 | c >>> 12);\n output += fromCharCode(128 | c >>> 6 & 63);\n output += fromCharCode(128 | c & 63);\n }\n }\n return output;\n }\n function encodeBase64(input) {\n var output = '';\n var i = 0;\n var utfInput = encodeUTF8(input);\n while (i < utfInput.length) {\n var chr1 = utfInput.charCodeAt(i++);\n var chr2 = utfInput.charCodeAt(i++);\n var chr3 = utfInput.charCodeAt(i++);\n var enc1 = chr1 >> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n var enc4 = chr3 & 63;\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n output = output + KEY_STR.charAt(enc1) + KEY_STR.charAt(enc2) + KEY_STR.charAt(enc3) + KEY_STR.charAt(enc4);\n }\n return output;\n }\n function eventCoordinates(e) {\n if (defined((e.x || {}).location)) {\n return {\n x: e.x.location,\n y: e.y.location\n };\n }\n return {\n x: e.pageX || e.clientX || 0,\n y: e.pageY || e.clientY || 0\n };\n }\n function eventElement(e) {\n if (e === void 0) {\n e = {};\n }\n return e.touch ? e.touch.initialTouch : e.target;\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n function last(array) {\n if (array) {\n return array[array.length - 1];\n }\n }\n function limitValue(value, min, max) {\n return Math.max(Math.min(value, max), min);\n }\n function mergeSort(a, cmp) {\n if (a.length < 2) {\n return a.slice();\n }\n function merge(a, b) {\n var r = [], ai = 0, bi = 0, i = 0;\n while (ai < a.length && bi < b.length) {\n if (cmp(a[ai], b[bi]) <= 0) {\n r[i++] = a[ai++];\n } else {\n r[i++] = b[bi++];\n }\n }\n if (ai < a.length) {\n r.push.apply(r, a.slice(ai));\n }\n if (bi < b.length) {\n r.push.apply(r, b.slice(bi));\n }\n return r;\n }\n return function sort(a) {\n if (a.length <= 1) {\n return a;\n }\n var m = Math.floor(a.length / 2);\n var left = a.slice(0, m);\n var right = a.slice(m);\n left = sort(left);\n right = sort(right);\n return merge(left, right);\n }(a);\n }\n function rad(degrees) {\n return degrees * DEG_TO_RAD;\n }\n function pow(p) {\n if (p) {\n return Math.pow(10, p);\n }\n return 1;\n }\n function round(value, precision) {\n var power = pow(precision);\n return Math.round(value * power) / power;\n }\n function valueOrDefault(value, defaultValue) {\n return defined(value) ? value : defaultValue;\n }\n function bindEvents(element, events) {\n for (var eventName in events) {\n var eventNames = eventName.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.addEventListener(eventNames[idx], events[eventName], false);\n }\n }\n }\n function elementOffset(element) {\n var box = element.getBoundingClientRect();\n var documentElement = document.documentElement;\n return {\n top: box.top + (window.pageYOffset || documentElement.scrollTop) - (documentElement.clientTop || 0),\n left: box.left + (window.pageXOffset || documentElement.scrollLeft) - (documentElement.clientLeft || 0)\n };\n }\n function elementStyles(element, styles) {\n var result = {};\n var style = window.getComputedStyle(element) || {};\n var stylesArray = Array.isArray(styles) ? styles : [styles];\n for (var idx = 0; idx < stylesArray.length; idx++) {\n var field = stylesArray[idx];\n result[field] = style[field];\n }\n return result;\n }\n function getPixels(value) {\n if (isNaN(value)) {\n return value;\n }\n return value + 'px';\n }\n function elementSize(element, size) {\n if (size) {\n var width = size.width;\n var height = size.height;\n if (defined(width)) {\n element.style.width = getPixels(width);\n }\n if (defined(height)) {\n element.style.height = getPixels(height);\n }\n } else {\n var size$1 = elementStyles(element, [\n 'width',\n 'height'\n ]);\n return {\n width: parseInt(size$1.width, 10),\n height: parseInt(size$1.height, 10)\n };\n }\n }\n function unbindEvents(element, events) {\n if (events === void 0) {\n events = {};\n }\n for (var name in events) {\n var eventNames = name.trim().split(' ');\n for (var idx = 0; idx < eventNames.length; idx++) {\n element.removeEventListener(eventNames[idx], events[name], false);\n }\n }\n }\n var util = {\n append: append,\n arabicToRoman: arabicToRoman,\n createPromise: createPromise,\n defined: defined,\n definitionId: definitionId,\n deg: deg,\n encodeBase64: encodeBase64,\n eventCoordinates: eventCoordinates,\n eventElement: eventElement,\n isTransparent: isTransparent,\n last: last,\n limitValue: limitValue,\n mergeSort: mergeSort,\n promiseAll: promiseAll,\n rad: rad,\n round: round,\n valueOrDefault: valueOrDefault,\n bindEvents: bindEvents,\n elementOffset: elementOffset,\n elementSize: elementSize,\n elementStyles: elementStyles,\n unbindEvents: unbindEvents,\n DEG_TO_RAD: DEG_TO_RAD,\n MAX_NUM: MAX_NUM,\n MIN_NUM: MIN_NUM\n };\n var toString = {}.toString;\n var OptionsStore = Class.extend({\n init: function (options, prefix) {\n var this$1 = this;\n if (prefix === void 0) {\n prefix = '';\n }\n this.prefix = prefix;\n for (var field in options) {\n var member = options[field];\n member = this$1._wrap(member, field);\n this$1[field] = member;\n }\n },\n get: function (field) {\n var parts = field.split('.');\n var result = this;\n while (parts.length && result) {\n var part = parts.shift();\n result = result[part];\n }\n return result;\n },\n set: function (field, value) {\n var current = this.get(field);\n if (current !== value) {\n this._set(field, this._wrap(value, field));\n this.optionsChange({\n field: this.prefix + field,\n value: value\n });\n }\n },\n _set: function (field, value) {\n var this$1 = this;\n var composite = field.indexOf('.') >= 0;\n var parentObj = this;\n var fieldName = field;\n if (composite) {\n var parts = fieldName.split('.');\n var prefix = this.prefix;\n while (parts.length > 1) {\n fieldName = parts.shift();\n prefix += fieldName + '.';\n var obj = parentObj[fieldName];\n if (!obj) {\n obj = new OptionsStore({}, prefix);\n obj.addObserver(this$1);\n parentObj[fieldName] = obj;\n }\n parentObj = obj;\n }\n fieldName = parts[0];\n }\n parentObj._clear(fieldName);\n parentObj[fieldName] = value;\n },\n _clear: function (field) {\n var current = this[field];\n if (current && current.removeObserver) {\n current.removeObserver(this);\n }\n },\n _wrap: function (object, field) {\n var type = toString.call(object);\n var wrapped = object;\n if (wrapped !== null && defined(wrapped) && type === '[object Object]') {\n if (!(object instanceof OptionsStore) && !(object instanceof Class)) {\n wrapped = new OptionsStore(wrapped, this.prefix + field + '.');\n }\n wrapped.addObserver(this);\n }\n return wrapped;\n }\n });\n ObserversMixin.extend(OptionsStore.prototype);\n function setAccessor(field) {\n return function (value) {\n if (this[field] !== value) {\n this[field] = value;\n this.geometryChange();\n }\n return this;\n };\n }\n function getAccessor(field) {\n return function () {\n return this[field];\n };\n }\n function defineAccessors(fn, fields) {\n for (var i = 0; i < fields.length; i++) {\n var name = fields[i];\n var capitalized = name.charAt(0).toUpperCase() + name.substring(1, name.length);\n fn['set' + capitalized] = setAccessor(name);\n fn['get' + capitalized] = getAccessor(name);\n }\n }\n var Matrix = Class.extend({\n init: function (a, b, c, d, e, f) {\n if (a === void 0) {\n a = 0;\n }\n if (b === void 0) {\n b = 0;\n }\n if (c === void 0) {\n c = 0;\n }\n if (d === void 0) {\n d = 0;\n }\n if (e === void 0) {\n e = 0;\n }\n if (f === void 0) {\n f = 0;\n }\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n },\n multiplyCopy: function (matrix) {\n return new Matrix(this.a * matrix.a + this.c * matrix.b, this.b * matrix.a + this.d * matrix.b, this.a * matrix.c + this.c * matrix.d, this.b * matrix.c + this.d * matrix.d, this.a * matrix.e + this.c * matrix.f + this.e, this.b * matrix.e + this.d * matrix.f + this.f);\n },\n invert: function () {\n var ref = this;\n var a = ref.a;\n var b = ref.b;\n var d = ref.c;\n var e = ref.d;\n var g = ref.e;\n var h = ref.f;\n var det = a * e - b * d;\n if (det === 0) {\n return null;\n }\n return new Matrix(e / det, -b / det, -d / det, a / det, (d * h - e * g) / det, (b * g - a * h) / det);\n },\n clone: function () {\n return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);\n },\n equals: function (other) {\n if (!other) {\n return false;\n }\n return this.a === other.a && this.b === other.b && this.c === other.c && this.d === other.d && this.e === other.e && this.f === other.f;\n },\n round: function (precision) {\n this.a = round(this.a, precision);\n this.b = round(this.b, precision);\n this.c = round(this.c, precision);\n this.d = round(this.d, precision);\n this.e = round(this.e, precision);\n this.f = round(this.f, precision);\n return this;\n },\n toArray: function (precision) {\n var result = [\n this.a,\n this.b,\n this.c,\n this.d,\n this.e,\n this.f\n ];\n if (defined(precision)) {\n for (var i = 0; i < result.length; i++) {\n result[i] = round(result[i], precision);\n }\n }\n return result;\n },\n toString: function (precision, separator) {\n if (separator === void 0) {\n separator = ',';\n }\n return this.toArray(precision).join(separator);\n }\n });\n Matrix.translate = function (x, y) {\n return new Matrix(1, 0, 0, 1, x, y);\n };\n Matrix.unit = function () {\n return new Matrix(1, 0, 0, 1, 0, 0);\n };\n Matrix.rotate = function (angle, x, y) {\n var matrix = new Matrix();\n matrix.a = Math.cos(rad(angle));\n matrix.b = Math.sin(rad(angle));\n matrix.c = -matrix.b;\n matrix.d = matrix.a;\n matrix.e = x - x * matrix.a + y * matrix.b || 0;\n matrix.f = y - y * matrix.a - x * matrix.b || 0;\n return matrix;\n };\n Matrix.scale = function (scaleX, scaleY) {\n return new Matrix(scaleX, 0, 0, scaleY, 0, 0);\n };\n Matrix.IDENTITY = Matrix.unit();\n function toMatrix(transformation) {\n if (transformation && typeof transformation.matrix === 'function') {\n return transformation.matrix();\n }\n return transformation;\n }\n var Point = Class.extend({\n init: function (x, y) {\n this.x = x || 0;\n this.y = y || 0;\n },\n equals: function (other) {\n return other && other.x === this.x && other.y === this.y;\n },\n clone: function () {\n return new Point(this.x, this.y);\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n return this.transform(Matrix.rotate(angle, originPoint.x, originPoint.y));\n },\n translate: function (x, y) {\n this.x += x;\n this.y += y;\n this.geometryChange();\n return this;\n },\n translateWith: function (point) {\n return this.translate(point.x, point.y);\n },\n move: function (x, y) {\n this.x = this.y = 0;\n return this.translate(x, y);\n },\n scale: function (scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n this.x *= scaleX;\n this.y *= scaleY;\n this.geometryChange();\n return this;\n },\n scaleCopy: function (scaleX, scaleY) {\n return this.clone().scale(scaleX, scaleY);\n },\n transform: function (transformation) {\n var matrix = toMatrix(transformation);\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n this.x = matrix.a * x + matrix.c * y + matrix.e;\n this.y = matrix.b * x + matrix.d * y + matrix.f;\n this.geometryChange();\n return this;\n },\n transformCopy: function (transformation) {\n var point = this.clone();\n if (transformation) {\n point.transform(transformation);\n }\n return point;\n },\n distanceTo: function (point) {\n var dx = this.x - point.x;\n var dy = this.y - point.y;\n return Math.sqrt(dx * dx + dy * dy);\n },\n round: function (digits) {\n this.x = round(this.x, digits);\n this.y = round(this.y, digits);\n this.geometryChange();\n return this;\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var x = doRound ? round(this.x, digits) : this.x;\n var y = doRound ? round(this.y, digits) : this.y;\n return [\n x,\n y\n ];\n },\n toString: function (digits, separator) {\n if (separator === void 0) {\n separator = ' ';\n }\n var ref = this;\n var x = ref.x;\n var y = ref.y;\n if (defined(digits)) {\n x = round(x, digits);\n y = round(y, digits);\n }\n return x + separator + y;\n }\n });\n Point.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Point) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Point(arg0[0], arg0[1]);\n }\n return new Point(arg0, arg1);\n }\n };\n Point.min = function () {\n var arguments$1 = arguments;\n var minX = MAX_NUM;\n var minY = MAX_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n minX = Math.min(point.x, minX);\n minY = Math.min(point.y, minY);\n }\n return new Point(minX, minY);\n };\n Point.max = function () {\n var arguments$1 = arguments;\n var maxX = MIN_NUM;\n var maxY = MIN_NUM;\n for (var i = 0; i < arguments.length; i++) {\n var point = arguments$1[i];\n maxX = Math.max(point.x, maxX);\n maxY = Math.max(point.y, maxY);\n }\n return new Point(maxX, maxY);\n };\n Point.minPoint = function () {\n return new Point(MIN_NUM, MIN_NUM);\n };\n Point.maxPoint = function () {\n return new Point(MAX_NUM, MAX_NUM);\n };\n if (Object.defineProperties) {\n Object.defineProperties(Point, {\n ZERO: {\n get: function () {\n return new Point(0, 0);\n }\n }\n });\n }\n defineAccessors(Point.prototype, [\n 'x',\n 'y'\n ]);\n ObserversMixin.extend(Point.prototype);\n var Size = Class.extend({\n init: function (width, height) {\n this.width = width || 0;\n this.height = height || 0;\n },\n equals: function (other) {\n return other && other.width === this.width && other.height === this.height;\n },\n clone: function () {\n return new Size(this.width, this.height);\n },\n toArray: function (digits) {\n var doRound = defined(digits);\n var width = doRound ? round(this.width, digits) : this.width;\n var height = doRound ? round(this.height, digits) : this.height;\n return [\n width,\n height\n ];\n }\n });\n Size.create = function (arg0, arg1) {\n if (defined(arg0)) {\n if (arg0 instanceof Size) {\n return arg0;\n } else if (arguments.length === 1 && arg0.length === 2) {\n return new Size(arg0[0], arg0[1]);\n }\n return new Size(arg0, arg1);\n }\n };\n if (Object.defineProperties) {\n Object.defineProperties(Size, {\n ZERO: {\n get: function () {\n return new Size(0, 0);\n }\n }\n });\n }\n defineAccessors(Size.prototype, [\n 'width',\n 'height'\n ]);\n ObserversMixin.extend(Size.prototype);\n var Rect = Class.extend({\n init: function (origin, size) {\n if (origin === void 0) {\n origin = new Point();\n }\n if (size === void 0) {\n size = new Size();\n }\n this.setOrigin(origin);\n this.setSize(size);\n },\n clone: function () {\n return new Rect(this.origin.clone(), this.size.clone());\n },\n equals: function (other) {\n return other && other.origin.equals(this.origin) && other.size.equals(this.size);\n },\n setOrigin: function (value) {\n this._observerField('origin', Point.create(value));\n this.geometryChange();\n return this;\n },\n getOrigin: function () {\n return this.origin;\n },\n setSize: function (value) {\n this._observerField('size', Size.create(value));\n this.geometryChange();\n return this;\n },\n getSize: function () {\n return this.size;\n },\n width: function () {\n return this.size.width;\n },\n height: function () {\n return this.size.height;\n },\n topLeft: function () {\n return this.origin.clone();\n },\n bottomRight: function () {\n return this.origin.clone().translate(this.width(), this.height());\n },\n topRight: function () {\n return this.origin.clone().translate(this.width(), 0);\n },\n bottomLeft: function () {\n return this.origin.clone().translate(0, this.height());\n },\n center: function () {\n return this.origin.clone().translate(this.width() / 2, this.height() / 2);\n },\n bbox: function (matrix) {\n var tl = this.topLeft().transformCopy(matrix);\n var tr = this.topRight().transformCopy(matrix);\n var br = this.bottomRight().transformCopy(matrix);\n var bl = this.bottomLeft().transformCopy(matrix);\n return Rect.fromPoints(tl, tr, br, bl);\n },\n transformCopy: function (m) {\n return Rect.fromPoints(this.topLeft().transform(m), this.bottomRight().transform(m));\n },\n expand: function (x, y) {\n if (y === void 0) {\n y = x;\n }\n this.size.width += 2 * x;\n this.size.height += 2 * y;\n this.origin.translate(-x, -y);\n return this;\n },\n expandCopy: function (x, y) {\n return this.clone().expand(x, y);\n },\n containsPoint: function (point) {\n var origin = this.origin;\n var bottomRight = this.bottomRight();\n return !(point.x < origin.x || point.y < origin.y || bottomRight.x < point.x || bottomRight.y < point.y);\n },\n _isOnPath: function (point, width) {\n var rectOuter = this.expandCopy(width, width);\n var rectInner = this.expandCopy(-width, -width);\n return rectOuter.containsPoint(point) && !rectInner.containsPoint(point);\n }\n });\n Rect.fromPoints = function () {\n var topLeft = Point.min.apply(null, arguments);\n var bottomRight = Point.max.apply(null, arguments);\n var size = new Size(bottomRight.x - topLeft.x, bottomRight.y - topLeft.y);\n return new Rect(topLeft, size);\n };\n Rect.union = function (a, b) {\n return Rect.fromPoints(Point.min(a.topLeft(), b.topLeft()), Point.max(a.bottomRight(), b.bottomRight()));\n };\n Rect.intersect = function (a, b) {\n var rect1 = {\n left: a.topLeft().x,\n top: a.topLeft().y,\n right: a.bottomRight().x,\n bottom: a.bottomRight().y\n };\n var rect2 = {\n left: b.topLeft().x,\n top: b.topLeft().y,\n right: b.bottomRight().x,\n bottom: b.bottomRight().y\n };\n if (rect1.left <= rect2.right && rect2.left <= rect1.right && rect1.top <= rect2.bottom && rect2.top <= rect1.bottom) {\n return Rect.fromPoints(new Point(Math.max(rect1.left, rect2.left), Math.max(rect1.top, rect2.top)), new Point(Math.min(rect1.right, rect2.right), Math.min(rect1.bottom, rect2.bottom)));\n }\n };\n ObserversMixin.extend(Rect.prototype);\n var Transformation = Class.extend({\n init: function (matrix) {\n if (matrix === void 0) {\n matrix = Matrix.unit();\n }\n this._matrix = matrix;\n },\n clone: function () {\n return new Transformation(this._matrix.clone());\n },\n equals: function (other) {\n return other && other._matrix.equals(this._matrix);\n },\n translate: function (x, y) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(x, y));\n this._optionsChange();\n return this;\n },\n scale: function (scaleX, scaleY, origin) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n if (origin === void 0) {\n origin = null;\n }\n var originPoint = origin;\n if (originPoint) {\n originPoint = Point.create(originPoint);\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(originPoint.x, originPoint.y));\n }\n this._matrix = this._matrix.multiplyCopy(Matrix.scale(scaleX, scaleY));\n if (originPoint) {\n this._matrix = this._matrix.multiplyCopy(Matrix.translate(-originPoint.x, -originPoint.y));\n }\n this._optionsChange();\n return this;\n },\n rotate: function (angle, origin) {\n var originPoint = Point.create(origin) || Point.ZERO;\n this._matrix = this._matrix.multiplyCopy(Matrix.rotate(angle, originPoint.x, originPoint.y));\n this._optionsChange();\n return this;\n },\n multiply: function (transformation) {\n var matrix = toMatrix(transformation);\n this._matrix = this._matrix.multiplyCopy(matrix);\n this._optionsChange();\n return this;\n },\n matrix: function (value) {\n if (value) {\n this._matrix = value;\n this._optionsChange();\n return this;\n }\n return this._matrix;\n },\n _optionsChange: function () {\n this.optionsChange({\n field: 'transform',\n value: this\n });\n }\n });\n ObserversMixin.extend(Transformation.prototype);\n function transform(matrix) {\n if (matrix === null) {\n return null;\n }\n if (matrix instanceof Transformation) {\n return matrix;\n }\n return new Transformation(matrix);\n }\n var Element$1 = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n _initOptions: function (options) {\n if (options === void 0) {\n options = {};\n }\n var clip = options.clip;\n var transform$$1 = options.transform;\n if (transform$$1) {\n options.transform = transform(transform$$1);\n }\n if (clip && !clip.id) {\n clip.id = definitionId();\n }\n this.options = new OptionsStore(options);\n this.options.addObserver(this);\n },\n transform: function (value) {\n if (defined(value)) {\n this.options.set('transform', transform(value));\n } else {\n return this.options.get('transform');\n }\n },\n parentTransform: function () {\n var element = this;\n var parentMatrix;\n while (element.parent) {\n element = element.parent;\n var transformation = element.transform();\n if (transformation) {\n parentMatrix = transformation.matrix().multiplyCopy(parentMatrix || Matrix.unit());\n }\n }\n if (parentMatrix) {\n return transform(parentMatrix);\n }\n },\n currentTransform: function (parentTransform) {\n if (parentTransform === void 0) {\n parentTransform = this.parentTransform();\n }\n var elementTransform = this.transform();\n var elementMatrix = toMatrix(elementTransform);\n var parentMatrix = toMatrix(parentTransform);\n var combinedMatrix;\n if (elementMatrix && parentMatrix) {\n combinedMatrix = parentMatrix.multiplyCopy(elementMatrix);\n } else {\n combinedMatrix = elementMatrix || parentMatrix;\n }\n if (combinedMatrix) {\n return transform(combinedMatrix);\n }\n },\n visible: function (value) {\n if (defined(value)) {\n this.options.set('visible', value);\n return this;\n }\n return this.options.get('visible') !== false;\n },\n clip: function (value) {\n var options = this.options;\n if (defined(value)) {\n if (value && !value.id) {\n value.id = definitionId();\n }\n options.set('clip', value);\n return this;\n }\n return options.get('clip');\n },\n opacity: function (value) {\n if (defined(value)) {\n this.options.set('opacity', value);\n return this;\n }\n return valueOrDefault(this.options.get('opacity'), 1);\n },\n clippedBBox: function (transformation) {\n var bbox = this._clippedBBox(transformation);\n if (bbox) {\n var clip = this.clip();\n return clip ? Rect.intersect(bbox, clip.bbox(transformation)) : bbox;\n }\n },\n containsPoint: function (point, parentTransform) {\n if (this.visible()) {\n var transform$$1 = this.currentTransform(parentTransform);\n var transformedPoint = point;\n if (transform$$1) {\n transformedPoint = point.transformCopy(transform$$1.matrix().invert());\n }\n return this._hasFill() && this._containsPoint(transformedPoint) || this._isOnPath && this._hasStroke() && this._isOnPath(transformedPoint);\n }\n return false;\n },\n _hasFill: function () {\n var fill = this.options.fill;\n return fill && !isTransparent(fill.color);\n },\n _hasStroke: function () {\n var stroke = this.options.stroke;\n return stroke && stroke.width > 0 && !isTransparent(stroke.color);\n },\n _clippedBBox: function (transformation) {\n return this.bbox(transformation);\n }\n });\n Element$1.prototype.nodeType = 'Element';\n ObserversMixin.extend(Element$1.prototype);\n function ellipseExtremeAngles(center, rx, ry, matrix) {\n var extremeX = 0;\n var extremeY = 0;\n if (matrix) {\n extremeX = Math.atan2(matrix.c * ry, matrix.a * rx);\n if (matrix.b !== 0) {\n extremeY = Math.atan2(matrix.d * ry, matrix.b * rx);\n }\n }\n return {\n x: extremeX,\n y: extremeY\n };\n }\n var PI_DIV_2 = Math.PI / 2;\n var Circle$2 = Class.extend({\n init: function (center, radius) {\n if (center === void 0) {\n center = new Point();\n }\n if (radius === void 0) {\n radius = 0;\n }\n this.setCenter(center);\n this.setRadius(radius);\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n equals: function (other) {\n return other && other.center.equals(this.center) && other.radius === this.radius;\n },\n clone: function () {\n return new Circle$2(this.center.clone(), this.radius);\n },\n pointAt: function (angle) {\n return this._pointAt(rad(angle));\n },\n bbox: function (matrix) {\n var this$1 = this;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radius, this.radius, matrix);\n var minPoint = Point.maxPoint();\n var maxPoint = Point.minPoint();\n for (var i = 0; i < 4; i++) {\n var currentPointX = this$1._pointAt(extremeAngles.x + i * PI_DIV_2).transformCopy(matrix);\n var currentPointY = this$1._pointAt(extremeAngles.y + i * PI_DIV_2).transformCopy(matrix);\n var currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _pointAt: function (angle) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n return new Point(center.x + radius * Math.cos(angle), center.y + radius * Math.sin(angle));\n },\n containsPoint: function (point) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var inCircle = Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2) <= Math.pow(radius, 2);\n return inCircle;\n },\n _isOnPath: function (point, width) {\n var ref = this;\n var center = ref.center;\n var radius = ref.radius;\n var pointDistance = center.distanceTo(point);\n return radius - width <= pointDistance && pointDistance <= radius + width;\n }\n });\n defineAccessors(Circle$2.prototype, ['radius']);\n ObserversMixin.extend(Circle$2.prototype);\n var GRADIENT = 'Gradient';\n var Paintable = {\n extend: function (proto) {\n proto.fill = this.fill;\n proto.stroke = this.stroke;\n },\n fill: function (color, opacity) {\n var options = this.options;\n if (defined(color)) {\n if (color && color.nodeType !== GRADIENT) {\n var newFill = { color: color };\n if (defined(opacity)) {\n newFill.opacity = opacity;\n }\n options.set('fill', newFill);\n } else {\n options.set('fill', color);\n }\n return this;\n }\n return options.get('fill');\n },\n stroke: function (color, width, opacity) {\n if (defined(color)) {\n this.options.set('stroke.color', color);\n if (defined(width)) {\n this.options.set('stroke.width', width);\n }\n if (defined(opacity)) {\n this.options.set('stroke.opacity', opacity);\n }\n return this;\n }\n return this.options.get('stroke');\n }\n };\n var IDENTITY_MATRIX_HASH = Matrix.IDENTITY.toString();\n var Measurable = {\n extend: function (proto) {\n proto.bbox = this.bbox;\n proto.geometryChange = this.geometryChange;\n },\n bbox: function (transformation) {\n var combinedMatrix = toMatrix(this.currentTransform(transformation));\n var matrixHash = combinedMatrix ? combinedMatrix.toString() : IDENTITY_MATRIX_HASH;\n var bbox;\n if (this._bboxCache && this._matrixHash === matrixHash) {\n bbox = this._bboxCache.clone();\n } else {\n bbox = this._bbox(combinedMatrix);\n this._bboxCache = bbox ? bbox.clone() : null;\n this._matrixHash = matrixHash;\n }\n var strokeWidth = this.options.get('stroke.width');\n if (strokeWidth && bbox) {\n bbox.expand(strokeWidth / 2);\n }\n return bbox;\n },\n geometryChange: function () {\n delete this._bboxCache;\n this.trigger('geometryChange', { element: this });\n }\n };\n function geometryAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, value);\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function defineGeometryAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = geometryAccessor(names[i]);\n }\n }\n var DEFAULT_STROKE = '#000';\n var Circle = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Circle$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE);\n }\n },\n rawBBox: function () {\n return this._geometry.bbox();\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Circle.prototype.nodeType = 'Circle';\n Paintable.extend(Circle.prototype);\n Measurable.extend(Circle.prototype);\n defineGeometryAccessors(Circle.prototype, ['geometry']);\n var PRECISION = 10;\n function close(a, b, tolerance) {\n if (tolerance === void 0) {\n tolerance = PRECISION;\n }\n return round(Math.abs(a - b), tolerance) === 0;\n }\n function closeOrLess(a, b, tolerance) {\n return a < b || close(a, b, tolerance);\n }\n function lineIntersection(p0, p1, p2, p3) {\n var s1x = p1.x - p0.x;\n var s2x = p3.x - p2.x;\n var s1y = p1.y - p0.y;\n var s2y = p3.y - p2.y;\n var nx = p0.x - p2.x;\n var ny = p0.y - p2.y;\n var d = s1x * s2y - s2x * s1y;\n var s = (s1x * ny - s1y * nx) / d;\n var t = (s2x * ny - s2y * nx) / d;\n if (s >= 0 && s <= 1 && t >= 0 && t <= 1) {\n return new Point(p0.x + t * s1x, p0.y + t * s1y);\n }\n }\n var MAX_INTERVAL = 45;\n var pow$1 = Math.pow;\n var Arc$2 = Class.extend({\n init: function (center, options) {\n if (center === void 0) {\n center = new Point();\n }\n if (options === void 0) {\n options = {};\n }\n this.setCenter(center);\n this.radiusX = options.radiusX;\n this.radiusY = options.radiusY || options.radiusX;\n this.startAngle = options.startAngle;\n this.endAngle = options.endAngle;\n this.anticlockwise = options.anticlockwise || false;\n this.xRotation = options.xRotation;\n },\n clone: function () {\n return new Arc$2(this.center, {\n radiusX: this.radiusX,\n radiusY: this.radiusY,\n startAngle: this.startAngle,\n endAngle: this.endAngle,\n anticlockwise: this.anticlockwise\n });\n },\n setCenter: function (value) {\n this._observerField('center', Point.create(value));\n this.geometryChange();\n return this;\n },\n getCenter: function () {\n return this.center;\n },\n pointAt: function (angle) {\n var center = this.center;\n var radian = rad(angle);\n return new Point(center.x + this.radiusX * Math.cos(radian), center.y + this.radiusY * Math.sin(radian));\n },\n curvePoints: function () {\n var this$1 = this;\n var startAngle = this.startAngle;\n var dir = this.anticlockwise ? -1 : 1;\n var curvePoints = [this.pointAt(startAngle)];\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var subIntervalsCount = Math.ceil(intervalAngle / MAX_INTERVAL);\n var subIntervalAngle = intervalAngle / subIntervalsCount;\n var currentAngle = startAngle;\n var transformation;\n if (this.xRotation) {\n transformation = transform().rotate(this.xRotation, this.center);\n }\n for (var i = 1; i <= subIntervalsCount; i++) {\n var nextAngle = currentAngle + dir * subIntervalAngle;\n var points = this$1._intervalCurvePoints(currentAngle, nextAngle, transformation);\n curvePoints.push(points.cp1, points.cp2, points.p2);\n currentAngle = nextAngle;\n }\n return curvePoints;\n },\n bbox: function (matrix) {\n var this$1 = this;\n var interval = this._arcInterval();\n var startAngle = interval.startAngle;\n var endAngle = interval.endAngle;\n var extremeAngles = ellipseExtremeAngles(this.center, this.radiusX, this.radiusY, matrix);\n var extremeX = deg(extremeAngles.x);\n var extremeY = deg(extremeAngles.y);\n var endPoint = this.pointAt(endAngle).transformCopy(matrix);\n var currentAngleX = bboxStartAngle(extremeX, startAngle);\n var currentAngleY = bboxStartAngle(extremeY, startAngle);\n var currentPoint = this.pointAt(startAngle).transformCopy(matrix);\n var minPoint = Point.min(currentPoint, endPoint);\n var maxPoint = Point.max(currentPoint, endPoint);\n while (currentAngleX < endAngle || currentAngleY < endAngle) {\n var currentPointX = void 0;\n if (currentAngleX < endAngle) {\n currentPointX = this$1.pointAt(currentAngleX).transformCopy(matrix);\n currentAngleX += 90;\n }\n var currentPointY = void 0;\n if (currentAngleY < endAngle) {\n currentPointY = this$1.pointAt(currentAngleY).transformCopy(matrix);\n currentAngleY += 90;\n }\n currentPoint = new Point(currentPointX.x, currentPointY.y);\n minPoint = Point.min(minPoint, currentPoint);\n maxPoint = Point.max(maxPoint, currentPoint);\n }\n return Rect.fromPoints(minPoint, maxPoint);\n },\n _arcInterval: function () {\n var ref = this;\n var startAngle = ref.startAngle;\n var endAngle = ref.endAngle;\n var anticlockwise = ref.anticlockwise;\n if (anticlockwise) {\n var oldStart = startAngle;\n startAngle = endAngle;\n endAngle = oldStart;\n }\n if (startAngle > endAngle || anticlockwise && startAngle === endAngle) {\n endAngle += 360;\n }\n return {\n startAngle: startAngle,\n endAngle: endAngle\n };\n },\n _intervalCurvePoints: function (startAngle, endAngle, transformation) {\n var p1 = this.pointAt(startAngle);\n var p2 = this.pointAt(endAngle);\n var p1Derivative = this._derivativeAt(startAngle);\n var p2Derivative = this._derivativeAt(endAngle);\n var t = (rad(endAngle) - rad(startAngle)) / 3;\n var cp1 = new Point(p1.x + t * p1Derivative.x, p1.y + t * p1Derivative.y);\n var cp2 = new Point(p2.x - t * p2Derivative.x, p2.y - t * p2Derivative.y);\n if (transformation) {\n p1.transform(transformation);\n p2.transform(transformation);\n cp1.transform(transformation);\n cp2.transform(transformation);\n }\n return {\n p1: p1,\n cp1: cp1,\n cp2: cp2,\n p2: p2\n };\n },\n _derivativeAt: function (angle) {\n var radian = rad(angle);\n return new Point(-this.radiusX * Math.sin(radian), this.radiusY * Math.cos(radian));\n },\n containsPoint: function (point) {\n var interval = this._arcInterval();\n var intervalAngle = interval.endAngle - interval.startAngle;\n var ref = this;\n var center = ref.center;\n var radiusX = ref.radiusX;\n var radiusY = ref.radiusY;\n var distance = center.distanceTo(point);\n var angleRad = Math.atan2(point.y - center.y, point.x - center.x);\n var pointRadius = radiusX * radiusY / Math.sqrt(pow$1(radiusX, 2) * pow$1(Math.sin(angleRad), 2) + pow$1(radiusY, 2) * pow$1(Math.cos(angleRad), 2));\n var startPoint = this.pointAt(this.startAngle).round(PRECISION);\n var endPoint = this.pointAt(this.endAngle).round(PRECISION);\n var intersection = lineIntersection(center, point.round(PRECISION), startPoint, endPoint);\n var containsPoint;\n if (intervalAngle < 180) {\n containsPoint = intersection && closeOrLess(center.distanceTo(intersection), distance) && closeOrLess(distance, pointRadius);\n } else {\n var angle = calculateAngle(center.x, center.y, radiusX, radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n containsPoint = inAngleRange && closeOrLess(distance, pointRadius) || !inAngleRange && (!intersection || intersection.equals(point));\n }\n return containsPoint;\n },\n _isOnPath: function (point, width) {\n var interval = this._arcInterval();\n var center = this.center;\n var angle = calculateAngle(center.x, center.y, this.radiusX, this.radiusY, point.x, point.y);\n if (angle !== 360) {\n angle = (360 + angle) % 360;\n }\n var inAngleRange = interval.startAngle <= angle && angle <= interval.endAngle;\n return inAngleRange && this.pointAt(angle).distanceTo(point) <= width;\n }\n });\n Arc$2.fromPoints = function (start, end, rx, ry, largeArc, swipe, rotation) {\n var arcParameters = normalizeArcParameters({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y,\n rx: rx,\n ry: ry,\n largeArc: largeArc,\n swipe: swipe,\n rotation: rotation\n });\n return new Arc$2(arcParameters.center, {\n startAngle: arcParameters.startAngle,\n endAngle: arcParameters.endAngle,\n radiusX: arcParameters.radiusX,\n radiusY: arcParameters.radiusY,\n xRotation: arcParameters.xRotation,\n anticlockwise: swipe === 0\n });\n };\n defineAccessors(Arc$2.prototype, [\n 'radiusX',\n 'radiusY',\n 'startAngle',\n 'endAngle',\n 'anticlockwise'\n ]);\n ObserversMixin.extend(Arc$2.prototype);\n function calculateAngle(cx, cy, rx, ry, x, y) {\n var cos = round((x - cx) / rx, 3);\n var sin = round((y - cy) / ry, 3);\n return round(deg(Math.atan2(sin, cos)));\n }\n function normalizeArcParameters(parameters) {\n var x1 = parameters.x1;\n var y1 = parameters.y1;\n var x2 = parameters.x2;\n var y2 = parameters.y2;\n var rx = parameters.rx;\n var ry = parameters.ry;\n var largeArc = parameters.largeArc;\n var swipe = parameters.swipe;\n var rotation = parameters.rotation;\n if (rotation === void 0) {\n rotation = 0;\n }\n var radians = rad(rotation);\n var cosine = Math.cos(radians);\n var sine = Math.sin(radians);\n var xT = cosine * (x1 - x2) / 2 + sine * (y1 - y2) / 2;\n var yT = -sine * (x1 - x2) / 2 + cosine * (y1 - y2) / 2;\n var sign = largeArc !== swipe ? 1 : -1;\n var xt2 = Math.pow(xT, 2);\n var yt2 = Math.pow(yT, 2);\n var rx2 = Math.pow(rx, 2);\n var ry2 = Math.pow(ry, 2);\n var delta = xt2 / rx2 + yt2 / ry2;\n if (delta > 1) {\n delta = Math.sqrt(xt2 / rx2 + yt2 / ry2);\n rx = delta * rx;\n rx2 = Math.pow(rx, 2);\n ry = delta * ry;\n ry2 = Math.pow(ry, 2);\n }\n var constT = sign * Math.sqrt((rx2 * ry2 - rx2 * yt2 - ry2 * xt2) / (rx2 * yt2 + ry2 * xt2));\n if (isNaN(constT)) {\n constT = 0;\n }\n var cxT = constT * (rx * yT) / ry;\n var cyT = -constT * (ry * xT) / rx;\n var cx = cosine * cxT - sine * cyT + (x1 + x2) / 2;\n var cy = sine * cxT + cosine * cyT + (y1 + y2) / 2;\n var uX = (xT - cxT) / rx;\n var uY = (yT - cyT) / ry;\n var vX = -(xT + cxT) / rx;\n var vY = -(yT + cyT) / ry;\n var startAngle = (uY >= 0 ? 1 : -1) * deg(Math.acos(uX / Math.sqrt(uX * uX + uY * uY)));\n var angleCosine = round((uX * vX + uY * vY) / (Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY)), 10);\n var angle = (uX * vY - uY * vX >= 0 ? 1 : -1) * deg(Math.acos(angleCosine));\n if (!swipe && angle > 0) {\n angle -= 360;\n }\n if (swipe && angle < 0) {\n angle += 360;\n }\n var endAngle = startAngle + angle;\n var signEndAngle = endAngle >= 0 ? 1 : -1;\n endAngle = Math.abs(endAngle) % 360 * signEndAngle;\n return {\n center: new Point(cx, cy),\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: rx,\n radiusY: ry,\n xRotation: rotation\n };\n }\n function bboxStartAngle(angle, start) {\n var startAngle = angle;\n while (startAngle < start) {\n startAngle += 90;\n }\n return startAngle;\n }\n var push = [].push;\n var pop = [].pop;\n var splice = [].splice;\n var shift = [].shift;\n var slice = [].slice;\n var unshift = [].unshift;\n var ElementsArray = Class.extend({\n init: function (array) {\n if (array === void 0) {\n array = [];\n }\n this.length = 0;\n this._splice(0, array.length, array);\n },\n elements: function (value) {\n if (value) {\n this._splice(0, this.length, value);\n this._change();\n return this;\n }\n return this.slice(0);\n },\n push: function () {\n var elements = arguments;\n var result = push.apply(this, elements);\n this._add(elements);\n return result;\n },\n slice: function () {\n return slice.call(this);\n },\n pop: function () {\n var length = this.length;\n var result = pop.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n splice: function (index, howMany) {\n var elements = slice.call(arguments, 2);\n var result = this._splice(index, howMany, elements);\n this._change();\n return result;\n },\n shift: function () {\n var length = this.length;\n var result = shift.apply(this);\n if (length) {\n this._remove([result]);\n }\n return result;\n },\n unshift: function () {\n var elements = arguments;\n var result = unshift.apply(this, elements);\n this._add(elements);\n return result;\n },\n indexOf: function (element) {\n var this$1 = this;\n var length = this.length;\n for (var idx = 0; idx < length; idx++) {\n if (this$1[idx] === element) {\n return idx;\n }\n }\n return -1;\n },\n _splice: function (index, howMany, elements) {\n var result = splice.apply(this, [\n index,\n howMany\n ].concat(elements));\n this._clearObserver(result);\n this._setObserver(elements);\n return result;\n },\n _add: function (elements) {\n this._setObserver(elements);\n this._change();\n },\n _remove: function (elements) {\n this._clearObserver(elements);\n this._change();\n },\n _setObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].addObserver(this$1);\n }\n },\n _clearObserver: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n elements[idx].removeObserver(this$1);\n }\n },\n _change: function () {\n }\n });\n ObserversMixin.extend(ElementsArray.prototype);\n var GeometryElementsArray = ElementsArray.extend({\n _change: function () {\n this.geometryChange();\n }\n });\n function pointAccessor(name) {\n var fieldName = '_' + name;\n return function (value) {\n if (defined(value)) {\n this._observerField(fieldName, Point.create(value));\n this.geometryChange();\n return this;\n }\n return this[fieldName];\n };\n }\n function definePointAccessors(fn, names) {\n for (var i = 0; i < names.length; i++) {\n fn[names[i]] = pointAccessor(names[i]);\n }\n }\n function isOutOfEndPoint(endPoint, controlPoint, point) {\n var angle = deg(Math.atan2(controlPoint.y - endPoint.y, controlPoint.x - endPoint.x));\n var rotatedPoint = point.transformCopy(transform().rotate(-angle, endPoint));\n return rotatedPoint.x < endPoint.x;\n }\n function calculateCurveAt(t, field, points) {\n var t1 = 1 - t;\n return Math.pow(t1, 3) * points[0][field] + 3 * Math.pow(t1, 2) * t * points[1][field] + 3 * Math.pow(t, 2) * t1 * points[2][field] + Math.pow(t, 3) * points[3][field];\n }\n function toCubicPolynomial(points, field) {\n return [\n -points[0][field] + 3 * points[1][field] - 3 * points[2][field] + points[3][field],\n 3 * (points[0][field] - 2 * points[1][field] + points[2][field]),\n 3 * (-points[0][field] + points[1][field]),\n points[0][field]\n ];\n }\n var ComplexNumber = Class.extend({\n init: function (real, img) {\n if (real === void 0) {\n real = 0;\n }\n if (img === void 0) {\n img = 0;\n }\n this.real = real;\n this.img = img;\n },\n add: function (cNumber) {\n return new ComplexNumber(round(this.real + cNumber.real, PRECISION), round(this.img + cNumber.img, PRECISION));\n },\n addConstant: function (value) {\n return new ComplexNumber(this.real + value, this.img);\n },\n negate: function () {\n return new ComplexNumber(-this.real, -this.img);\n },\n multiply: function (cNumber) {\n return new ComplexNumber(this.real * cNumber.real - this.img * cNumber.img, this.real * cNumber.img + this.img * cNumber.real);\n },\n multiplyConstant: function (value) {\n return new ComplexNumber(this.real * value, this.img * value);\n },\n nthRoot: function (n) {\n var rad$$1 = Math.atan2(this.img, this.real);\n var r = Math.sqrt(Math.pow(this.img, 2) + Math.pow(this.real, 2));\n var nthR = Math.pow(r, 1 / n);\n return new ComplexNumber(nthR * Math.cos(rad$$1 / n), nthR * Math.sin(rad$$1 / n));\n },\n equals: function (cNumber) {\n return this.real === cNumber.real && this.img === cNumber.img;\n },\n isReal: function () {\n return this.img === 0;\n }\n });\n function numberSign(x) {\n return x < 0 ? -1 : 1;\n }\n function solveQuadraticEquation(a, b, c) {\n var squareRoot = Math.sqrt(Math.pow(b, 2) - 4 * a * c);\n return [\n (-b + squareRoot) / (2 * a),\n (-b - squareRoot) / (2 * a)\n ];\n }\n function solveCubicEquation(a, b, c, d) {\n if (a === 0) {\n return solveQuadraticEquation(b, c, d);\n }\n var p = (3 * a * c - Math.pow(b, 2)) / (3 * Math.pow(a, 2));\n var q = (2 * Math.pow(b, 3) - 9 * a * b * c + 27 * Math.pow(a, 2) * d) / (27 * Math.pow(a, 3));\n var Q = Math.pow(p / 3, 3) + Math.pow(q / 2, 2);\n var i = new ComplexNumber(0, 1);\n var b3a = -b / (3 * a);\n var x1, x2, y1, y2, y3, z1, z2;\n if (Q < 0) {\n x1 = new ComplexNumber(-q / 2, Math.sqrt(-Q)).nthRoot(3);\n x2 = new ComplexNumber(-q / 2, -Math.sqrt(-Q)).nthRoot(3);\n } else {\n x1 = -q / 2 + Math.sqrt(Q);\n x1 = new ComplexNumber(numberSign(x1) * Math.pow(Math.abs(x1), 1 / 3));\n x2 = -q / 2 - Math.sqrt(Q);\n x2 = new ComplexNumber(numberSign(x2) * Math.pow(Math.abs(x2), 1 / 3));\n }\n y1 = x1.add(x2);\n z1 = x1.add(x2).multiplyConstant(-1 / 2);\n z2 = x1.add(x2.negate()).multiplyConstant(Math.sqrt(3) / 2);\n y2 = z1.add(i.multiply(z2));\n y3 = z1.add(i.negate().multiply(z2));\n var result = [];\n if (y1.isReal()) {\n result.push(round(y1.real + b3a, PRECISION));\n }\n if (y2.isReal()) {\n result.push(round(y2.real + b3a, PRECISION));\n }\n if (y3.isReal()) {\n result.push(round(y3.real + b3a, PRECISION));\n }\n return result;\n }\n function hasRootsInRange(points, point, field, rootField, range) {\n var polynomial = toCubicPolynomial(points, rootField);\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point[rootField]);\n var intersection;\n for (var idx = 0; idx < roots.length; idx++) {\n if (0 <= roots[idx] && roots[idx] <= 1) {\n intersection = calculateCurveAt(roots[idx], field, points);\n if (Math.abs(intersection - point[field]) <= range) {\n return true;\n }\n }\n }\n }\n function curveIntersectionsCount(points, point, bbox) {\n var polynomial = toCubicPolynomial(points, 'x');\n var roots = solveCubicEquation(polynomial[0], polynomial[1], polynomial[2], polynomial[3] - point.x);\n var rayIntersection, intersectsRay;\n var count = 0;\n for (var i = 0; i < roots.length; i++) {\n rayIntersection = calculateCurveAt(roots[i], 'y', points);\n intersectsRay = close(rayIntersection, point.y) || rayIntersection > point.y;\n if (intersectsRay && ((roots[i] === 0 || roots[i] === 1) && bbox.bottomRight().x > point.x || 0 < roots[i] && roots[i] < 1)) {\n count++;\n }\n }\n return count;\n }\n function lineIntersectionsCount(a, b, point) {\n var intersects;\n if (a.x !== b.x) {\n var minX = Math.min(a.x, b.x);\n var maxX = Math.max(a.x, b.x);\n var minY = Math.min(a.y, b.y);\n var maxY = Math.max(a.y, b.y);\n var inRange = minX <= point.x && point.x < maxX;\n if (minY === maxY) {\n intersects = point.y <= minY && inRange;\n } else {\n intersects = inRange && (maxY - minY) * ((a.x - b.x) * (a.y - b.y) > 0 ? point.x - minX : maxX - point.x) / (maxX - minX) + minY - point.y >= 0;\n }\n }\n return intersects ? 1 : 0;\n }\n var Segment = Class.extend({\n init: function (anchor, controlIn, controlOut) {\n this.anchor(anchor || new Point());\n this.controlIn(controlIn);\n this.controlOut(controlOut);\n },\n bboxTo: function (toSegment, matrix) {\n var segmentAnchor = this.anchor().transformCopy(matrix);\n var toSegmentAnchor = toSegment.anchor().transformCopy(matrix);\n var rect;\n if (this.controlOut() && toSegment.controlIn()) {\n rect = this._curveBoundingBox(segmentAnchor, this.controlOut().transformCopy(matrix), toSegment.controlIn().transformCopy(matrix), toSegmentAnchor);\n } else {\n rect = this._lineBoundingBox(segmentAnchor, toSegmentAnchor);\n }\n return rect;\n },\n _lineBoundingBox: function (p1, p2) {\n return Rect.fromPoints(p1, p2);\n },\n _curveBoundingBox: function (p1, cp1, cp2, p2) {\n var points = [\n p1,\n cp1,\n cp2,\n p2\n ];\n var extremesX = this._curveExtremesFor(points, 'x');\n var extremesY = this._curveExtremesFor(points, 'y');\n var xLimits = arrayLimits([\n extremesX.min,\n extremesX.max,\n p1.x,\n p2.x\n ]);\n var yLimits = arrayLimits([\n extremesY.min,\n extremesY.max,\n p1.y,\n p2.y\n ]);\n return Rect.fromPoints(new Point(xLimits.min, yLimits.min), new Point(xLimits.max, yLimits.max));\n },\n _curveExtremesFor: function (points, field) {\n var extremes = this._curveExtremes(points[0][field], points[1][field], points[2][field], points[3][field]);\n return {\n min: calculateCurveAt(extremes.min, field, points),\n max: calculateCurveAt(extremes.max, field, points)\n };\n },\n _curveExtremes: function (x1, x2, x3, x4) {\n var a = x1 - 3 * x2 + 3 * x3 - x4;\n var b = -2 * (x1 - 2 * x2 + x3);\n var c = x1 - x2;\n var sqrt = Math.sqrt(b * b - 4 * a * c);\n var t1 = 0;\n var t2 = 1;\n if (a === 0) {\n if (b !== 0) {\n t1 = t2 = -c / b;\n }\n } else if (!isNaN(sqrt)) {\n t1 = (-b + sqrt) / (2 * a);\n t2 = (-b - sqrt) / (2 * a);\n }\n var min = Math.max(Math.min(t1, t2), 0);\n if (min < 0 || min > 1) {\n min = 0;\n }\n var max = Math.min(Math.max(t1, t2), 1);\n if (max > 1 || max < 0) {\n max = 1;\n }\n return {\n min: min,\n max: max\n };\n },\n _intersectionsTo: function (segment, point) {\n var intersectionsCount;\n if (this.controlOut() && segment.controlIn()) {\n intersectionsCount = curveIntersectionsCount([\n this.anchor(),\n this.controlOut(),\n segment.controlIn(),\n segment.anchor()\n ], point, this.bboxTo(segment));\n } else {\n intersectionsCount = lineIntersectionsCount(this.anchor(), segment.anchor(), point);\n }\n return intersectionsCount;\n },\n _isOnCurveTo: function (segment, point, width, endSegment) {\n var bbox = this.bboxTo(segment).expand(width, width);\n if (bbox.containsPoint(point)) {\n var p1 = this.anchor();\n var p2 = this.controlOut();\n var p3 = segment.controlIn();\n var p4 = segment.anchor();\n if (endSegment === 'start' && p1.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p1, p2, point);\n } else if (endSegment === 'end' && p4.distanceTo(point) <= width) {\n return !isOutOfEndPoint(p4, p3, point);\n }\n var points = [\n p1,\n p2,\n p3,\n p4\n ];\n if (hasRootsInRange(points, point, 'x', 'y', width) || hasRootsInRange(points, point, 'y', 'x', width)) {\n return true;\n }\n var rotation = transform().rotate(45, point);\n var rotatedPoints = [\n p1.transformCopy(rotation),\n p2.transformCopy(rotation),\n p3.transformCopy(rotation),\n p4.transformCopy(rotation)\n ];\n return hasRootsInRange(rotatedPoints, point, 'x', 'y', width) || hasRootsInRange(rotatedPoints, point, 'y', 'x', width);\n }\n },\n _isOnLineTo: function (segment, point, width) {\n var p1 = this.anchor();\n var p2 = segment.anchor();\n var angle = deg(Math.atan2(p2.y - p1.y, p2.x - p1.x));\n var rect = new Rect([\n p1.x,\n p1.y - width / 2\n ], [\n p1.distanceTo(p2),\n width\n ]);\n return rect.containsPoint(point.transformCopy(transform().rotate(-angle, p1)));\n },\n _isOnPathTo: function (segment, point, width, endSegment) {\n var isOnPath;\n if (this.controlOut() && segment.controlIn()) {\n isOnPath = this._isOnCurveTo(segment, point, width / 2, endSegment);\n } else {\n isOnPath = this._isOnLineTo(segment, point, width);\n }\n return isOnPath;\n }\n });\n definePointAccessors(Segment.prototype, [\n 'anchor',\n 'controlIn',\n 'controlOut'\n ]);\n ObserversMixin.extend(Segment.prototype);\n function arrayLimits(arr) {\n var length = arr.length;\n var min = MAX_NUM;\n var max = MIN_NUM;\n for (var i = 0; i < length; i++) {\n max = Math.max(max, arr[i]);\n min = Math.min(min, arr[i]);\n }\n return {\n min: min,\n max: max\n };\n }\n 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$2(center, {\n startAngle: startAngle,\n endAngle: endAngle,\n radiusX: radiusX,\n radiusY: radiusY,\n anticlockwise: anticlockwise\n });\n this._addArcSegments(arc);\n }\n return this;\n },\n arcTo: function (end, rx, ry, largeArc, swipe, rotation) {\n if (this.segments.length > 0) {\n var lastSegment = last(this.segments);\n var anchor = lastSegment.anchor();\n var arc = Arc$2.fromPoints(anchor, end, rx, ry, largeArc, swipe, rotation);\n this._addArcSegments(arc);\n }\n return this;\n },\n _addArcSegments: function (arc) {\n var this$1 = this;\n this.suspend();\n var curvePoints = arc.curvePoints();\n for (var i = 1; i < curvePoints.length; i += 3) {\n this$1.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n this.resume();\n this.geometryChange();\n },\n close: function () {\n this.options.closed = true;\n this.geometryChange();\n return this;\n },\n rawBBox: function () {\n return this._bbox();\n },\n _containsPoint: function (point) {\n var segments = this.segments;\n var length = segments.length;\n var intersectionsCount = 0;\n var previous, current;\n for (var idx = 1; idx < length; idx++) {\n previous = segments[idx - 1];\n current = segments[idx];\n intersectionsCount += previous._intersectionsTo(current, point);\n }\n if (this.options.closed || !segments[0].anchor().equals(segments[length - 1].anchor())) {\n intersectionsCount += lineIntersectionsCount(segments[0].anchor(), segments[length - 1].anchor(), point);\n }\n return intersectionsCount % 2 !== 0;\n },\n _isOnPath: function (point, width) {\n var segments = this.segments;\n var length = segments.length;\n var pathWidth = width || this.options.stroke.width;\n if (length > 1) {\n if (segments[0]._isOnPathTo(segments[1], point, pathWidth, 'start')) {\n return true;\n }\n for (var idx = 2; idx <= length - 2; idx++) {\n if (segments[idx - 1]._isOnPathTo(segments[idx], point, pathWidth)) {\n return true;\n }\n }\n if (segments[length - 2]._isOnPathTo(segments[length - 1], point, pathWidth, 'end')) {\n return true;\n }\n }\n return false;\n },\n _bbox: function (matrix) {\n var segments = this.segments;\n var length = segments.length;\n var boundingBox;\n if (length === 1) {\n var anchor = segments[0].anchor().transformCopy(matrix);\n boundingBox = new Rect(anchor, Size.ZERO);\n } else if (length > 0) {\n for (var i = 1; i < length; i++) {\n var segmentBox = segments[i - 1].bboxTo(segments[i], matrix);\n if (boundingBox) {\n boundingBox = Rect.union(boundingBox, segmentBox);\n } else {\n boundingBox = segmentBox;\n }\n }\n }\n return boundingBox;\n }\n });\n Path.fromRect = function (rect, options) {\n return new Path(options).moveTo(rect.topLeft()).lineTo(rect.topRight()).lineTo(rect.bottomRight()).lineTo(rect.bottomLeft()).close();\n };\n Path.fromPoints = function (points, options) {\n if (points) {\n var path = new Path(options);\n for (var i = 0; i < points.length; i++) {\n var point = Point.create(points[i]);\n if (point) {\n if (i === 0) {\n path.moveTo(point);\n } else {\n path.lineTo(point);\n }\n }\n }\n return path;\n }\n };\n Path.fromArc = function (arc, options) {\n var path = new Path(options);\n var startAngle = arc.startAngle;\n var start = arc.pointAt(startAngle);\n path.moveTo(start.x, start.y);\n path.arc(startAngle, arc.endAngle, arc.radiusX, arc.radiusY, arc.anticlockwise);\n return path;\n };\n Path.prototype.nodeType = 'Path';\n Paintable.extend(Path.prototype);\n Measurable.extend(Path.prototype);\n Path.parse = function (str, options) {\n return PathParser.current.parse(str, options);\n };\n var DEFAULT_STROKE$1 = '#000';\n var Arc = Element$1.extend({\n init: function (geometry, options) {\n if (geometry === void 0) {\n geometry = new Arc$2();\n }\n if (options === void 0) {\n options = {};\n }\n Element$1.fn.init.call(this, options);\n this.geometry(geometry);\n if (!defined(this.options.stroke)) {\n this.stroke(DEFAULT_STROKE$1);\n }\n },\n _bbox: function (matrix) {\n return this._geometry.bbox(matrix);\n },\n rawBBox: function () {\n return this.geometry().bbox();\n },\n toPath: function () {\n var path = new Path();\n var curvePoints = this.geometry().curvePoints();\n if (curvePoints.length > 0) {\n path.moveTo(curvePoints[0].x, curvePoints[0].y);\n for (var i = 1; i < curvePoints.length; i += 3) {\n path.curveTo(curvePoints[i], curvePoints[i + 1], curvePoints[i + 2]);\n }\n }\n return path;\n },\n _containsPoint: function (point) {\n return this.geometry().containsPoint(point);\n },\n _isOnPath: function (point) {\n return this.geometry()._isOnPath(point, this.options.stroke.width / 2);\n }\n });\n Arc.prototype.nodeType = 'Arc';\n Paintable.extend(Arc.prototype);\n Measurable.extend(Arc.prototype);\n defineGeometryAccessors(Arc.prototype, ['geometry']);\n 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 ref = elementStyles(element, [\n 'paddingLeft',\n 'paddingTop'\n ]);\n var paddingLeft = ref.paddingLeft;\n var paddingTop = ref.paddingTop;\n var ref$1 = elementOffset(element);\n var left = ref$1.left;\n var top = ref$1.top;\n return {\n left: left + parseInt(paddingLeft, 10),\n top: top + parseInt(paddingTop, 10)\n };\n },\n _surfacePoint: function (e) {\n var offset = this._elementOffset();\n var coord = eventCoordinates(e);\n var x = coord.x - offset.left;\n var y = coord.y - offset.top;\n return new Point(x, y);\n }\n });\n Surface.create = function (element, options) {\n return SurfaceFactory.current.create(element, options);\n };\n Surface.support = {};\n var BaseNode = Class.extend({\n init: function (srcElement) {\n this.childNodes = [];\n this.parent = null;\n if (srcElement) {\n this.srcElement = srcElement;\n this.observe();\n }\n },\n destroy: function () {\n var this$1 = this;\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n var children = this.childNodes;\n for (var i = 0; i < children.length; i++) {\n this$1.childNodes[i].destroy();\n }\n this.parent = null;\n },\n load: function () {\n },\n observe: function () {\n if (this.srcElement) {\n this.srcElement.addObserver(this);\n }\n },\n append: function (node) {\n this.childNodes.push(node);\n node.parent = this;\n },\n insertAt: function (node, pos) {\n this.childNodes.splice(pos, 0, node);\n node.parent = this;\n },\n remove: function (index, count) {\n var this$1 = this;\n var end = index + count;\n for (var i = index; i < end; i++) {\n this$1.childNodes[i].removeSelf();\n }\n this.childNodes.splice(index, count);\n },\n removeSelf: function () {\n this.clear();\n this.destroy();\n },\n clear: function () {\n this.remove(0, this.childNodes.length);\n },\n invalidate: function () {\n if (this.parent) {\n this.parent.invalidate();\n }\n },\n geometryChange: function () {\n this.invalidate();\n },\n optionsChange: function () {\n this.invalidate();\n },\n childrenChange: function (e) {\n if (e.action === 'add') {\n this.load(e.items, e.index);\n } else if (e.action === 'remove') {\n this.remove(e.index, e.items.length);\n }\n this.invalidate();\n }\n });\n function renderAttr(name, value) {\n return defined(value) && value !== null ? ' ' + name + '=\"' + value + '\" ' : '';\n }\n function renderAllAttr(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n output += renderAttr(attrs[i][0], attrs[i][1]);\n }\n return output;\n }\n function renderStyle(attrs) {\n var output = '';\n for (var i = 0; i < attrs.length; i++) {\n var value = attrs[i][1];\n if (defined(value)) {\n output += attrs[i][0] + ':' + value + ';';\n }\n }\n if (output !== '') {\n return output;\n }\n }\n var NODE_MAP = {};\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var NONE = 'none';\n var renderSVG = function (container, svg) {\n container.innerHTML = svg;\n };\n if (typeof document !== 'undefined') {\n var testFragment = '';\n var testContainer = document.createElement('div');\n var hasParser = typeof DOMParser !== 'undefined';\n testContainer.innerHTML = testFragment;\n if (hasParser && testContainer.firstChild.namespaceURI !== SVG_NS) {\n renderSVG = function (container, svg) {\n var parser = new DOMParser();\n var chartDoc = parser.parseFromString(svg, 'text/xml');\n var importedDoc = document.adoptNode(chartDoc.documentElement);\n container.innerHTML = '';\n container.appendChild(importedDoc);\n };\n }\n }\n var renderSVG$1 = renderSVG;\n var TRANSFORM = 'transform';\n var DefinitionMap = {\n clip: 'clip-path',\n fill: 'fill'\n };\n function isDefinition(type, value) {\n return type === 'clip' || type === 'fill' && (!value || value.nodeType === 'Gradient');\n }\n function baseUrl() {\n var base = document.getElementsByTagName('base')[0];\n var href = document.location.href;\n var 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 var geometry = {\n Circle: Circle$2,\n Arc: Arc$2,\n Rect: Rect,\n Point: Point,\n Segment: Segment,\n Matrix: Matrix,\n Size: Size,\n toMatrix: toMatrix,\n Transformation: Transformation,\n transform: transform\n };\n function exportGroup(group) {\n var root = new RootNode({ skipBaseHref: true });\n var bbox = group.clippedBBox();\n var rootGroup = group;\n if (bbox) {\n var origin = bbox.getOrigin();\n var exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n rootGroup = exportRoot;\n }\n root.load([rootGroup]);\n var svg = '' + root.render() + '';\n root.destroy();\n return svg;\n }\n var svg = {\n Surface: Surface$1,\n RootNode: RootNode,\n Node: Node,\n GroupNode: GroupNode,\n ArcNode: ArcNode,\n CircleNode: CircleNode,\n RectNode: RectNode,\n ImageNode: ImageNode,\n TextNode: TextNode,\n PathNode: PathNode,\n MultiPathNode: MultiPathNode,\n DefinitionNode: DefinitionNode,\n ClipNode: ClipNode,\n GradientStopNode: GradientStopNode,\n LinearGradientNode: LinearGradientNode,\n RadialGradientNode: RadialGradientNode,\n exportGroup: exportGroup\n };\n var NODE_MAP$2 = {};\n function renderPath(ctx, path) {\n var segments = path.segments;\n if (segments.length === 0) {\n return;\n }\n var segment = segments[0];\n var anchor = segment.anchor();\n ctx.moveTo(anchor.x, anchor.y);\n for (var i = 1; i < segments.length; i++) {\n segment = segments[i];\n anchor = segment.anchor();\n var prevSeg = segments[i - 1];\n var prevOut = prevSeg.controlOut();\n var controlIn = segment.controlIn();\n if (prevOut && controlIn) {\n ctx.bezierCurveTo(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n ctx.lineTo(anchor.x, anchor.y);\n }\n }\n if (path.options.closed) {\n ctx.closePath();\n }\n }\n var Node$2 = BaseNode.extend({\n init: function (srcElement) {\n BaseNode.fn.init.call(this, srcElement);\n if (srcElement) {\n this.initClip();\n }\n },\n initClip: function () {\n var clip = this.srcElement.clip();\n if (clip) {\n this.clip = clip;\n clip.addObserver(this);\n }\n },\n clear: function () {\n if (this.srcElement) {\n this.srcElement.removeObserver(this);\n }\n this.clearClip();\n BaseNode.fn.clear.call(this);\n },\n clearClip: function () {\n if (this.clip) {\n this.clip.removeObserver(this);\n delete this.clip;\n }\n },\n setClip: function (ctx) {\n if (this.clip) {\n ctx.beginPath();\n renderPath(ctx, this.clip);\n ctx.clip();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'clip') {\n this.clearClip();\n this.initClip();\n }\n BaseNode.fn.optionsChange.call(this, e);\n },\n setTransform: function (ctx) {\n if (this.srcElement) {\n var transform = this.srcElement.transform();\n if (transform) {\n ctx.transform.apply(ctx, transform.matrix().toArray(6));\n }\n }\n },\n loadElements: function (elements, pos, cors) {\n var this$1 = this;\n for (var i = 0; i < elements.length; i++) {\n var srcElement = elements[i];\n var children = srcElement.children;\n var childNode = new NODE_MAP$2[srcElement.nodeType](srcElement, cors);\n if (children && children.length > 0) {\n childNode.load(children, pos, cors);\n }\n if (defined(pos)) {\n this$1.insertAt(childNode, pos);\n } else {\n this$1.append(childNode);\n }\n }\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this.invalidate();\n },\n setOpacity: function (ctx) {\n if (this.srcElement) {\n var opacity = this.srcElement.opacity();\n if (defined(opacity)) {\n this.globalAlpha(ctx, opacity);\n }\n }\n },\n globalAlpha: function (ctx, value) {\n var opactity = value;\n if (opactity && ctx.globalAlpha) {\n opactity *= ctx.globalAlpha;\n }\n ctx.globalAlpha = opactity;\n },\n visible: function () {\n var src = this.srcElement;\n return !src || src && src.options.visible !== false;\n }\n });\n var GroupNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n if (!this.visible()) {\n return;\n }\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n var childNodes = this.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var child = childNodes[i];\n if (child.visible()) {\n child.renderTo(ctx);\n }\n }\n ctx.restore();\n }\n });\n Traversable.extend(GroupNode$2.prototype, 'childNodes');\n NODE_MAP$2.Group = GroupNode$2;\n var FRAME_DELAY = 1000 / 60;\n var RootNode$2 = GroupNode$2.extend({\n init: function (canvas) {\n GroupNode$2.fn.init.call(this);\n this.canvas = canvas;\n this.ctx = canvas.getContext('2d');\n var invalidateHandler = this._invalidate.bind(this);\n this.invalidate = kendo.throttle(function () {\n kendo.animationFrame(invalidateHandler);\n }, FRAME_DELAY);\n },\n destroy: function () {\n GroupNode$2.fn.destroy.call(this);\n this.canvas = null;\n this.ctx = null;\n },\n load: function (elements, pos, cors) {\n this.loadElements(elements, pos, cors);\n this._invalidate();\n },\n _invalidate: function () {\n if (!this.ctx) {\n return;\n }\n this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n this.renderTo(this.ctx);\n }\n });\n Traversable.extend(RootNode$2.prototype, 'childNodes');\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bbox) {\n this.shapes.push({\n bbox: bbox,\n shape: shape\n });\n shape._quadNode = this;\n },\n pointShapes: function (point) {\n var shapes = this.shapes;\n var length = shapes.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].bbox.containsPoint(point)) {\n result.push(shapes[idx].shape);\n }\n }\n return result;\n },\n insert: function (shape, bbox) {\n this._add(shape, bbox);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.origin.x <= rect.origin.x && nodeRect.origin.y <= rect.origin.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n pointShapes: function (point) {\n var children = this.children;\n var length = children.length;\n var result = QuadRoot.fn.pointShapes.call(this, point);\n for (var idx = 0; idx < length; idx++) {\n append(result, children[idx].pointShapes(point));\n }\n return result;\n },\n insert: function (shape, bbox) {\n var children = this.children;\n var inserted = false;\n if (this.inBounds(bbox)) {\n if (this.shapes.length < 4) {\n this._add(shape, bbox);\n } else {\n if (!children.length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bbox)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bbox);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var ref = this;\n var rect = ref.rect;\n var children = ref.children;\n var center = rect.center();\n var halfWidth = rect.width() / 2;\n var halfHeight = rect.height() / 2;\n children.push(new QuadNode(new Rect([\n rect.origin.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n rect.origin.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n rect.origin.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])), new QuadNode(new Rect([\n center.x,\n center.y\n ], [\n halfWidth,\n halfHeight\n ])));\n }\n });\n var ROOT_SIZE = 3000;\n var LEVEL_STEP = 10000;\n var MAX_LEVEL = 75;\n var ShapesQuadTree = Class.extend({\n init: function () {\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n this.rootElements = [];\n },\n clear: function () {\n var this$1 = this;\n var rootElements = this.rootElements;\n for (var idx = 0; idx < rootElements.length; idx++) {\n this$1.remove(rootElements[idx]);\n }\n this.initRoots();\n },\n pointShape: function (point) {\n var sectorRoot = (this.rootMap[Math.floor(point.x / ROOT_SIZE)] || {})[Math.floor(point.y / ROOT_SIZE)];\n var result = this.root.pointShapes(point);\n if (sectorRoot) {\n result = result.concat(sectorRoot.pointShapes(point));\n }\n this.assignZindex(result);\n result.sort(zIndexComparer);\n for (var idx = 0; idx < result.length; idx++) {\n if (result[idx].containsPoint(point)) {\n return result[idx];\n }\n }\n },\n assignZindex: function (elements) {\n var this$1 = this;\n for (var idx = 0; idx < elements.length; idx++) {\n var element = elements[idx];\n var zIndex = 0;\n var levelWeight = Math.pow(LEVEL_STEP, MAX_LEVEL);\n var parents = [];\n while (element) {\n parents.push(element);\n element = element.parent;\n }\n while (parents.length) {\n element = parents.pop();\n zIndex += ((element.parent ? element.parent.children : this$1.rootElements).indexOf(element) + 1) * levelWeight;\n levelWeight /= LEVEL_STEP;\n }\n elements[idx]._zIndex = zIndex;\n }\n },\n optionsChange: function (e) {\n if (e.field === 'transform' || e.field === 'stroke.width') {\n this.bboxChange(e.element);\n }\n },\n geometryChange: function (e) {\n this.bboxChange(e.element);\n },\n bboxChange: function (element) {\n var this$1 = this;\n if (element.nodeType === 'Group') {\n for (var idx = 0; idx < element.children.length; idx++) {\n this$1.bboxChange(element.children[idx]);\n }\n } else {\n if (element._quadNode) {\n element._quadNode.remove(element);\n }\n this._insertShape(element);\n }\n },\n add: function (elements) {\n var elementsArray = Array.isArray(elements) ? elements.slice(0) : [elements];\n append(this.rootElements, elementsArray);\n this._insert(elementsArray);\n },\n childrenChange: function (e) {\n var this$1 = this;\n if (e.action === 'remove') {\n for (var idx = 0; idx < e.items.length; idx++) {\n this$1.remove(e.items[idx]);\n }\n } else {\n this._insert(Array.prototype.slice.call(e.items, 0));\n }\n },\n _insert: function (elements) {\n var this$1 = this;\n var element;\n while (elements.length > 0) {\n element = elements.pop();\n element.addObserver(this$1);\n if (element.nodeType === 'Group') {\n append(elements, element.children);\n } else {\n this$1._insertShape(element);\n }\n }\n },\n _insertShape: function (shape) {\n var bbox = shape.bbox();\n if (bbox) {\n var sectors = this.getSectors(bbox);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bbox);\n } else {\n var rootMap = this.rootMap;\n if (!rootMap[x]) {\n rootMap[x] = {};\n }\n if (!rootMap[x][y]) {\n rootMap[x][y] = new QuadNode(new Rect([\n x * ROOT_SIZE,\n y * ROOT_SIZE\n ], [\n ROOT_SIZE,\n ROOT_SIZE\n ]));\n }\n rootMap[x][y].insert(shape, bbox);\n }\n }\n },\n remove: function (element) {\n var this$1 = this;\n element.removeObserver(this);\n if (element.nodeType === 'Group') {\n var children = element.children;\n for (var idx = 0; idx < children.length; idx++) {\n this$1.remove(children[idx]);\n }\n } else if (element._quadNode) {\n element._quadNode.remove(element);\n delete element._quadNode;\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var bottomRight = rect.bottomRight();\n var bottomX = Math.floor(bottomRight.x / ROOT_SIZE);\n var bottomY = Math.floor(bottomRight.y / ROOT_SIZE);\n var sectors = [\n [],\n []\n ];\n for (var x = Math.floor(rect.origin.x / ROOT_SIZE); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = Math.floor(rect.origin.y / ROOT_SIZE); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n }\n });\n function zIndexComparer(x1, x2) {\n if (x1._zIndex < x2._zIndex) {\n return 1;\n }\n if (x1._zIndex > x2._zIndex) {\n return -1;\n }\n return 0;\n }\n var SurfaceCursor = Class.extend({\n init: function (surface) {\n surface.bind('mouseenter', this._mouseenter.bind(this));\n surface.bind('mouseleave', this._mouseleave.bind(this));\n this.element = surface.element;\n },\n clear: function () {\n this._resetCursor();\n },\n destroy: function () {\n this._resetCursor();\n delete this.element;\n },\n _mouseenter: function (e) {\n var cursor = this._shapeCursor(e);\n if (!cursor) {\n this._resetCursor();\n } else {\n if (!this._current) {\n this._defaultCursor = this._getCursor();\n }\n this._setCursor(cursor);\n }\n },\n _mouseleave: function () {\n this._resetCursor();\n },\n _shapeCursor: function (e) {\n var shape = e.element;\n while (shape && !defined(shape.options.cursor)) {\n shape = shape.parent;\n }\n if (shape) {\n return shape.options.cursor;\n }\n },\n _getCursor: function () {\n if (this.element) {\n return this.element.style.cursor;\n }\n },\n _setCursor: function (cursor) {\n if (this.element) {\n this.element.style.cursor = cursor;\n this._current = cursor;\n }\n },\n _resetCursor: function () {\n if (this._current) {\n this._setCursor(this._defaultCursor || '');\n delete this._current;\n }\n }\n });\n var Surface$3 = Surface.extend({\n init: function (element, options) {\n Surface.fn.init.call(this, element, options);\n this.element.innerHTML = this._template(this);\n var canvas = this.element.firstElementChild;\n var size = elementSize(element);\n canvas.width = size.width;\n canvas.height = size.height;\n this._rootElement = canvas;\n this._root = new RootNode$2(canvas);\n this._mouseTrackHandler = this._trackMouse.bind(this);\n bindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n destroy: function () {\n Surface.fn.destroy.call(this);\n if (this._root) {\n this._root.destroy();\n this._root = null;\n }\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n if (this._cursor) {\n this._cursor.destroy();\n delete this._cursor;\n }\n unbindEvents(this.element, {\n click: this._mouseTrackHandler,\n mousemove: this._mouseTrackHandler\n });\n },\n draw: function (element) {\n Surface.fn.draw.call(this, element);\n this._root.load([element], undefined, this.options.cors);\n if (this._searchTree) {\n this._searchTree.add([element]);\n }\n },\n clear: function () {\n Surface.fn.clear.call(this);\n this._root.clear();\n if (this._searchTree) {\n this._searchTree.clear();\n }\n if (this._cursor) {\n this._cursor.clear();\n }\n },\n eventTarget: function (e) {\n if (this._searchTree) {\n var point = this._surfacePoint(e);\n var shape = this._searchTree.pointShape(point);\n return shape;\n }\n },\n image: function () {\n var ref = this;\n var root = ref._root;\n var rootElement = ref._rootElement;\n var loadingStates = [];\n root.traverse(function (childNode) {\n if (childNode.loading) {\n loadingStates.push(childNode.loading);\n }\n });\n var promise = createPromise();\n var resolveDataURL = function () {\n root._invalidate();\n try {\n var data = rootElement.toDataURL();\n promise.resolve(data);\n } catch (e) {\n promise.reject(e);\n }\n };\n promiseAll(loadingStates).then(resolveDataURL, resolveDataURL);\n return promise;\n },\n suspendTracking: function () {\n Surface.fn.suspendTracking.call(this);\n if (this._searchTree) {\n this._searchTree.clear();\n delete this._searchTree;\n }\n },\n resumeTracking: function () {\n Surface.fn.resumeTracking.call(this);\n if (!this._searchTree) {\n this._searchTree = new ShapesQuadTree();\n var childNodes = this._root.childNodes;\n var rootElements = [];\n for (var idx = 0; idx < childNodes.length; idx++) {\n rootElements.push(childNodes[idx].srcElement);\n }\n this._searchTree.add(rootElements);\n }\n },\n _resize: function () {\n this._rootElement.width = this._size.width;\n this._rootElement.height = this._size.height;\n this._root.invalidate();\n },\n _template: function () {\n return '';\n },\n _enableTracking: function () {\n this._searchTree = new ShapesQuadTree();\n this._cursor = new SurfaceCursor(this);\n Surface.fn._enableTracking.call(this);\n },\n _trackMouse: function (e) {\n if (this._suspendedTracking) {\n return;\n }\n var shape = this.eventTarget(e);\n if (e.type !== 'click') {\n var currentShape = this._currentShape;\n if (currentShape && currentShape !== shape) {\n this.trigger('mouseleave', {\n element: currentShape,\n originalEvent: e,\n type: 'mouseleave'\n });\n }\n if (shape && currentShape !== shape) {\n this.trigger('mouseenter', {\n element: shape,\n originalEvent: e,\n type: 'mouseenter'\n });\n }\n this.trigger('mousemove', {\n element: shape,\n originalEvent: e,\n type: 'mousemove'\n });\n this._currentShape = shape;\n } else if (shape) {\n this.trigger('click', {\n element: shape,\n originalEvent: e,\n type: 'click'\n });\n }\n }\n });\n Surface$3.prototype.type = 'canvas';\n if (typeof document !== 'undefined' && document.createElement('canvas').getContext) {\n Surface.support.canvas = true;\n SurfaceFactory.current.register('canvas', Surface$3, 20);\n }\n function addGradientStops(gradient, stops) {\n for (var idx = 0; idx < stops.length; idx++) {\n var stop = stops[idx];\n var color = kendo.parseColor(stop.color());\n color.a *= stop.opacity();\n gradient.addColorStop(stop.offset(), color.toCssRgba());\n }\n }\n var PathNode$2 = Node$2.extend({\n renderTo: function (ctx) {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n this.renderPoints(ctx, this.srcElement);\n this.setLineDash(ctx);\n this.setLineCap(ctx);\n this.setLineJoin(ctx);\n this.setFill(ctx);\n this.setStroke(ctx);\n ctx.restore();\n },\n setFill: function (ctx) {\n var fill = this.srcElement.options.fill;\n var hasFill = false;\n if (fill) {\n if (fill.nodeType === 'Gradient') {\n this.setGradientFill(ctx, fill);\n hasFill = true;\n } else if (!isTransparent(fill.color)) {\n ctx.fillStyle = fill.color;\n ctx.save();\n this.globalAlpha(ctx, fill.opacity);\n ctx.fill();\n ctx.restore();\n hasFill = true;\n }\n }\n return hasFill;\n },\n setGradientFill: function (ctx, fill) {\n var bbox = this.srcElement.rawBBox();\n var gradient;\n if (fill instanceof LinearGradient) {\n var start = fill.start();\n var end = fill.end();\n gradient = ctx.createLinearGradient(start.x, start.y, end.x, end.y);\n } else if (fill instanceof RadialGradient) {\n var center = fill.center();\n gradient = ctx.createRadialGradient(center.x, center.y, 0, center.x, center.y, fill.radius());\n }\n addGradientStops(gradient, fill.stops);\n ctx.save();\n if (!fill.userSpace()) {\n ctx.transform(bbox.width(), 0, 0, bbox.height(), bbox.origin.x, bbox.origin.y);\n }\n ctx.fillStyle = gradient;\n ctx.fill();\n ctx.restore();\n },\n setStroke: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && !isTransparent(stroke.color) && stroke.width > 0) {\n ctx.strokeStyle = stroke.color;\n ctx.lineWidth = valueOrDefault(stroke.width, 1);\n ctx.save();\n this.globalAlpha(ctx, stroke.opacity);\n ctx.stroke();\n ctx.restore();\n return true;\n }\n },\n dashType: function () {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.dashType) {\n return stroke.dashType.toLowerCase();\n }\n },\n setLineDash: function (ctx) {\n var dashType = this.dashType();\n if (dashType && dashType !== SOLID) {\n var dashArray = DASH_ARRAYS[dashType];\n if (ctx.setLineDash) {\n ctx.setLineDash(dashArray);\n } else {\n ctx.mozDash = dashArray;\n ctx.webkitLineDash = dashArray;\n }\n }\n },\n setLineCap: function (ctx) {\n var dashType = this.dashType();\n var stroke = this.srcElement.options.stroke;\n if (dashType && dashType !== SOLID) {\n ctx.lineCap = BUTT;\n } else if (stroke && stroke.lineCap) {\n ctx.lineCap = stroke.lineCap;\n }\n },\n setLineJoin: function (ctx) {\n var stroke = this.srcElement.options.stroke;\n if (stroke && stroke.lineJoin) {\n ctx.lineJoin = stroke.lineJoin;\n }\n },\n renderPoints: function (ctx, path) {\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Path = PathNode$2;\n var ArcNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var path = this.srcElement.toPath();\n renderPath(ctx, path);\n }\n });\n NODE_MAP$2.Arc = ArcNode$2;\n var CircleNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var center = ref.center;\n var radius = ref.radius;\n ctx.arc(center.x, center.y, radius, 0, Math.PI * 2);\n }\n });\n NODE_MAP$2.Circle = CircleNode$2;\n var RectNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var ref = this.srcElement.geometry();\n var origin = ref.origin;\n var size = ref.size;\n ctx.rect(origin.x, origin.y, size.width, size.height);\n }\n });\n NODE_MAP$2.Rect = RectNode$2;\n var ImageNode$2 = PathNode$2.extend({\n init: function (srcElement, cors) {\n PathNode$2.fn.init.call(this, srcElement);\n this.onLoad = this.onLoad.bind(this);\n this.onError = this.onError.bind(this);\n this.loading = createPromise();\n var img = this.img = new Image();\n if (cors && !/^data:/i.test(srcElement.src())) {\n img.crossOrigin = cors;\n }\n img.src = srcElement.src();\n if (img.complete) {\n this.onLoad();\n } else {\n img.onload = this.onLoad;\n img.onerror = this.onError;\n }\n },\n renderTo: function (ctx) {\n if (this.loading.state() === 'resolved') {\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.drawImage(ctx);\n ctx.restore();\n }\n },\n optionsChange: function (e) {\n if (e.field === 'src') {\n this.loading = createPromise();\n this.img.src = this.srcElement.src();\n } else {\n PathNode$2.fn.optionsChange.call(this, e);\n }\n },\n onLoad: function () {\n this.loading.resolve();\n this.invalidate();\n },\n onError: function () {\n this.loading.reject(new Error('Unable to load image \\'' + this.img.src + '\\'. Check for connectivity and verify CORS headers.'));\n },\n drawImage: function (ctx) {\n var rect = this.srcElement.rect();\n var topLeft = rect.topLeft();\n ctx.drawImage(this.img, topLeft.x, topLeft.y, rect.width(), rect.height());\n }\n });\n NODE_MAP$2.Image = ImageNode$2;\n var TextNode$2 = PathNode$2.extend({\n renderTo: function (ctx) {\n var text = this.srcElement;\n var pos = text.position();\n var size = text.measure();\n ctx.save();\n this.setTransform(ctx);\n this.setClip(ctx);\n this.setOpacity(ctx);\n ctx.beginPath();\n ctx.font = text.options.font;\n ctx.textAlign = 'left';\n if (this.setFill(ctx)) {\n ctx.fillText(text.content(), pos.x, pos.y + size.baseline);\n }\n if (this.setStroke(ctx)) {\n this.setLineDash(ctx);\n ctx.strokeText(text.content(), pos.x, pos.y + size.baseline);\n }\n ctx.restore();\n }\n });\n NODE_MAP$2.Text = TextNode$2;\n var MultiPathNode$2 = PathNode$2.extend({\n renderPoints: function (ctx) {\n var paths = this.srcElement.paths;\n for (var i = 0; i < paths.length; i++) {\n renderPath(ctx, paths[i]);\n }\n }\n });\n NODE_MAP$2.MultiPath = MultiPathNode$2;\n var canvas = {\n Surface: Surface$3,\n RootNode: RootNode$2,\n Node: Node$2,\n GroupNode: GroupNode$2,\n ArcNode: ArcNode$2,\n CircleNode: CircleNode$2,\n RectNode: RectNode$2,\n ImageNode: ImageNode$2,\n TextNode: TextNode$2,\n PathNode: PathNode$2,\n MultiPathNode: MultiPathNode$2\n };\n function exportImage(group, options) {\n var defaults = {\n width: '800px',\n height: '600px',\n cors: 'Anonymous'\n };\n var exportRoot = group;\n var bbox = group.clippedBBox();\n if (bbox) {\n var origin = bbox.getOrigin();\n exportRoot = new Group();\n exportRoot.transform(transform().translate(-origin.x, -origin.y));\n exportRoot.children.push(group);\n var size = bbox.getSize();\n defaults.width = size.width + 'px';\n defaults.height = size.height + 'px';\n }\n var surfaceOptions = $.extend(defaults, options);\n var container = document.createElement('div');\n var style = container.style;\n style.display = 'none';\n style.width = surfaceOptions.width;\n style.height = surfaceOptions.height;\n document.body.appendChild(container);\n var surface = new Surface$3(container, surfaceOptions);\n surface.suspendTracking();\n surface.draw(exportRoot);\n var promise = surface.image();\n var destroy = function () {\n surface.destroy();\n document.body.removeChild(container);\n };\n promise.then(destroy, destroy);\n return promise;\n }\n function exportSVG(group, options) {\n var svg = exportGroup(group);\n if (!options || !options.raw) {\n svg = 'data:image/svg+xml;base64,' + encodeBase64(svg);\n }\n return createPromise().resolve(svg);\n }\n var browser = supportBrowser;\n function slice$1(thing) {\n return Array.prototype.slice.call(thing);\n }\n var KENDO_PSEUDO_ELEMENT = 'KENDO-PSEUDO-ELEMENT';\n var IMAGE_CACHE = {};\n var nodeInfo = {};\n nodeInfo._root = nodeInfo;\n var 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 clone.value = el.value;\n clone.checked = el.checked;\n clone.selected = el.selected;\n }\n for (i = el.firstChild; i; i = i.nextSibling) {\n clone.appendChild(cloneNodes(i));\n }\n }\n return clone;\n };\n } else {\n return function cloneNodes(el) {\n var clone = function dive(node) {\n var clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n for (var i = node.firstChild; i; i = i.nextSibling) {\n clone.appendChild(dive(i));\n }\n return clone;\n }(el);\n var canvases = el.querySelectorAll('canvas');\n if (canvases.length) {\n slice$1(clone.querySelectorAll('canvas')).forEach(function (canvas$$1, i) {\n canvas$$1.getContext('2d').drawImage(canvases[i], 0, 0);\n });\n }\n var orig = el.querySelectorAll('input, select, textarea, option');\n slice$1(clone.querySelectorAll('input, select, textarea, option')).forEach(function (el, i) {\n el.removeAttribute('id');\n el.removeAttribute('name');\n el.value = orig[i].value;\n el.checked = orig[i].checked;\n el.selected = orig[i].selected;\n });\n return clone;\n };\n }\n }(typeof window !== 'undefined' && window.kendo && window.kendo.jQuery);\n function getXY(thing) {\n if (typeof thing == 'number') {\n return {\n x: thing,\n y: thing\n };\n }\n if (Array.isArray(thing)) {\n return {\n x: thing[0],\n y: thing[1]\n };\n }\n return {\n x: thing.x,\n y: thing.y\n };\n }\n function drawDOM(element, options) {\n if (!options) {\n options = {};\n }\n var promise = createPromise();\n if (!element) {\n return promise.reject('No element to export');\n }\n if (typeof window.getComputedStyle != 'function') {\n throw new Error('window.getComputedStyle is missing. You are using an unsupported browser, or running in IE8 compatibility mode. Drawing HTML is supported in Chrome, Firefox, Safari and IE9+.');\n }\n kendo.pdf.defineFont(getFontFaces(element.ownerDocument));\n var scale = getXY(options.scale || 1);\n function doOne(element) {\n var group = new Group();\n var pos = element.getBoundingClientRect();\n setTransform(group, [\n scale.x,\n 0,\n 0,\n scale.y,\n -pos.left * scale.x,\n -pos.top * scale.y\n ]);\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n if (options.avoidLinks === true) {\n nodeInfo._avoidLinks = 'a';\n } else {\n nodeInfo._avoidLinks = options.avoidLinks;\n }\n addClass(element, 'k-pdf-export');\n renderElement(element, group);\n removeClass(element, 'k-pdf-export');\n return group;\n }\n cacheImages(element, function () {\n var forceBreak = options && options.forcePageBreak;\n var hasPaperSize = options && options.paperSize && options.paperSize != 'auto';\n var paperOptions = kendo.pdf.getPaperOptions(function (key, def) {\n if (key == 'paperSize') {\n return hasPaperSize ? options[key] : 'A4';\n }\n return key in options ? options[key] : def;\n });\n var pageWidth = hasPaperSize && paperOptions.paperSize[0];\n var pageHeight = hasPaperSize && paperOptions.paperSize[1];\n var margin = options.margin && paperOptions.margin;\n var hasMargin = Boolean(margin);\n if (forceBreak || pageHeight) {\n if (!margin) {\n margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n }\n if (pageWidth) {\n pageWidth /= scale.x;\n }\n if (pageHeight) {\n pageHeight /= scale.y;\n }\n margin.left /= scale.x;\n margin.right /= scale.x;\n margin.top /= scale.y;\n margin.bottom /= scale.y;\n var group = new Group({\n pdf: {\n multiPage: true,\n paperSize: hasPaperSize ? paperOptions.paperSize : 'auto',\n _ignoreMargin: hasMargin\n }\n });\n handlePageBreaks(function (x) {\n if (options.progress) {\n var canceled = false, pageNum = 0;\n (function next() {\n if (pageNum < x.pages.length) {\n var page = doOne(x.pages[pageNum]);\n group.append(page);\n options.progress({\n page: page,\n pageNum: ++pageNum,\n totalPages: x.pages.length,\n cancel: function () {\n canceled = true;\n }\n });\n if (!canceled) {\n setTimeout(next);\n } else {\n x.container.parentNode.removeChild(x.container);\n }\n } else {\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }());\n } else {\n x.pages.forEach(function (page) {\n group.append(doOne(page));\n });\n x.container.parentNode.removeChild(x.container);\n promise.resolve(group);\n }\n }, element, forceBreak, pageWidth ? pageWidth - margin.left - margin.right : null, pageHeight ? pageHeight - margin.top - margin.bottom : null, margin, options);\n } else {\n promise.resolve(doOne(element));\n }\n });\n function makeTemplate(template$$1) {\n if (template$$1 != null) {\n if (typeof template$$1 == 'string') {\n template$$1 = kendo.template(template$$1.replace(/^\\s+|\\s+$/g, ''));\n }\n if (typeof template$$1 == 'function') {\n return function (data) {\n var el = template$$1(data);\n if (el && typeof el == 'string') {\n var div = document.createElement('div');\n div.innerHTML = el;\n el = div.firstElementChild;\n }\n return el;\n };\n }\n return function () {\n return template$$1.cloneNode(true);\n };\n }\n }\n function handlePageBreaks(callback, element, forceBreak, pageWidth, pageHeight, margin, options) {\n var template$$1 = makeTemplate(options.template);\n var doc = element.ownerDocument;\n var pages = [];\n var copy = options._destructive ? element : cloneNodes(element);\n var container = doc.createElement('KENDO-PDF-DOCUMENT');\n var adjust = 0;\n slice$1(copy.querySelectorAll('tfoot')).forEach(function (tfoot) {\n tfoot.parentNode.appendChild(tfoot);\n });\n slice$1(copy.querySelectorAll('ol')).forEach(function (ol) {\n slice$1(ol.children).forEach(function (li, index) {\n li.setAttribute('kendo-split-index', index);\n });\n });\n setCSS(container, {\n display: 'block',\n position: 'absolute',\n boxSizing: 'content-box',\n left: '-10000px',\n top: '-10000px'\n });\n if (pageWidth) {\n setCSS(container, {\n width: pageWidth + 'px',\n paddingLeft: margin.left + 'px',\n paddingRight: margin.right + 'px'\n });\n setCSS(copy, { overflow: 'hidden' });\n }\n element.parentNode.insertBefore(container, element);\n container.appendChild(copy);\n if (options.beforePageBreak) {\n setTimeout(function () {\n options.beforePageBreak(container, doPageBreak);\n }, 15);\n } else {\n setTimeout(doPageBreak, 15);\n }\n function doPageBreak() {\n if (forceBreak != '-' || pageHeight) {\n splitElement(copy);\n }\n {\n var page = makePage();\n copy.parentNode.insertBefore(page, copy);\n page.appendChild(copy);\n }\n if (template$$1) {\n pages.forEach(function (page, i) {\n var el = template$$1({\n element: page,\n pageNum: i + 1,\n totalPages: pages.length\n });\n if (el) {\n page.appendChild(el);\n }\n });\n }\n cacheImages(pages, function () {\n whenImagesAreActuallyLoaded(pages, function () {\n callback({\n pages: pages,\n container: container\n });\n });\n });\n }\n function keepTogether(el) {\n if (options.keepTogether && matches(el, options.keepTogether) && el.offsetHeight <= pageHeight - adjust) {\n return true;\n }\n var tag = el.tagName;\n if (/^h[1-6]$/i.test(tag) && el.offsetHeight >= pageHeight - adjust) {\n return false;\n }\n return el.getAttribute('data-kendo-chart') || /^(?:img|tr|thead|th|tfoot|iframe|svg|object|canvas|input|textarea|select|video|h[1-6])/i.test(el.tagName);\n }\n function splitElement(element) {\n if (element.tagName == 'TABLE') {\n setCSS(element, { tableLayout: 'fixed' });\n }\n if (keepTogether(element)) {\n return;\n }\n var style = getComputedStyle(element);\n var bottomPadding = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var bottomBorder = parseFloat(getPropertyValue(style, 'border-bottom-width'));\n var saveAdjust = adjust;\n adjust += bottomPadding + bottomBorder;\n var isFirst = true;\n for (var el = element.firstChild; el; el = el.nextSibling) {\n if (el.nodeType == 1) {\n isFirst = false;\n if (matches(el, forceBreak)) {\n breakAtElement(el);\n continue;\n }\n if (!pageHeight) {\n splitElement(el);\n continue;\n }\n if (!/^(?:static|relative)$/.test(getPropertyValue(getComputedStyle(el), 'position'))) {\n continue;\n }\n var fall = fallsOnMargin(el);\n if (fall == 1) {\n breakAtElement(el);\n } else if (fall) {\n if (keepTogether(el)) {\n breakAtElement(el);\n } else {\n splitElement(el);\n }\n } else {\n splitElement(el);\n }\n } else if (el.nodeType == 3 && pageHeight) {\n splitText(el, isFirst);\n isFirst = false;\n }\n }\n adjust = saveAdjust;\n }\n function firstInParent(el) {\n var p = el.parentNode, first = p.firstChild;\n if (el === first) {\n return true;\n }\n if (el === p.children[0]) {\n if (first.nodeType == 7 || first.nodeType == 8) {\n return true;\n }\n if (first.nodeType == 3) {\n return !/\\S/.test(first.data);\n }\n }\n return false;\n }\n function breakAtElement(el) {\n if (el.nodeType == 1 && el !== copy && firstInParent(el)) {\n return breakAtElement(el.parentNode);\n }\n var table, colgroup, thead, grid, gridHead;\n table = closest(el, 'table');\n colgroup = table && table.querySelector('colgroup');\n if (options.repeatHeaders) {\n thead = table && table.querySelector('thead');\n grid = closest(el, '.k-grid.k-widget');\n if (grid && grid.querySelector('.k-auto-scrollable')) {\n gridHead = grid.querySelector('.k-grid-header');\n }\n }\n var page = makePage();\n var range = doc.createRange();\n range.setStartBefore(copy);\n range.setEndBefore(el);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(el.parentNode);\n if (table) {\n table = closest(el, 'table');\n if (options.repeatHeaders && thead) {\n table.insertBefore(thead.cloneNode(true), table.firstChild);\n }\n if (colgroup) {\n table.insertBefore(colgroup.cloneNode(true), table.firstChild);\n }\n }\n if (options.repeatHeaders && gridHead) {\n grid = closest(el, '.k-grid.k-widget');\n grid.insertBefore(gridHead.cloneNode(true), grid.firstChild);\n }\n }\n function makePage() {\n var page = doc.createElement('KENDO-PDF-PAGE');\n setCSS(page, {\n display: 'block',\n boxSizing: 'content-box',\n width: pageWidth ? pageWidth + 'px' : 'auto',\n padding: margin.top + 'px ' + margin.right + 'px ' + margin.bottom + 'px ' + margin.left + 'px',\n position: 'relative',\n height: pageHeight ? pageHeight + 'px' : 'auto',\n overflow: pageHeight || pageWidth ? 'hidden' : 'visible',\n clear: 'both'\n });\n if (options && options.pageClassName) {\n page.className = options.pageClassName;\n }\n pages.push(page);\n return page;\n }\n function fallsOnMargin(thing) {\n var box = thing.getBoundingClientRect();\n if (box.width === 0 || box.height === 0) {\n return 0;\n }\n var top = copy.getBoundingClientRect().top;\n var available = pageHeight - adjust;\n return box.height > available ? 3 : box.top - top > available ? 1 : box.bottom - top > available ? 2 : 0;\n }\n function splitText(node, isFirst) {\n if (!/\\S/.test(node.data)) {\n return;\n }\n var len = node.data.length;\n var range = doc.createRange();\n range.selectNodeContents(node);\n var fall = fallsOnMargin(range);\n if (!fall) {\n return;\n }\n var nextnode = node;\n if (fall == 1) {\n if (isFirst) {\n breakAtElement(node.parentNode);\n } else {\n breakAtElement(node);\n }\n } else {\n (function findEOP(min, pos, max) {\n range.setEnd(node, pos);\n if (min == pos || pos == max) {\n return pos;\n }\n if (fallsOnMargin(range)) {\n return findEOP(min, min + pos >> 1, pos);\n } else {\n return findEOP(pos, pos + max >> 1, max);\n }\n }(0, len >> 1, len));\n if (!/\\S/.test(range.toString()) && isFirst) {\n breakAtElement(node.parentNode);\n } else {\n nextnode = node.splitText(range.endOffset);\n var page = makePage();\n range.setStartBefore(copy);\n page.appendChild(range.extractContents());\n copy.parentNode.insertBefore(page, copy);\n preventBulletOnListItem(nextnode.parentNode);\n }\n }\n splitText(nextnode);\n }\n function preventBulletOnListItem(el) {\n var li = closest(el, 'li');\n if (li) {\n li.setAttribute('kendo-no-bullet', '1');\n preventBulletOnListItem(li.parentNode);\n }\n }\n }\n return promise;\n }\n drawDOM.getFontFaces = getFontFaces;\n drawDOM.drawText = function (element) {\n var group = new Group();\n nodeInfo._clipbox = false;\n nodeInfo._matrix = Matrix.unit();\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n pushNodeInfo(element, getComputedStyle(element), group);\n if (element.firstChild.nodeType == 3) {\n renderText(element, element.firstChild, group);\n } else {\n _renderElement(element, group);\n }\n popNodeInfo();\n return group;\n };\n var parseBackgroundImage = function () {\n var tok_linear_gradient = /^((-webkit-|-moz-|-o-|-ms-)?linear-gradient\\s*)\\(/;\n var tok_percent = /^([-0-9.]+%)/;\n var tok_length = /^([-0-9.]+px)/;\n var tok_keyword = /^(left|right|top|bottom|to|center)\\W/;\n var tok_angle = /^([-0-9.]+(deg|grad|rad|turn))/;\n var tok_whitespace = /^(\\s+)/;\n var tok_popen = /^(\\()/;\n var tok_pclose = /^(\\))/;\n var tok_comma = /^(,)/;\n var tok_url = /^(url)\\(/;\n var tok_content = /^(.*?)\\)/;\n var cache1 = {}, cache2 = {};\n function parse(input) {\n var orig = input;\n if (hasOwnProperty(cache1, orig)) {\n return cache1[orig];\n }\n function skip_ws() {\n var m = tok_whitespace.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n }\n }\n function read(token) {\n skip_ws();\n var m = token.exec(input);\n if (m) {\n input = input.substr(m[1].length);\n return m[1];\n }\n }\n function read_stop() {\n var color = kendo.parseColor(input, true);\n var length, percent;\n if (color) {\n var match = /^#[0-9a-f]+/i.exec(input) || /^rgba?\\(.*?\\)/i.exec(input) || /^..*?\\b/.exec(input);\n input = input.substr(match[0].length);\n color = color.toRGB();\n if (!(length = read(tok_length))) {\n percent = read(tok_percent);\n }\n return {\n color: color,\n length: length,\n percent: percent\n };\n }\n }\n function read_linear_gradient(propName) {\n var angle;\n var to1, to2;\n var stops = [];\n var reverse = false;\n if (read(tok_popen)) {\n angle = read(tok_angle);\n if (angle) {\n angle = parseAngle(angle);\n read(tok_comma);\n } else {\n to1 = read(tok_keyword);\n if (to1 == 'to') {\n to1 = read(tok_keyword);\n } else if (to1 && /^-/.test(propName)) {\n reverse = true;\n }\n to2 = read(tok_keyword);\n read(tok_comma);\n }\n if (/-moz-/.test(propName) && angle == null && to1 == null) {\n var x = read(tok_percent), y = read(tok_percent);\n reverse = true;\n if (x == '0%') {\n to1 = 'left';\n } else if (x == '100%') {\n to1 = 'right';\n }\n if (y == '0%') {\n to2 = 'top';\n } else if (y == '100%') {\n to2 = 'bottom';\n }\n read(tok_comma);\n }\n while (input && !read(tok_pclose)) {\n var stop = read_stop();\n if (!stop) {\n break;\n }\n stops.push(stop);\n read(tok_comma);\n }\n return {\n type: 'linear',\n angle: angle,\n to: to1 && to2 ? to1 + ' ' + to2 : to1 ? to1 : to2 ? to2 : null,\n stops: stops,\n reverse: reverse\n };\n }\n }\n function read_url() {\n if (read(tok_popen)) {\n var url = read(tok_content);\n url = url.replace(/^['\"]+|[\"']+$/g, '');\n read(tok_pclose);\n return {\n type: 'url',\n url: url\n };\n }\n }\n var tok;\n if (tok = read(tok_linear_gradient)) {\n tok = read_linear_gradient(tok);\n } else if (tok = read(tok_url)) {\n tok = read_url();\n }\n return cache1[orig] = tok || { type: 'none' };\n }\n return function (input) {\n if (hasOwnProperty(cache2, input)) {\n return cache2[input];\n }\n return cache2[input] = splitProperty(input).map(parse);\n };\n }();\n var splitProperty = function () {\n var cache = {};\n return function (input, separator) {\n if (!separator) {\n separator = /^\\s*,\\s*/;\n }\n var cacheKey = input + separator;\n if (hasOwnProperty(cache, cacheKey)) {\n return cache[cacheKey];\n }\n var ret = [];\n var last$$1 = 0, pos = 0;\n var in_paren = 0;\n var in_string = false;\n var m;\n function looking_at(rx) {\n return m = rx.exec(input.substr(pos));\n }\n function trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n }\n while (pos < input.length) {\n if (!in_string && looking_at(/^[\\(\\[\\{]/)) {\n in_paren++;\n pos++;\n } else if (!in_string && looking_at(/^[\\)\\]\\}]/)) {\n in_paren--;\n pos++;\n } else if (!in_string && looking_at(/^[\\\"\\']/)) {\n in_string = m[0];\n pos++;\n } else if (in_string == '\\'' && looking_at(/^\\\\\\'/)) {\n pos += 2;\n } else if (in_string == '\"' && looking_at(/^\\\\\\\"/)) {\n pos += 2;\n } else if (in_string == '\\'' && looking_at(/^\\'/)) {\n in_string = false;\n pos++;\n } else if (in_string == '\"' && looking_at(/^\\\"/)) {\n in_string = false;\n pos++;\n } else if (looking_at(separator)) {\n if (!in_string && !in_paren && pos > last$$1) {\n ret.push(trim(input.substring(last$$1, pos)));\n last$$1 = pos + m[0].length;\n }\n pos += m[0].length;\n } else {\n pos++;\n }\n }\n if (last$$1 < pos) {\n ret.push(trim(input.substring(last$$1, pos)));\n }\n return cache[cacheKey] = ret;\n };\n }();\n var getFontURL = function (cache) {\n return function (el) {\n var url = cache[el];\n if (!url) {\n var m;\n if (m = /url\\((['\"]?)([^'\")]*?)\\1\\)\\s+format\\((['\"]?)truetype\\3\\)/.exec(el)) {\n url = cache[el] = m[2];\n } else if (m = /url\\((['\"]?)([^'\")]*?\\.ttf)\\1\\)/.exec(el)) {\n url = cache[el] = m[2];\n }\n }\n return url;\n };\n }(Object.create ? Object.create(null) : {});\n var getFontHeight = function (cache) {\n return function (font) {\n var height = cache[font];\n if (height == null) {\n height = cache[font] = kendoUtil.measureText('Mapq', { font: font }).height;\n }\n return height;\n };\n }(Object.create ? Object.create(null) : {});\n function getFontFaces(doc) {\n if (doc == null) {\n doc = document;\n }\n var result = {};\n for (var i = 0; i < doc.styleSheets.length; ++i) {\n doStylesheet(doc.styleSheets[i]);\n }\n return result;\n function doStylesheet(ss) {\n if (ss) {\n var rules = null;\n try {\n rules = ss.cssRules;\n } catch (ex) {\n }\n if (rules) {\n addRules(ss, rules);\n }\n }\n }\n function findFonts(rule) {\n var src = getPropertyValue(rule.style, 'src');\n if (src) {\n return splitProperty(src).reduce(function (a, el) {\n var font = getFontURL(el);\n if (font) {\n a.push(font);\n }\n return a;\n }, []);\n } else {\n var font = getFontURL(rule.cssText);\n return font ? [font] : [];\n }\n }\n function addRules(styleSheet, rules) {\n for (var i = 0; i < rules.length; ++i) {\n var r = rules[i];\n switch (r.type) {\n case 3:\n doStylesheet(r.styleSheet);\n break;\n case 5:\n var style = r.style;\n var family = splitProperty(getPropertyValue(style, 'font-family'));\n var bold = /^([56789]00|bold)$/i.test(getPropertyValue(style, 'font-weight'));\n var italic = 'italic' == getPropertyValue(style, 'font-style');\n var src = findFonts(r);\n if (src.length > 0) {\n addRule(styleSheet, family, bold, italic, src[0]);\n }\n }\n }\n }\n function addRule(styleSheet, names, bold, italic, url) {\n if (!/^data:/i.test(url)) {\n if (!(/^[^\\/:]+:\\/\\//.test(url) || /^\\//.test(url))) {\n url = String(styleSheet.href).replace(/[^\\/]*$/, '') + url;\n }\n }\n names.forEach(function (name) {\n name = name.replace(/^(['\"]?)(.*?)\\1$/, '$2');\n if (bold) {\n name += '|bold';\n }\n if (italic) {\n name += '|italic';\n }\n result[name] = url;\n });\n }\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function getCounter(name) {\n name = '_counter_' + name;\n return nodeInfo[name];\n }\n function getAllCounters(name) {\n var values = [], p = nodeInfo;\n name = '_counter_' + name;\n while (p) {\n if (hasOwnProperty(p, name)) {\n values.push(p[name]);\n }\n p = Object.getPrototypeOf(p);\n }\n return values.reverse();\n }\n function incCounter(name, inc) {\n var p = nodeInfo;\n name = '_counter_' + name;\n while (p && !hasOwnProperty(p, name)) {\n p = Object.getPrototypeOf(p);\n }\n if (!p) {\n p = nodeInfo._root;\n }\n p[name] = (p[name] || 0) + (inc == null ? 1 : inc);\n }\n function resetCounter(name, val) {\n name = '_counter_' + name;\n nodeInfo[name] = val == null ? 0 : val;\n }\n function doCounters(a, f, def) {\n for (var i = 0; i < a.length;) {\n var name = a[i++];\n var val = parseFloat(a[i]);\n if (isNaN(val)) {\n f(name, def);\n } else {\n f(name, val);\n ++i;\n }\n }\n }\n function updateCounters(style) {\n var counterReset = getPropertyValue(style, 'counter-reset');\n if (counterReset) {\n doCounters(splitProperty(counterReset, /^\\s+/), resetCounter, 0);\n }\n var counterIncrement = getPropertyValue(style, 'counter-increment');\n if (counterIncrement) {\n doCounters(splitProperty(counterIncrement, /^\\s+/), incCounter, 1);\n }\n }\n function parseColor$1(str, css) {\n var color = kendo.parseColor(str, true);\n if (color) {\n color = color.toRGB();\n if (css) {\n color = color.toCssRgba();\n } else if (color.a === 0) {\n color = null;\n }\n }\n return color;\n }\n function whenImagesAreActuallyLoaded(elements, callback) {\n var pending = 0;\n elements.forEach(function (el) {\n var images = el.querySelectorAll('img');\n for (var i = 0; i < images.length; ++i) {\n var img = images[i];\n if (!img.complete) {\n pending++;\n img.onload = img.onerror = next;\n }\n }\n });\n if (!pending) {\n next();\n }\n function next() {\n if (--pending <= 0) {\n callback();\n }\n }\n }\n function cacheImages(element, callback) {\n var urls = [];\n function add(url) {\n if (!IMAGE_CACHE[url]) {\n IMAGE_CACHE[url] = true;\n urls.push(url);\n }\n }\n function dive(element) {\n if (/^img$/i.test(element.tagName)) {\n add(element.src);\n }\n parseBackgroundImage(getPropertyValue(getComputedStyle(element), 'background-image')).forEach(function (bg) {\n if (bg.type == 'url') {\n add(bg.url);\n }\n });\n if (element.children) {\n slice$1(element.children).forEach(dive);\n }\n }\n if (Array.isArray(element)) {\n element.forEach(dive);\n } else {\n dive(element);\n }\n var count = urls.length;\n function next() {\n if (--count <= 0) {\n callback();\n }\n }\n if (count === 0) {\n next();\n }\n urls.forEach(function (url) {\n var img = IMAGE_CACHE[url] = new window.Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n img.src = url;\n if (img.complete) {\n next();\n } else {\n img.onload = next;\n img.onerror = function () {\n IMAGE_CACHE[url] = null;\n next();\n };\n }\n });\n }\n function alphaNumeral(n) {\n var result = '';\n do {\n var r = n % 26;\n result = String.fromCharCode(97 + r) + result;\n n = Math.floor(n / 26);\n } while (n > 0);\n return result;\n }\n function pushNodeInfo(element, style, group) {\n nodeInfo = Object.create(nodeInfo);\n nodeInfo[element.tagName.toLowerCase()] = {\n element: element,\n style: style\n };\n var decoration = getPropertyValue(style, 'text-decoration');\n if (decoration && decoration != 'none') {\n var color = getPropertyValue(style, 'color');\n decoration.split(/\\s+/g).forEach(function (name) {\n if (!nodeInfo[name]) {\n nodeInfo[name] = color;\n }\n });\n }\n if (createsStackingContext(style)) {\n nodeInfo._stackingContext = {\n element: element,\n group: group\n };\n }\n }\n function popNodeInfo() {\n nodeInfo = Object.getPrototypeOf(nodeInfo);\n }\n function updateClipbox(path) {\n if (nodeInfo._clipbox != null) {\n var box = path.bbox(nodeInfo._matrix);\n if (nodeInfo._clipbox) {\n nodeInfo._clipbox = Rect.intersect(nodeInfo._clipbox, box);\n } else {\n nodeInfo._clipbox = box;\n }\n }\n }\n function emptyClipbox() {\n var cb = nodeInfo._clipbox;\n if (cb == null) {\n return true;\n }\n if (cb) {\n return cb.width() === 0 || cb.height() === 0;\n }\n }\n function createsStackingContext(style) {\n function prop(name) {\n return getPropertyValue(style, name);\n }\n if (prop('transform') != 'none' || prop('position') != 'static' || prop('z-index') != 'auto' || prop('opacity') < 1) {\n return true;\n }\n }\n function getComputedStyle(element, pseudoElt) {\n return window.getComputedStyle(element, pseudoElt || null);\n }\n function getPropertyValue(style, prop, defa) {\n var val = style.getPropertyValue(prop);\n if (val == null || val === '') {\n if (browser.webkit) {\n val = style.getPropertyValue('-webkit-' + prop);\n } else if (browser.mozilla) {\n val = style.getPropertyValue('-moz-' + prop);\n } else if (browser.opera) {\n val = style.getPropertyValue('-o-' + prop);\n } else if (microsoft) {\n val = style.getPropertyValue('-ms-' + prop);\n }\n }\n if (arguments.length > 2 && (val == null || val === '')) {\n return defa;\n } else {\n return val;\n }\n }\n function pleaseSetPropertyValue(style, prop, value, important) {\n style.setProperty(prop, value, important);\n if (browser.webkit) {\n style.setProperty('-webkit-' + prop, value, important);\n } else if (browser.mozilla) {\n style.setProperty('-moz-' + prop, value, important);\n } else if (browser.opera) {\n style.setProperty('-o-' + prop, value, important);\n } else if (microsoft) {\n style.setProperty('-ms-' + prop, value, important);\n prop = 'ms' + prop.replace(/(^|-)([a-z])/g, function (s, p1, p2) {\n return p1 + p2.toUpperCase();\n });\n style[prop] = value;\n }\n }\n function getBorder(style, side) {\n side = 'border-' + side;\n return {\n width: parseFloat(getPropertyValue(style, side + '-width')),\n style: getPropertyValue(style, side + '-style'),\n color: parseColor$1(getPropertyValue(style, side + '-color'), true)\n };\n }\n function saveStyle(element, func) {\n var prev = element.style.cssText;\n var result = func();\n element.style.cssText = prev;\n return result;\n }\n function getBorderRadius(style, side) {\n var r = getPropertyValue(style, 'border-' + side + '-radius').split(/\\s+/g).map(parseFloat);\n if (r.length == 1) {\n r.push(r[0]);\n }\n return sanitizeRadius({\n x: r[0],\n y: r[1]\n });\n }\n function getContentBox(element) {\n var box = element.getBoundingClientRect();\n box = innerBox(box, 'border-*-width', element);\n box = innerBox(box, 'padding-*', element);\n return box;\n }\n function innerBox(box, prop, element) {\n var style, wt, wr, wb, wl;\n if (typeof prop == 'string') {\n style = getComputedStyle(element);\n wt = parseFloat(getPropertyValue(style, prop.replace('*', 'top')));\n wr = parseFloat(getPropertyValue(style, prop.replace('*', 'right')));\n wb = parseFloat(getPropertyValue(style, prop.replace('*', 'bottom')));\n wl = parseFloat(getPropertyValue(style, prop.replace('*', 'left')));\n } else if (typeof prop == 'number') {\n wt = wr = wb = wl = prop;\n }\n return {\n top: box.top + wt,\n right: box.right - wr,\n bottom: box.bottom - wb,\n left: box.left + wl,\n width: box.right - box.left - wr - wl,\n height: box.bottom - box.top - wb - wt\n };\n }\n function getTransform(style) {\n var transform$$1 = getPropertyValue(style, 'transform');\n if (transform$$1 == 'none') {\n return null;\n }\n var matrix = /^\\s*matrix\\(\\s*(.*?)\\s*\\)\\s*$/.exec(transform$$1);\n if (matrix) {\n var origin = getPropertyValue(style, 'transform-origin');\n matrix = matrix[1].split(/\\s*,\\s*/g).map(parseFloat);\n origin = origin.split(/\\s+/g).map(parseFloat);\n return {\n matrix: matrix,\n origin: origin\n };\n }\n }\n function radiansToDegrees(radians) {\n return 180 * radians / Math.PI % 360;\n }\n function parseAngle(angle) {\n var num = parseFloat(angle);\n if (/grad$/.test(angle)) {\n return Math.PI * num / 200;\n } else if (/rad$/.test(angle)) {\n return num;\n } else if (/turn$/.test(angle)) {\n return Math.PI * num * 2;\n } else if (/deg$/.test(angle)) {\n return Math.PI * num / 180;\n }\n }\n function setTransform(shape, m) {\n m = new Matrix(m[0], m[1], m[2], m[3], m[4], m[5]);\n shape.transform(m);\n return m;\n }\n function setClipping(shape, clipPath) {\n shape.clip(clipPath);\n }\n function addArcToPath(path, x, y, options) {\n var points = new Arc$2([\n x,\n y\n ], options).curvePoints(), i = 1;\n while (i < points.length) {\n path.curveTo(points[i++], points[i++], points[i++]);\n }\n }\n function sanitizeRadius(r) {\n if (r.x <= 0 || r.y <= 0) {\n r.x = r.y = 0;\n }\n return r;\n }\n function adjustBorderRadiusForBox(box, rTL, rTR, rBR, rBL) {\n var tl_x = Math.max(0, rTL.x), tl_y = Math.max(0, rTL.y);\n var tr_x = Math.max(0, rTR.x), tr_y = Math.max(0, rTR.y);\n var br_x = Math.max(0, rBR.x), br_y = Math.max(0, rBR.y);\n var bl_x = Math.max(0, rBL.x), bl_y = Math.max(0, rBL.y);\n var f = Math.min(box.width / (tl_x + tr_x), box.height / (tr_y + br_y), box.width / (br_x + bl_x), box.height / (bl_y + tl_y));\n if (f < 1) {\n tl_x *= f;\n tl_y *= f;\n tr_x *= f;\n tr_y *= f;\n br_x *= f;\n br_y *= f;\n bl_x *= f;\n bl_y *= f;\n }\n return {\n tl: {\n x: tl_x,\n y: tl_y\n },\n tr: {\n x: tr_x,\n y: tr_y\n },\n br: {\n x: br_x,\n y: br_y\n },\n bl: {\n x: bl_x,\n y: bl_y\n }\n };\n }\n function elementRoundBox(element, box, type) {\n var style = getComputedStyle(element);\n var rTL = getBorderRadius(style, 'top-left');\n var rTR = getBorderRadius(style, 'top-right');\n var rBL = getBorderRadius(style, 'bottom-left');\n var rBR = getBorderRadius(style, 'bottom-right');\n if (type == 'padding' || type == 'content') {\n var bt = getBorder(style, 'top');\n var br = getBorder(style, 'right');\n var bb = getBorder(style, 'bottom');\n var bl = getBorder(style, 'left');\n rTL.x -= bl.width;\n rTL.y -= bt.width;\n rTR.x -= br.width;\n rTR.y -= bt.width;\n rBR.x -= br.width;\n rBR.y -= bb.width;\n rBL.x -= bl.width;\n rBL.y -= bb.width;\n if (type == 'content') {\n var pt = parseFloat(getPropertyValue(style, 'padding-top'));\n var pr = parseFloat(getPropertyValue(style, 'padding-right'));\n var pb = parseFloat(getPropertyValue(style, 'padding-bottom'));\n var pl = parseFloat(getPropertyValue(style, 'padding-left'));\n rTL.x -= pl;\n rTL.y -= pt;\n rTR.x -= pr;\n rTR.y -= pt;\n rBR.x -= pr;\n rBR.y -= pb;\n rBL.x -= pl;\n rBL.y -= pb;\n }\n }\n if (typeof type == 'number') {\n rTL.x -= type;\n rTL.y -= type;\n rTR.x -= type;\n rTR.y -= type;\n rBR.x -= type;\n rBR.y -= type;\n rBL.x -= type;\n rBL.y -= type;\n }\n return roundBox(box, rTL, rTR, rBR, rBL);\n }\n function roundBox(box, rTL0, rTR0, rBR0, rBL0) {\n var tmp = adjustBorderRadiusForBox(box, rTL0, rTR0, rBR0, rBL0);\n var rTL = tmp.tl;\n var rTR = tmp.tr;\n var rBR = tmp.br;\n var rBL = tmp.bl;\n var path = new Path({\n fill: null,\n stroke: null\n });\n path.moveTo(box.left, box.top + rTL.y);\n if (rTL.x) {\n addArcToPath(path, box.left + rTL.x, box.top + rTL.y, {\n startAngle: -180,\n endAngle: -90,\n radiusX: rTL.x,\n radiusY: rTL.y\n });\n }\n path.lineTo(box.right - rTR.x, box.top);\n if (rTR.x) {\n addArcToPath(path, box.right - rTR.x, box.top + rTR.y, {\n startAngle: -90,\n endAngle: 0,\n radiusX: rTR.x,\n radiusY: rTR.y\n });\n }\n path.lineTo(box.right, box.bottom - rBR.y);\n if (rBR.x) {\n addArcToPath(path, box.right - rBR.x, box.bottom - rBR.y, {\n startAngle: 0,\n endAngle: 90,\n radiusX: rBR.x,\n radiusY: rBR.y\n });\n }\n path.lineTo(box.left + rBL.x, box.bottom);\n if (rBL.x) {\n addArcToPath(path, box.left + rBL.x, box.bottom - rBL.y, {\n startAngle: 90,\n endAngle: 180,\n radiusX: rBL.x,\n radiusY: rBL.y\n });\n }\n return path.close();\n }\n function formatCounter(val, style) {\n var str = String(parseFloat(val));\n switch (style) {\n case 'decimal-leading-zero':\n if (str.length < 2) {\n str = '0' + str;\n }\n return str;\n case 'lower-roman':\n return arabicToRoman(val).toLowerCase();\n case 'upper-roman':\n return arabicToRoman(val).toUpperCase();\n case 'lower-latin':\n case 'lower-alpha':\n return alphaNumeral(val - 1);\n case 'upper-latin':\n case 'upper-alpha':\n return alphaNumeral(val - 1).toUpperCase();\n default:\n return str;\n }\n }\n function evalPseudoElementContent(element, content) {\n function displayCounter(name, style, separator) {\n if (!separator) {\n return formatCounter(getCounter(name) || 0, style);\n }\n separator = separator.replace(/^\\s*([\"'])(.*)\\1\\s*$/, '$2');\n return getAllCounters(name).map(function (val) {\n return formatCounter(val, style);\n }).join(separator);\n }\n var a = splitProperty(content, /^\\s+/);\n var result = [], m;\n a.forEach(function (el) {\n var tmp;\n if (m = /^\\s*([\"'])(.*)\\1\\s*$/.exec(el)) {\n result.push(m[2].replace(/\\\\([0-9a-f]{4})/gi, function (s, p) {\n return String.fromCharCode(parseInt(p, 16));\n }));\n } else if (m = /^\\s*counter\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[1]));\n } else if (m = /^\\s*counters\\((.*?)\\)\\s*$/.exec(el)) {\n tmp = splitProperty(m[1]);\n result.push(displayCounter(tmp[0], tmp[2], tmp[1]));\n } else if (m = /^\\s*attr\\((.*?)\\)\\s*$/.exec(el)) {\n result.push(element.getAttribute(m[1]) || '');\n } else {\n result.push(el);\n }\n });\n return result.join('');\n }\n function getCssText(style) {\n if (style.cssText) {\n return style.cssText;\n }\n var result = [];\n for (var i = 0; i < style.length; ++i) {\n result.push(style[i] + ': ' + getPropertyValue(style, style[i]));\n }\n return result.join(';\\n');\n }\n function _renderWithPseudoElements(element, group) {\n if (element.tagName == KENDO_PSEUDO_ELEMENT) {\n _renderElement(element, group);\n return;\n }\n var fake = [];\n function pseudo(kind, place) {\n var style = getComputedStyle(element, kind), content = style.content;\n updateCounters(style);\n if (content && content != 'normal' && content != 'none' && style.width != '0px') {\n var psel = element.ownerDocument.createElement(KENDO_PSEUDO_ELEMENT);\n psel.style.cssText = getCssText(style);\n psel.textContent = evalPseudoElementContent(element, content);\n element.insertBefore(psel, place);\n fake.push(psel);\n }\n }\n pseudo(':before', element.firstChild);\n pseudo(':after', null);\n if (fake.length > 0) {\n var saveClass = element.className;\n element.className += ' kendo-pdf-hide-pseudo-elements';\n _renderElement(element, group);\n element.className = saveClass;\n fake.forEach(function (el) {\n element.removeChild(el);\n });\n } else {\n _renderElement(element, group);\n }\n }\n function _renderElement(element, group) {\n var style = getComputedStyle(element);\n var top = getBorder(style, 'top');\n var right = getBorder(style, 'right');\n var bottom = getBorder(style, 'bottom');\n var left = getBorder(style, 'left');\n var rTL0 = getBorderRadius(style, 'top-left');\n var rTR0 = getBorderRadius(style, 'top-right');\n var rBL0 = getBorderRadius(style, 'bottom-left');\n var rBR0 = getBorderRadius(style, 'bottom-right');\n var dir = getPropertyValue(style, 'direction');\n var backgroundColor = getPropertyValue(style, 'background-color');\n backgroundColor = parseColor$1(backgroundColor);\n var backgroundImage = parseBackgroundImage(getPropertyValue(style, 'background-image'));\n var backgroundRepeat = splitProperty(getPropertyValue(style, 'background-repeat'));\n var backgroundPosition = splitProperty(getPropertyValue(style, 'background-position'));\n var backgroundOrigin = splitProperty(getPropertyValue(style, 'background-origin'));\n var backgroundSize = splitProperty(getPropertyValue(style, 'background-size'));\n 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(a);\n var sb = getComputedStyle(b);\n var za = parseFloat(getPropertyValue(sa, 'z-index'));\n var zb = parseFloat(getPropertyValue(sb, 'z-index'));\n var pa = getPropertyValue(sa, 'position');\n var pb = getPropertyValue(sb, 'position');\n if (isNaN(za) && isNaN(zb)) {\n if (/static|absolute/.test(pa) && /static|absolute/.test(pb)) {\n return 0;\n }\n if (pa == 'static') {\n return -1;\n }\n if (pb == 'static') {\n return 1;\n }\n return 0;\n }\n if (isNaN(za)) {\n return zb === 0 ? 0 : zb > 0 ? -1 : 1;\n }\n if (isNaN(zb)) {\n return za === 0 ? 0 : za > 0 ? 1 : -1;\n }\n return parseFloat(za) - parseFloat(zb);\n }\n function isFormField(element) {\n return /^(?:textarea|select|input)$/i.test(element.tagName);\n }\n function getSelectedOption(element) {\n if (element.selectedOptions && element.selectedOptions.length > 0) {\n return element.selectedOptions[0];\n }\n return element.options[element.selectedIndex];\n }\n function renderCheckbox(element, group) {\n var style = getComputedStyle(element);\n var color = getPropertyValue(style, 'color');\n var box = element.getBoundingClientRect();\n if (element.type == 'checkbox') {\n group.append(Path.fromRect(new Rect([\n box.left + 1,\n box.top + 1\n ], [\n box.width - 2,\n box.height - 2\n ])).stroke(color, 1));\n if (element.checked) {\n group.append(new Path().stroke(color, 1.2).moveTo(box.left + 0.22 * box.width, box.top + 0.55 * box.height).lineTo(box.left + 0.45 * box.width, box.top + 0.75 * box.height).lineTo(box.left + 0.78 * box.width, box.top + 0.22 * box.width));\n }\n } else {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 2, box.height - 2) / 2)).stroke(color, 1));\n if (element.checked) {\n group.append(new Circle(new Circle$2([\n (box.left + box.right) / 2,\n (box.top + box.bottom) / 2\n ], Math.min(box.width - 8, box.height - 8) / 2)).fill(color).stroke(null));\n }\n }\n }\n function renderFormField(element, group) {\n var tag = element.tagName.toLowerCase();\n if (tag == 'input' && (element.type == 'checkbox' || element.type == 'radio')) {\n return renderCheckbox(element, group);\n }\n var p = element.parentNode;\n var doc = element.ownerDocument;\n var el = doc.createElement(KENDO_PSEUDO_ELEMENT);\n var option;\n el.style.cssText = getCssText(getComputedStyle(element));\n if (tag == 'input') {\n el.style.whiteSpace = 'pre';\n }\n if (tag == 'select' || tag == 'textarea') {\n el.style.overflow = 'auto';\n }\n if (tag == 'select') {\n if (element.multiple) {\n for (var i = 0; i < element.options.length; ++i) {\n option = doc.createElement(KENDO_PSEUDO_ELEMENT);\n option.style.cssText = getCssText(getComputedStyle(element.options[i]));\n option.style.display = 'block';\n option.textContent = element.options[i].textContent;\n el.appendChild(option);\n }\n } else {\n option = getSelectedOption(element);\n if (option) {\n el.textContent = option.textContent;\n }\n }\n } else {\n el.textContent = element.value;\n }\n p.insertBefore(el, element);\n el.scrollLeft = element.scrollLeft;\n el.scrollTop = element.scrollTop;\n element.style.display = 'none';\n renderContents(el, group);\n element.style.display = '';\n p.removeChild(el);\n }\n function renderContents(element, group) {\n if (nodeInfo._stackingContext.element === element) {\n nodeInfo._stackingContext.group = group;\n }\n switch (element.tagName.toLowerCase()) {\n case 'img':\n renderImage(element, element.src, group);\n break;\n case 'canvas':\n try {\n renderImage(element, element.toDataURL('image/png'), group);\n } catch (ex) {\n }\n break;\n case 'textarea':\n case 'input':\n case 'select':\n renderFormField(element, group);\n break;\n default:\n var children = [], floats = [], positioned = [];\n for (var i = element.firstChild; i; i = i.nextSibling) {\n switch (i.nodeType) {\n case 3:\n if (/\\S/.test(i.data)) {\n renderText(element, i, group);\n }\n break;\n case 1:\n var style = getComputedStyle(i);\n var floating = getPropertyValue(style, 'float');\n var position = getPropertyValue(style, 'position');\n if (position != 'static') {\n positioned.push(i);\n } else if (floating != 'none') {\n floats.push(i);\n } else {\n children.push(i);\n }\n break;\n }\n }\n mergeSort(children, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(floats, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n mergeSort(positioned, zIndexSort).forEach(function (el) {\n renderElement(el, group);\n });\n }\n }\n function renderText(element, node, group) {\n if (emptyClipbox()) {\n return;\n }\n var style = getComputedStyle(element);\n if (parseFloat(getPropertyValue(style, 'text-indent')) < -500) {\n return;\n }\n var text = node.data;\n var start = 0;\n var end = text.search(/\\S\\s*$/) + 1;\n if (!end) {\n return;\n }\n var fontSize = getPropertyValue(style, 'font-size');\n var lineHeight = getPropertyValue(style, 'line-height');\n var font = [\n getPropertyValue(style, 'font-style'),\n getPropertyValue(style, 'font-variant'),\n getPropertyValue(style, 'font-weight'),\n fontSize,\n getPropertyValue(style, 'font-family')\n ].join(' ');\n fontSize = parseFloat(fontSize);\n lineHeight = parseFloat(lineHeight);\n if (fontSize === 0) {\n return;\n }\n var color = getPropertyValue(style, 'color');\n var range = element.ownerDocument.createRange();\n var align$$1 = getPropertyValue(style, 'text-align');\n var isJustified = align$$1 == 'justify';\n var columnCount = getPropertyValue(style, 'column-count', 1);\n var whiteSpace = getPropertyValue(style, 'white-space');\n var textTransform = getPropertyValue(style, 'text-transform');\n var 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(element);\n updateCounters(style);\n if (/^(style|script|link|meta|iframe|svg|col|colgroup)$/i.test(element.tagName)) {\n return;\n }\n if (nodeInfo._clipbox == null) {\n return;\n }\n var opacity = parseFloat(getPropertyValue(style, 'opacity'));\n var visibility = getPropertyValue(style, 'visibility');\n var display = getPropertyValue(style, 'display');\n if (opacity === 0 || visibility == 'hidden' || display == 'none') {\n return;\n }\n var tr = getTransform(style);\n var group;\n var zIndex = getPropertyValue(style, 'z-index');\n if ((tr || opacity < 1) && zIndex == 'auto') {\n zIndex = 0;\n }\n group = groupInStackingContext(element, container, zIndex);\n if (opacity < 1) {\n group.opacity(opacity * group.opacity());\n }\n pushNodeInfo(element, style, group);\n if (!tr) {\n _renderWithPseudoElements(element, group);\n } else {\n saveStyle(element, function () {\n pleaseSetPropertyValue(element.style, 'transform', 'none', 'important');\n pleaseSetPropertyValue(element.style, 'transition', 'none', 'important');\n if (getPropertyValue(style, 'position') == 'static') {\n pleaseSetPropertyValue(element.style, 'position', 'relative', 'important');\n }\n var bbox = element.getBoundingClientRect();\n var x = bbox.left + tr.origin[0];\n var y = bbox.top + tr.origin[1];\n var m = [\n 1,\n 0,\n 0,\n 1,\n -x,\n -y\n ];\n m = mmul(m, tr.matrix);\n m = mmul(m, [\n 1,\n 0,\n 0,\n 1,\n x,\n y\n ]);\n m = setTransform(group, m);\n nodeInfo._matrix = nodeInfo._matrix.multiplyCopy(m);\n _renderWithPseudoElements(element, group);\n });\n }\n popNodeInfo();\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n var drawing = {\n svg: svg,\n canvas: canvas,\n util: util,\n PathParser: PathParser,\n Surface: Surface,\n BaseNode: BaseNode,\n SurfaceFactory: SurfaceFactory,\n OptionsStore: OptionsStore,\n exportImage: exportImage,\n exportSVG: exportSVG,\n QuadNode: QuadNode,\n ShapesQuadTree: ShapesQuadTree,\n ObserversMixin: ObserversMixin,\n Element: Element$1,\n Circle: Circle,\n Arc: Arc,\n Path: Path,\n MultiPath: MultiPath,\n Text: Text,\n Image: Image$1,\n Group: Group,\n Layout: Layout,\n Rect: Rect$2,\n align: align,\n vAlign: vAlign,\n stack: stack,\n vStack: vStack,\n wrap: wrap,\n vWrap: vWrap,\n fit: fit,\n LinearGradient: LinearGradient,\n RadialGradient: RadialGradient,\n GradientStop: GradientStop,\n Gradient: Gradient,\n Animation: Animation,\n AnimationFactory: AnimationFactory,\n drawDOM: drawDOM\n };\n kendo.deepExtend(kendo, {\n drawing: drawing,\n geometry: geometry\n });\n kendo.drawing.Segment = kendo.geometry.Segment;\n kendo.dataviz.drawing = kendo.drawing;\n kendo.dataviz.geometry = kendo.geometry;\n kendo.drawing.util.measureText = kendo.util.measureText;\n kendo.drawing.util.objectKey = kendo.util.objectKey;\n kendo.drawing.Color = kendo.Color;\n kendo.util.encodeBase64 = kendo.drawing.util.encodeBase64;\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/surface-tooltip', [\n 'kendo.popup',\n 'drawing/kendo-drawing'\n ], f);\n}(function () {\n (function ($) {\n var NS = '.kendo';\n var kendo = window.kendo;\n var deepExtend = kendo.deepExtend;\n var utils = kendo.drawing.util;\n var defined = utils.defined;\n var limitValue = utils.limitValue;\n var eventCoordinates = utils.eventCoordinates;\n var outerWidth = kendo._outerWidth;\n var outerHeight = kendo._outerHeight;\n var proxy = $.proxy;\n var TOOLTIP_TEMPLATE = '
    ' + '
    ' + '
    ';\n var TOOLTIP_CLOSE_TEMPLATE = '';\n var SurfaceTooltip = kendo.Class.extend({\n init: function (surface, options) {\n this.element = $(TOOLTIP_TEMPLATE);\n this.content = this.element.children('.k-tooltip-content');\n options = options || {};\n this.options = deepExtend({}, this.options, this._tooltipOptions(options));\n this.popupOptions = {\n appendTo: options.appendTo,\n animation: options.animation,\n copyAnchorStyles: false,\n collision: 'fit fit'\n };\n this._openPopupHandler = $.proxy(this._openPopup, this);\n this.surface = surface;\n this._bindEvents();\n },\n options: {\n position: 'top',\n showOn: 'mouseenter',\n offset: 7,\n autoHide: true,\n hideDelay: 0,\n showAfter: 100\n },\n _bindEvents: function () {\n this._showHandler = proxy(this._showEvent, this);\n this._surfaceLeaveHandler = proxy(this._surfaceLeave, this);\n this._mouseleaveHandler = proxy(this._mouseleave, this);\n this._mousemoveHandler = proxy(this._mousemove, this);\n this.surface.bind('click', this._showHandler);\n this.surface.bind('mouseenter', this._showHandler);\n this.surface.bind('mouseleave', this._mouseleaveHandler);\n this.surface.bind('mousemove', this._mousemoveHandler);\n this.surface.element.on('mouseleave' + NS, this._surfaceLeaveHandler);\n this.element.on('click' + NS, '.k-tooltip-button', proxy(this._hideClick, this));\n 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).prependTo(this.element);\n }\n },\n _showEvent: function (e) {\n var shape = this._tooltipShape(e.element);\n if (shape) {\n var options = deepExtend({}, this.options, this._tooltipOptions(shape.options.tooltip));\n if (options && options.showOn == e.type) {\n this._show(e.element, shape, options, e.originalEvent, true);\n }\n }\n },\n _measure: function (options) {\n var popup = this.getPopup();\n var width, height;\n this.element.css({\n width: 'auto',\n height: 'auto'\n });\n var visible = popup.visible();\n if (!visible) {\n popup.wrapper.show();\n }\n this.element.css({\n width: defined(options.width) ? options.width : 'auto',\n height: defined(options.height) ? options.height : 'auto'\n });\n width = outerWidth(this.element);\n height = outerHeight(this.element);\n if (!visible) {\n popup.wrapper.hide();\n }\n return {\n width: width,\n height: height\n };\n },\n _mouseleave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e.originalEvent)) {\n var tooltip = this;\n var current = tooltip._current;\n if (current && current.options.autoHide) {\n tooltip._timeout = setTimeout(function () {\n clearTimeout(tooltip._showTimeout);\n tooltip.hide();\n }, current.options.hideDelay || 0);\n }\n }\n },\n _mousemove: function (e) {\n var current = this._current;\n if (current && e.element) {\n var options = current.options;\n if (options.position == 'cursor') {\n var position = this._position(e.element, options, current.elementSize, e.originalEvent);\n current.position = position;\n this.getPopup().wrapper.css({\n left: position.left,\n top: position.top\n });\n }\n }\n },\n _surfaceLeave: function (e) {\n if (this.popup && !this._popupRelatedTarget(e)) {\n clearTimeout(this._showTimeout);\n this.hide();\n }\n },\n _popupRelatedTarget: function (e) {\n return e.relatedTarget && $(e.relatedTarget).closest(this.popup.wrapper).length;\n },\n _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 };\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 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 if (vertical) {\n slotX = (altAxis || plotArea.axisX).lineBox();\n slotY = this$1.getSlot(item.from, item.to, true);\n } else {\n slotX = this$1.getSlot(item.from, item.to, true);\n slotY = (altAxis || plotArea.axisY).lineBox();\n }\n if (slotX.width() !== 0 && slotY.height() !== 0) {\n var bandRect = new Rect([\n slotX.x1,\n slotY.y1\n ], [\n slotX.width(),\n slotY.height()\n ]);\n var path = Path.fromRect(bandRect, {\n fill: {\n color: item.color,\n opacity: item.opacity\n },\n stroke: null\n });\n group.append(path);\n }\n }\n this.appendVisual(group);\n },\n createGridLines: function (altAxis) {\n var options = this.options;\n var minorGridLines = options.minorGridLines;\n var majorGridLines = options.majorGridLines;\n var minorUnit = options.minorUnit;\n var vertical = options.vertical;\n var axisLineVisible = altAxis.options.line.visible;\n var majorUnit = majorGridLines.visible ? options.majorUnit : 0;\n var lineBox = altAxis.lineBox();\n var linePos = lineBox[vertical ? 'y1' : 'x1'];\n var lineOptions = {\n lineStart: lineBox[vertical ? 'x1' : 'y1'],\n lineEnd: lineBox[vertical ? 'x2' : 'y2'],\n vertical: vertical\n };\n var majorTicks = [];\n var container = this.gridLinesVisual();\n function render(tickPositions, gridLine, skipUnit) {\n var count = tickPositions.length;\n var step = Math.max(1, gridLine.step);\n if (gridLine.visible) {\n for (var i = gridLine.skip; i < count; i += step) {\n var pos = round(tickPositions[i]);\n if (!inArray(pos, majorTicks)) {\n if (i % skipUnit !== 0 && (!axisLineVisible || linePos !== pos)) {\n lineOptions.position = pos;\n container.append(createAxisGridLine(lineOptions, gridLine));\n majorTicks.push(pos);\n }\n }\n }\n }\n }\n render(this.getMajorTickPositions(), majorGridLines);\n render(this.getMinorTickPositions(), minorGridLines, majorUnit / minorUnit);\n return container.children;\n },\n reflow: function (box) {\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var title = ref.title;\n var vertical = options.vertical;\n var count = labels.length;\n var sizeFn = vertical ? WIDTH : HEIGHT;\n var titleSize = title ? title.box[sizeFn]() : 0;\n var space = this.getActualTickSize() + options.margin + titleSize;\n var rootBox = (this.getRoot() || {}).box || box;\n var boxSize = rootBox[sizeFn]();\n var maxLabelSize = 0;\n for (var i = 0; i < count; i++) {\n var labelSize = labels[i].box[sizeFn]();\n if (labelSize + space <= boxSize) {\n maxLabelSize = Math.max(maxLabelSize, labelSize);\n }\n }\n if (vertical) {\n this.box = new Box(box.x1, box.y1, box.x1 + maxLabelSize + space, box.y2);\n } else {\n this.box = new Box(box.x1, box.y1, box.x2, box.y1 + maxLabelSize + space);\n }\n this.arrangeTitle();\n this.arrangeLabels();\n this.arrangeNotes();\n },\n getLabelsTickPositions: function () {\n return this.getMajorTickPositions();\n },\n labelTickIndex: function (label) {\n return label.index;\n },\n arrangeLabels: function () {\n var this$1 = this;\n var ref = this;\n var options = ref.options;\n var labels = ref.labels;\n var labelsBetweenTicks = 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 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), 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 });\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 });\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 this.totalMin = toTime(floorDate(toTime(min) - 1, options.baseUnit));\n this.totalMax = toTime(ceilDate(toTime(max) + 1, options.baseUnit));\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 positions = [start];\n for (var i = 1; i < divisions; i++) {\n var date = addDuration(options.min, i * step, options.baseUnit);\n var pos = start + dateDiff(date, options.min) * scale * dir;\n positions.push(round(pos, COORD_PRECISION));\n }\n return positions;\n },\n getMajorTickPositions: function () {\n return this.getTickPositions(this.options.majorUnit);\n },\n getMinorTickPositions: function () {\n return this.getTickPositions(this.options.minorUnit);\n },\n getSlot: function (a, b, limit) {\n return NumericAxis.prototype.getSlot.call(this, 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 date = options.min;\n if (offset > 0) {\n date = addDuration(date, offset, options.baseUnit);\n }\n var unitFormat = labelOptions.dateFormats[options.baseUnit];\n labelOptions.format = labelOptions.format || unitFormat;\n var text = this.axisLabelText(date, null, labelOptions);\n return new AxisLabel(date, text, index, null, labelOptions);\n },\n translateRange: function (delta, exact) {\n var options = this.options;\n var baseUnit = options.baseUnit;\n var weekStartDay = options.weekStartDay;\n var lineBox = this.lineBox();\n var size = options.vertical ? lineBox.height() : lineBox.width();\n var range = this.range();\n var scale = size / dateDiff(range.max, range.min);\n var offset = round(delta / scale, DEFAULT_PRECISION) * (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 autoMin = floorDate(toTime(min) - 1, baseUnit) || toDate(max);\n var autoMax = ceilDate(toTime(max) + 1, baseUnit);\n var userMajorUnit = options.majorUnit ? options.majorUnit : undefined;\n var majorUnit = userMajorUnit || ceil(autoMajorUnit(autoMin.getTime(), autoMax.getTime()), baseUnitTime) / baseUnitTime;\n var actualUnits = duration(autoMin, autoMax, baseUnit);\n var totalUnits = ceil(actualUnits, majorUnit);\n var unitsToAdd = totalUnits - actualUnits;\n var head = Math.floor(unitsToAdd / 2);\n var tail = unitsToAdd - head;\n if (!options.baseUnit) {\n delete options.baseUnit;\n }\n options.baseUnit = options.baseUnit || baseUnit;\n options.min = options.min || addDuration(autoMin, -head, baseUnit);\n options.max = options.max || addDuration(autoMax, tail, baseUnit);\n options.minorUnit = options.minorUnit || majorUnit / 5;\n options.majorUnit = majorUnit;\n return options;\n }\n setDefaultOptions(DateValueAxis, {\n type: DATE,\n majorGridLines: {\n visible: true,\n width: 1,\n color: BLACK\n },\n labels: { dateFormats: DateLabelFormats }\n });\n var DEFAULT_MAJOR_UNIT = 10;\n var LogarithmicAxis = Axis.extend({\n init: function (seriesMin, seriesMax, options, chartService) {\n var axisOptions = deepExtend({\n majorUnit: DEFAULT_MAJOR_UNIT,\n min: seriesMin,\n max: seriesMax\n }, options);\n var base = axisOptions.majorUnit;\n var autoMax = autoAxisMax$1(seriesMax, base);\n var autoMin = autoAxisMin$1(seriesMin, seriesMax, axisOptions);\n var range = initRange(autoMin, autoMax, axisOptions, options);\n axisOptions.max = range.max;\n axisOptions.min = range.min;\n axisOptions.minorUnit = options.minorUnit || round(base - 1, DEFAULT_PRECISION);\n Axis.fn.init.call(this, axisOptions, chartService);\n this.totalMin = defined(options.min) ? Math.min(autoMin, options.min) : autoMin;\n this.totalMax = defined(options.max) ? Math.max(autoMax, options.max) : autoMax;\n this.logMin = round(log(range.min, base), DEFAULT_PRECISION);\n this.logMax = round(log(range.max, base), DEFAULT_PRECISION);\n this.seriesMin = seriesMin;\n this.seriesMax = seriesMax;\n this.createLabels();\n },\n 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 append: append,\n bindEvents: bindEvents,\n Class: Class,\n defined: defined,\n deg: deg,\n elementOffset: elementOffset,\n elementSize: elementSize,\n eventElement: eventElement,\n eventCoordinates: eventCoordinates,\n last: last,\n limitValue: limitValue,\n logToConsole: kendo.logToConsole,\n objectKey: objectKey,\n rad: rad,\n round: round,\n unbindEvents: unbindEvents,\n valueOrDefault: valueOrDefault,\n absoluteDateDiff: absoluteDateDiff,\n addDuration: addDuration,\n addTicks: addTicks,\n ceilDate: ceilDate,\n dateComparer: dateComparer,\n dateDiff: dateDiff,\n dateEquals: dateEquals,\n dateIndex: dateIndex,\n duration: duration,\n floorDate: floorDate,\n lteDateIndex: lteDateIndex,\n startOfWeek: startOfWeek,\n toDate: toDate,\n parseDate: parseDate,\n parseDates: parseDates,\n toTime: toTime\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/core/core', ['dataviz/core/kendo-core'], f);\n}(function () {\n (function ($) {\n var dataviz = kendo.dataviz;\n var services = dataviz.services;\n var draw = kendo.drawing;\n dataviz.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 });\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 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.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 axisGroupBox(axes) {\n var length = axes.length;\n var box;\n if (length > 0) {\n for (var i = 0; i < length; i++) {\n var axisBox = axes[i].contentBox();\n if (!box) {\n box = axisBox.clone();\n } else {\n box.wrap(axisBox);\n }\n }\n }\n return box || new Box();\n }\n function paneAnchor(axes, pane) {\n for (var i = 0; i < axes.length; i++) {\n var anchor = axes[i];\n if (anchor && anchor.pane === pane) {\n return anchor;\n }\n }\n }\n function isTransparent(color) {\n return color === '' || color === null || color === 'none' || color === 'transparent' || !defined(color);\n }\n 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)) {\n var range = axis.pointsRange(start, end);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n },\n _selectionPosition: function (e) {\n var clipBox = this._zoomPaneClipBox;\n var startLocation = {\n x: e.x.startLocation,\n y: e.y.startLocation\n };\n var pageX = e.x.location;\n var pageY = e.y.location;\n var lock = (this.options.lock || '').toLowerCase();\n var left = Math.min(startLocation.x, pageX);\n var top = Math.min(startLocation.y, pageY);\n var width = Math.abs(startLocation.x - pageX);\n var height = Math.abs(startLocation.y - pageY);\n if (lock === X) {\n left = clipBox.x1;\n width = clipBox.width();\n }\n if (lock === Y) {\n top = clipBox.y1;\n height = clipBox.height();\n }\n if (pageX > clipBox.x2) {\n width = clipBox.x2 - startLocation.x;\n }\n if (pageX < clipBox.x1) {\n width = startLocation.x - clipBox.x1;\n }\n if (pageY > clipBox.y2) {\n height = clipBox.y2 - startLocation.y;\n }\n if (pageY < clipBox.y1) {\n height = startLocation.y - clipBox.y1;\n }\n return {\n left: Math.max(left, clipBox.x1),\n top: Math.max(top, clipBox.y1),\n width: width,\n height: height\n };\n }\n });\n ZoomSelection.prototype.options = {\n key: 'shift',\n lock: 'none'\n };\n var MousewheelZoom = Class.extend({\n init: function (chart, options) {\n this.chart = chart;\n this.options = deepExtend({}, this.options, options);\n },\n updateRanges: function (delta) {\n var lock = (this.options.lock || '').toLowerCase();\n var axisRanges = [];\n var axes = this.chart._plotArea.axes;\n for (var idx = 0; idx < axes.length; idx++) {\n var axis = axes[idx];\n var vertical = axis.options.vertical;\n if (!(lock === X && !vertical) && !(lock === Y && vertical)) {\n var range = axis.zoomRange(-delta);\n if (range) {\n axisRanges.push({\n axis: axis,\n range: range\n });\n }\n }\n }\n this.axisRanges = axisRanges;\n return toChartAxisRanges(axisRanges);\n },\n zoom: function () {\n var axisRanges = this.axisRanges;\n if (axisRanges && axisRanges.length) {\n var plotArea = this.chart._plotArea;\n for (var idx = 0; idx < axisRanges.length; idx++) {\n var axisRange = axisRanges[idx];\n plotArea.updateAxisOptions(axisRange.axis, axisRange.range);\n }\n plotArea.redraw(plotArea.panes);\n }\n },\n destroy: function () {\n delete this.chart;\n }\n });\n var LegendLayout = ChartElement.extend({\n init: function (options, chartService) {\n ChartElement.fn.init.call(this, options);\n this.chartService = chartService;\n },\n render: function () {\n var ref = this;\n var children = ref.children;\n var options = ref.options;\n var vertical = options.vertical;\n this.visual = new drawing.Layout(null, {\n spacing: vertical ? 0 : options.spacing,\n lineSpacing: vertical ? options.spacing : 0,\n orientation: vertical ? 'vertical' : 'horizontal',\n reverse: options.rtl,\n alignItems: vertical ? 'start' : 'center'\n });\n for (var idx = 0; idx < children.length; idx++) {\n var legendItem = children[idx];\n legendItem.reflow(new Box());\n legendItem.renderVisual();\n }\n },\n reflow: function (box) {\n this.visual.rect(box.toRect());\n this.visual.reflow();\n var bbox = this.visual.clippedBBox();\n if (bbox) {\n this.box = dataviz.rectToBox(bbox);\n } else {\n this.box = new Box();\n }\n },\n renderVisual: function () {\n this.addVisual();\n },\n createVisual: function () {\n }\n });\n var LegendItem = BoxElement.extend({\n init: function (options) {\n BoxElement.fn.init.call(this, options);\n this.createContainer();\n if (!options.rtl) {\n this.createMarker();\n this.createLabel();\n } else {\n this.createLabel();\n this.createMarker();\n }\n },\n createContainer: function () {\n this.container = new dataviz.FloatElement({\n vertical: false,\n wrap: false,\n align: CENTER,\n spacing: this.options.spacing\n });\n this.append(this.container);\n },\n createMarker: function () {\n this.container.append(new ShapeElement(this.markerOptions()));\n },\n markerOptions: function () {\n var options = this.options;\n var markerColor = options.markerColor;\n return deepExtend({}, options.markers, {\n background: markerColor,\n border: { color: markerColor }\n });\n },\n createLabel: function () {\n var options = this.options;\n var labelOptions = deepExtend({}, options.labels);\n this.container.append(new TextBox(options.text, labelOptions));\n },\n renderComplete: function () {\n BoxElement.fn.renderComplete.call(this);\n var cursor = this.options.cursor || {};\n var eventSink = this._itemOverlay = Path.fromRect(this.container.box.toRect(), {\n fill: {\n color: WHITE,\n opacity: 0\n },\n stroke: null,\n cursor: cursor.style || cursor\n });\n this.appendVisual(eventSink);\n },\n click: function (widget, e) {\n var args = this.eventArgs(e);\n if (!widget.trigger(LEGEND_ITEM_CLICK, args) && 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.createContainer();\n this.createItems();\n },\n createContainer: function () {\n var options = this.options;\n var position = options.position;\n var userAlign = options.align;\n var align = position;\n var vAlign = CENTER;\n if (position === CUSTOM) {\n align = LEFT;\n } else if (inArray(position, [\n TOP,\n BOTTOM\n ])) {\n if (userAlign === 'start') {\n align = LEFT;\n } else if (userAlign === 'end') {\n align = RIGHT;\n } else {\n align = CENTER;\n }\n vAlign = position;\n } else if (userAlign) {\n if (userAlign === 'start') {\n vAlign = TOP;\n } else if (userAlign === 'end') {\n vAlign = BOTTOM;\n }\n }\n this.container = new BoxElement({\n margin: options.margin,\n padding: options.padding,\n background: options.background,\n border: options.border,\n vAlign: vAlign,\n align: align,\n zIndex: options.zIndex,\n shrinkToFit: true\n });\n this.append(this.container);\n },\n createItems: function () {\n var chartService = this.getService();\n var options = this.options;\n var vertical = this.isVertical();\n var innerElement = new LegendLayout({\n vertical: vertical,\n spacing: options.spacing,\n rtl: chartService.rtl\n }, chartService);\n var items = options.items;\n if (options.reverse) {\n items = items.slice(0).reverse();\n }\n var count = items.length;\n for (var i = 0; i < count; i++) {\n var item = items[i];\n innerElement.append(new LegendItem(deepExtend({}, {\n markers: options.markers,\n labels: options.labels,\n rtl: chartService.rtl\n }, options.item, item)));\n }\n innerElement.render();\n this.container.append(innerElement);\n },\n isVertical: function () {\n var ref = this.options;\n var orientation = ref.orientation;\n var position = ref.position;\n var vertical = position === CUSTOM && orientation !== HORIZONTAL || (defined(orientation) ? orientation !== HORIZONTAL : inArray(position, [\n LEFT,\n RIGHT\n ]));\n return vertical;\n },\n hasItems: function () {\n return this.container.children[0].children.length > 0;\n },\n reflow: function (targetBox) {\n var options = this.options;\n var legendBox = targetBox.clone();\n if (!this.hasItems()) {\n this.box = legendBox;\n return;\n }\n if (options.position === CUSTOM) {\n this.containerCustomReflow(legendBox);\n this.box = legendBox;\n } else {\n this.containerReflow(legendBox);\n }\n },\n containerReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var position = options.position;\n var width = options.width;\n var height = options.height;\n var pos = position === TOP || position === BOTTOM ? X : Y;\n var vertical = this.isVertical();\n var alignTarget = targetBox.clone();\n var containerBox = targetBox.clone();\n if (position === LEFT || position === RIGHT) {\n containerBox.y1 = alignTarget.y1 = 0;\n }\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n containerBox.align(alignTarget, Y, container.options.vAlign);\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n containerBox.align(alignTarget, X, container.options.align);\n }\n container.reflow(containerBox);\n containerBox = container.box;\n var box = containerBox.clone();\n if (options.offsetX || options.offsetY) {\n containerBox.translate(options.offsetX, options.offsetY);\n this.container.reflow(containerBox);\n }\n box[pos + 1] = targetBox[pos + 1];\n box[pos + 2] = targetBox[pos + 2];\n this.box = box;\n },\n containerCustomReflow: function (targetBox) {\n var ref = this;\n var options = ref.options;\n var container = ref.container;\n var offsetX = options.offsetX;\n var offsetY = options.offsetY;\n var width = options.width;\n var height = options.height;\n var vertical = this.isVertical();\n var containerBox = targetBox.clone();\n if (vertical && height) {\n containerBox.y2 = containerBox.y1 + height;\n } else if (!vertical && width) {\n containerBox.x2 = containerBox.x1 + width;\n }\n container.reflow(containerBox);\n containerBox = container.box;\n container.reflow(new Box(offsetX, offsetY, offsetX + containerBox.width(), offsetY + containerBox.height()));\n },\n renderVisual: function () {\n if (this.hasItems()) {\n ChartElement.fn.renderVisual.call(this);\n }\n }\n });\n setDefaultOptions(Legend, {\n position: RIGHT,\n items: [],\n offsetX: 0,\n offsetY: 0,\n margin: getSpacing(5),\n padding: getSpacing(5),\n border: {\n color: BLACK,\n width: 0\n },\n item: {\n cursor: POINTER,\n spacing: 6\n },\n spacing: 6,\n background: '',\n zIndex: 1,\n markers: {\n border: { width: 0 },\n width: 15,\n height: 3,\n type: 'rect',\n align: LEFT,\n vAlign: CENTER\n }\n });\n var PlotAreaFactory = Class.extend({\n init: function () {\n this._registry = [];\n },\n register: function (type, seriesTypes) {\n this._registry.push({\n type: type,\n seriesTypes: seriesTypes\n });\n },\n create: function (srcSeries, options, chartService) {\n var registry = this._registry;\n var match = registry[0];\n var series;\n for (var idx = 0; idx < registry.length; idx++) {\n var entry = registry[idx];\n series = filterSeriesByType(srcSeries, entry.seriesTypes);\n if (series.length > 0) {\n match = entry;\n break;\n }\n }\n return new match.type(series, options, chartService);\n }\n });\n PlotAreaFactory.current = new PlotAreaFactory();\n var ZOOM_ACCELERATION = 3;\n var SELECTOR_HEIGHT_ADJUST = 0.1;\n function createDiv(className) {\n var element = document.createElement('div');\n if (className) {\n element.className = className;\n }\n return element;\n }\n function closestHandle(element) {\n var current = element;\n while (current && !hasClasses(current, 'k-handle')) {\n current = current.parentNode;\n }\n return current;\n }\n var Selection = Class.extend({\n init: function (chart, categoryAxis, options, observer) {\n var chartElement = chart.element;\n this.options = deepExtend({}, this.options, options);\n this.chart = chart;\n this.observer = observer;\n this.chartElement = chartElement;\n this.categoryAxis = categoryAxis;\n this._dateAxis = this.categoryAxis instanceof dataviz.DateCategoryAxis;\n this.initOptions();\n if (this.options.visible) {\n this.createElements();\n this.set(this._index(this.options.from), this._index(this.options.to));\n this.bindEvents();\n }\n },\n 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 padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n newBox.translate(boxCenter.x - newBoxCenter.x, boxCenter.y - newBoxCenter.y);\n var radius = halfMinWidth - padding;\n var center = new Point(radius + newBox.x1 + padding, radius + newBox.y1 + padding);\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var seriesIndex = segment.seriesIx;\n sector.radius = radius;\n sector.center = center;\n if (seriesConfigs.length) {\n var seriesConfig = seriesConfigs[seriesIndex];\n sector.innerRadius = seriesConfig.innerRadius;\n sector.radius = seriesConfig.radius;\n }\n if (seriesIndex === seriesCount - 1 && segment.explode) {\n sector.center = sector.clone().setRadius(sector.radius * 0.15).point(sector.middle());\n }\n segment.reflow(newBox);\n var label = segment.label;\n if (label) {\n if (label.options.position === OUTSIDE_END) {\n if (seriesIndex === seriesCount - 1) {\n if (label.orientation === RIGHT) {\n rightSideLabels.push(label);\n } else {\n leftSideLabels.push(label);\n }\n }\n }\n }\n }\n if (leftSideLabels.length > 0) {\n leftSideLabels.sort(this.labelComparator(true));\n this.leftLabelsReflow(leftSideLabels);\n }\n if (rightSideLabels.length > 0) {\n rightSideLabels.sort(this.labelComparator(false));\n this.rightLabelsReflow(rightSideLabels);\n }\n this.box = newBox;\n },\n leftLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n rightLabelsReflow: function (labels) {\n var distances = this.distanceBetweenLabels(labels);\n this.distributeLabels(distances, labels);\n },\n distanceBetweenLabels: function (labels) {\n var segment = last(this.points);\n var sector = segment.sector;\n var count = labels.length - 1;\n var lr = sector.radius + segment.options.labels.distance;\n var distances = [];\n var firstBox = labels[0].box;\n var distance = round(firstBox.y1 - (sector.center.y - lr - firstBox.height() - firstBox.height() / 2));\n distances.push(distance);\n for (var i = 0; i < count; i++) {\n var secondBox = labels[i + 1].box;\n firstBox = labels[i].box;\n distance = round(secondBox.y1 - firstBox.y2);\n distances.push(distance);\n }\n distance = round(sector.center.y + lr - labels[count].box.y2 - labels[count].box.height() / 2);\n distances.push(distance);\n return distances;\n },\n distributeLabels: function (distances, labels) {\n var this$1 = this;\n var count = distances.length;\n var left, right, remaining;\n for (var i = 0; i < count; i++) {\n remaining = -distances[i];\n left = right = i;\n while (remaining > 0 && (left >= 0 || right < count)) {\n remaining = this$1._takeDistance(distances, i, --left, remaining);\n remaining = this$1._takeDistance(distances, i, ++right, remaining);\n }\n }\n this.reflowLabels(distances, labels);\n },\n _takeDistance: function (distances, anchor, position, amount) {\n var result = amount;\n if (distances[position] > 0) {\n var available = Math.min(distances[position], result);\n result -= available;\n distances[position] -= available;\n distances[anchor] += available;\n }\n return result;\n },\n reflowLabels: function (distances, labels) {\n var this$1 = this;\n var segment = last(this.points);\n var sector = segment.sector;\n var labelOptions = segment.options.labels;\n var labelsCount = labels.length;\n var labelDistance = labelOptions.distance;\n var boxY = sector.center.y - (sector.radius + labelDistance) - labels[0].box.height();\n var boxX;\n distances[0] += 2;\n for (var i = 0; i < labelsCount; i++) {\n var label = labels[i];\n var box = label.box;\n boxY += distances[i];\n boxX = this$1.hAlignLabel(box.x2, sector.clone().expand(labelDistance), boxY, boxY + box.height(), label.orientation === RIGHT);\n if (label.orientation === RIGHT) {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.radius + sector.center.x + labelDistance;\n }\n label.reflow(new Box(boxX + box.width(), boxY, boxX, boxY));\n } else {\n if (labelOptions.align !== CIRCLE) {\n boxX = sector.center.x - sector.radius - labelDistance;\n }\n label.reflow(new Box(boxX - box.width(), boxY, boxX, boxY));\n }\n boxY += box.height();\n }\n },\n createVisual: function () {\n var this$1 = this;\n var ref = this;\n var connectors = ref.options.connectors;\n var points = ref.points;\n var count = points.length;\n var space = 4;\n ChartElement.fn.createVisual.call(this);\n this._connectorLines = [];\n for (var i = 0; i < count; i++) {\n var segment = points[i];\n var sector = segment.sector;\n var label = segment.label;\n var angle = sector.middle();\n var connectorsColor = (segment.options.connectors || {}).color || connectors.color;\n if (label) {\n var connectorLine = new Path({\n stroke: {\n color: connectorsColor,\n width: connectors.width\n },\n animation: {\n type: FADEIN,\n delay: segment.animationDelay\n }\n });\n if (label.options.position === OUTSIDE_END) {\n var box = label.box;\n var centerPoint = sector.center;\n var start = sector.point(angle);\n var middle = new Point(box.x1, box.center().y);\n var sr = void 0, end = void 0, crossing = void 0;\n start = sector.clone().expand(connectors.padding).point(angle);\n connectorLine.moveTo(start.x, start.y);\n if (label.orientation === RIGHT) {\n end = new Point(box.x1 - connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x - space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.min(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x < sector.center.x) {\n sr = sector.center.x + sector.radius + space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr < middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x + space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n } else {\n end = new Point(box.x2 + connectors.padding, box.center().y);\n crossing = intersection(centerPoint, start, middle, end);\n middle = new Point(end.x + space, end.y);\n crossing = crossing || middle;\n crossing.x = Math.max(crossing.x, middle.x);\n if (this$1.pointInCircle(crossing, sector.center, sector.radius + space) || crossing.x > sector.center.x) {\n sr = sector.center.x - sector.radius - space;\n if (segment.options.labels.align !== COLUMN) {\n if (sr > middle.x) {\n connectorLine.lineTo(sr, start.y);\n } else {\n connectorLine.lineTo(start.x - space * 2, start.y);\n }\n } else {\n connectorLine.lineTo(sr, start.y);\n }\n connectorLine.lineTo(middle.x, end.y);\n } else {\n crossing.y = end.y;\n connectorLine.lineTo(crossing.x, crossing.y);\n }\n }\n connectorLine.lineTo(end.x, end.y);\n this$1._connectorLines.push(connectorLine);\n this$1.visual.append(connectorLine);\n }\n }\n }\n },\n labelComparator: function (reverse) {\n var reverseValue = reverse ? -1 : 1;\n return function (a, b) {\n var first = (a.parent.sector.middle() + 270) % 360;\n var second = (b.parent.sector.middle() + 270) % 360;\n return (first - second) * reverseValue;\n };\n },\n hAlignLabel: function (originalX, sector, y1, y2, direction) {\n var radius = sector.radius;\n var sector_center = sector.center;\n var cx = sector_center.x;\n var cy = sector_center.y;\n var t = Math.min(Math.abs(cy - y1), Math.abs(cy - y2));\n if (t > radius) {\n return originalX;\n }\n return cx + Math.sqrt(radius * radius - t * t) * (direction ? 1 : -1);\n },\n pointInCircle: function (point, center, radius) {\n return Math.pow(center.x - point.x, 2) + Math.pow(center.y - point.y, 2) < Math.pow(radius, 2);\n },\n formatPointValue: function (point, format) {\n return this.chartService.format.auto(format, point.value);\n },\n animationDelay: function (categoryIndex) {\n return categoryIndex * PIE_SECTOR_ANIM_DELAY;\n }\n });\n function intersection(a1, a2, b1, b2) {\n var uat = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n var ub = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n var result;\n if (ub !== 0) {\n var ua = uat / ub;\n result = new Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y));\n }\n return result;\n }\n setDefaultOptions(PieChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n },\n inactiveItems: {\n markers: {},\n labels: {}\n }\n });\n deepExtend(PieChart.prototype, PieChartMixin);\n var PiePlotArea = PlotAreaBase.extend({\n render: function () {\n this.createPieChart(this.series);\n },\n createPieChart: function (series) {\n var firstSeries = series[0];\n var pieChart = new PieChart(this, {\n series: series,\n padding: firstSeries.padding,\n startAngle: firstSeries.startAngle,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(pieChart);\n },\n appendChart: function (chart, pane) {\n PlotAreaBase.fn.appendChart.call(this, chart, pane);\n append(this.options.legend.items, chart.legendItems);\n }\n });\n var DonutSegment = PieSegment.extend({\n reflowLabel: function () {\n var ref = this;\n var labelsOptions = ref.options.labels;\n var label = ref.label;\n var sector = this.sector.clone();\n var angle = sector.middle();\n if (label) {\n var labelHeight = label.box.height();\n if (labelsOptions.position === CENTER) {\n sector.radius -= (sector.radius - sector.innerRadius) / 2;\n var lp = sector.point(angle);\n label.reflow(new Box(lp.x, lp.y - labelHeight / 2, lp.x, lp.y));\n } else {\n PieSegment.fn.reflowLabel.call(this);\n }\n }\n },\n createSegment: function (sector, options) {\n return dataviz.ShapeBuilder.current.createRing(sector, options);\n }\n });\n setDefaultOptions(DonutSegment, {\n overlay: { gradient: 'roundedGlass' },\n labels: { position: CENTER },\n animation: { type: PIE }\n });\n deepExtend(DonutSegment.prototype, PointEventsMixin);\n var DONUT_SECTOR_ANIM_DELAY = 50;\n var DonutChart = PieChart.extend({\n addValue: function (value, sector, fields) {\n var segmentOptions = deepExtend({}, fields.series, { index: fields.index });\n this.evalSegmentOptions(segmentOptions, value, fields);\n this.createLegendItem(value, segmentOptions, fields);\n if (!value || fields.visible === false) {\n return;\n }\n var segment = new DonutSegment(value, sector, segmentOptions);\n $.extend(segment, fields);\n this.append(segment);\n this.points.push(segment);\n },\n reflow: function (targetBox) {\n var this$1 = this;\n var options = this.options;\n var box = targetBox.clone();\n var space = 5;\n var minWidth = Math.min(box.width(), box.height());\n var halfMinWidth = minWidth / 2;\n var defaultPadding = minWidth - minWidth * 0.85;\n var series = options.series;\n var seriesCount = series.length;\n var padding = valueOrDefault(options.padding, defaultPadding);\n padding = padding > halfMinWidth - space ? halfMinWidth - space : padding;\n var totalSize = halfMinWidth - padding;\n var seriesWithoutSize = 0;\n var holeSize;\n for (var i = 0; i < seriesCount; i++) {\n var currentSeries = series[i];\n if (i === 0) {\n if (defined(currentSeries.holeSize)) {\n holeSize = currentSeries.holeSize;\n totalSize -= currentSeries.holeSize;\n }\n }\n if (defined(currentSeries.size)) {\n totalSize -= currentSeries.size;\n } else {\n seriesWithoutSize++;\n }\n if (defined(currentSeries.margin) && i !== seriesCount - 1) {\n totalSize -= currentSeries.margin;\n }\n }\n if (!defined(holeSize)) {\n var currentSize = (halfMinWidth - padding) / (seriesCount + 0.75);\n holeSize = currentSize * 0.75;\n totalSize -= holeSize;\n }\n var innerRadius = holeSize;\n var margin = 0;\n var size, radius;\n this.seriesConfigs = [];\n for (var i$1 = 0; i$1 < seriesCount; i$1++) {\n var currentSeries$1 = series[i$1];\n size = valueOrDefault(currentSeries$1.size, totalSize / seriesWithoutSize);\n innerRadius += margin;\n radius = innerRadius + size;\n this$1.seriesConfigs.push({\n innerRadius: innerRadius,\n radius: radius\n });\n margin = currentSeries$1.margin || 0;\n innerRadius = radius;\n }\n PieChart.fn.reflow.call(this, targetBox);\n },\n animationDelay: function (categoryIndex, seriesIndex, seriesCount) {\n return categoryIndex * DONUT_SECTOR_ANIM_DELAY + INITIAL_ANIMATION_DURATION * (seriesIndex + 1) / (seriesCount + 1);\n }\n });\n setDefaultOptions(DonutChart, {\n startAngle: 90,\n connectors: {\n width: 2,\n color: '#939393',\n padding: 8\n }\n });\n var DonutPlotArea = PiePlotArea.extend({\n render: function () {\n this.createDonutChart(this.series);\n },\n createDonutChart: function (series) {\n var firstSeries = series[0];\n var donutChart = new DonutChart(this, {\n series: series,\n padding: firstSeries.padding,\n connectors: firstSeries.connectors,\n legend: this.options.legend\n });\n this.appendChart(donutChart);\n }\n });\n var DEFAULT_PADDING = 0.15;\n var PolarPlotAreaBase = PlotAreaBase.extend({\n initFields: function () {\n this.valueAxisRangeTracker = new AxisGroupRangeTracker();\n },\n render: function () {\n this.addToLegend(this.series);\n this.createPolarAxis();\n this.createCharts();\n this.createValueAxis();\n },\n alignAxes: function () {\n var axis = this.valueAxis;\n var range = axis.range();\n var crossingValue = axis.options.reverse ? range.max : range.min;\n var slot = axis.getSlot(crossingValue);\n var center = this.polarAxis.getSlot(0).center;\n var axisBox = axis.box.translate(center.x - slot.x1, center.y - slot.y1);\n axis.reflow(axisBox);\n },\n createValueAxis: function () {\n var tracker = this.valueAxisRangeTracker;\n var defaultRange = tracker.query();\n var axisOptions = this.valueAxisOptions({\n roundToMajorUnit: false,\n zIndex: -1\n });\n var axisType, axisDefaultRange;\n if (axisOptions.type === LOGARITHMIC) {\n axisType = dataviz.RadarLogarithmicAxis;\n axisDefaultRange = {\n min: 0.1,\n max: 1\n };\n } else {\n axisType = dataviz.RadarNumericAxis;\n axisDefaultRange = {\n min: 0,\n max: 1\n };\n }\n var range = tracker.query(name) || defaultRange || axisDefaultRange;\n if (range && defaultRange) {\n range.min = Math.min(range.min, defaultRange.min);\n range.max = Math.max(range.max, defaultRange.max);\n }\n var valueAxis = new axisType(range.min, range.max, axisOptions, this.chartService);\n this.valueAxis = valueAxis;\n this.appendAxis(valueAxis);\n },\n reflowAxes: function () {\n var ref = this;\n var options = ref.options.plotArea;\n var valueAxis = ref.valueAxis;\n var polarAxis = ref.polarAxis;\n var box = ref.box;\n var defaultPadding = Math.min(box.width(), box.height()) * DEFAULT_PADDING;\n var padding = getSpacing(options.padding || {}, defaultPadding);\n var paddingBox = box.clone().unpad(padding);\n var axisBox = paddingBox.clone();\n axisBox.y2 = axisBox.y1 + Math.min(axisBox.width(), axisBox.height());\n axisBox.align(paddingBox, Y, CENTER);\n var valueAxisBox = axisBox.clone().shrink(0, axisBox.height() / 2);\n polarAxis.reflow(axisBox);\n valueAxis.reflow(valueAxisBox);\n var heightDiff = valueAxis.lineBox().height() - valueAxis.box.height();\n valueAxis.reflow(valueAxis.box.unpad({ top: heightDiff }));\n this.axisBox = axisBox;\n this.alignAxes(axisBox);\n },\n backgroundBox: function () {\n return this.box;\n },\n 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 var RadarLineChart = LineChart.extend({\n pointSlot: function (categorySlot, valueSlot) {\n var valueRadius = categorySlot.center.y - valueSlot.y1;\n var slot = Point.onCircle(categorySlot.center, categorySlot.middle(), valueRadius);\n return new Box(slot.x, slot.y, slot.x, slot.y);\n },\n createSegment: function (linePoints, currentSeries, seriesIx) {\n var style = currentSeries.style;\n var pointType;\n if (style === SMOOTH) {\n pointType = SplineSegment;\n } else {\n pointType = LineSegment;\n }\n var segment = new pointType(linePoints, currentSeries, seriesIx);\n if (linePoints.length === currentSeries.data.length) {\n segment.options.closed = true;\n }\n return segment;\n }\n });\n setDefaultOptions(RadarLineChart, {\n clip: false,\n limitPoints: false\n });\n var SplineRadarAreaSegment = SplineAreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaSegment = AreaSegment.extend({\n fillToAxes: function () {\n }\n });\n var RadarAreaChart = RadarLineChart.extend({\n createSegment: function (linePoints, currentSeries, seriesIx, prevSegment) {\n var isStacked = this.options.isStacked;\n var style = (currentSeries.line || {}).style;\n var previousSegment;\n var stackPoints;\n var segment;\n if (isStacked && seriesIx > 0 && prevSegment) {\n stackPoints = prevSegment.linePoints.slice(0);\n previousSegment = prevSegment;\n }\n if (style === SMOOTH) {\n segment = new SplineRadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n segment.options.closed = true;\n } else {\n linePoints.push(linePoints[0]);\n segment = new RadarAreaSegment(linePoints, currentSeries, seriesIx, previousSegment, stackPoints);\n }\n return segment;\n },\n seriesMissingValues: function (series) {\n return series.missingValues || ZERO;\n }\n });\n var RadarSegment = DonutSegment.extend({\n init: function (value, options) {\n DonutSegment.fn.init.call(this, value, null, options);\n }\n });\n setDefaultOptions(RadarSegment, {\n overlay: { gradient: 'none' },\n labels: { distance: 10 }\n });\n var RadarClusterLayout = ChartElement.extend({\n init: function (options) {\n ChartElement.fn.init.call(this, options);\n this.forEach = options.rtl ? forEachReverse : forEach;\n },\n reflow: function (sector) {\n var ref = this;\n var options = ref.options;\n var children = ref.children;\n var gap = options.gap;\n var spacing = options.spacing;\n var count = children.length;\n var slots = count + gap + spacing * (count - 1);\n var slotAngle = sector.angle / slots;\n var angle = sector.startAngle + slotAngle * (gap / 2);\n this.forEach(children, function (child) {\n var slotSector = sector.clone();\n slotSector.startAngle = angle;\n slotSector.angle = slotAngle;\n if (child.sector) {\n slotSector.radius = child.sector.radius;\n }\n child.reflow(slotSector);\n child.sector = slotSector;\n angle += slotAngle + slotAngle * spacing;\n });\n }\n });\n setDefaultOptions(RadarClusterLayout, {\n gap: 1,\n spacing: 0\n });\n var RadarStackLayout = ChartElement.extend({\n reflow: function (sector) {\n var ref = this;\n var reverse = ref.options.reverse;\n var children = ref.children;\n var childrenCount = children.length;\n var first = reverse ? childrenCount - 1 : 0;\n var step = reverse ? -1 : 1;\n this.box = new Box();\n for (var i = first; i >= 0 && i < childrenCount; i += step) {\n var childSector = children[i].sector;\n childSector.startAngle = sector.startAngle;\n childSector.angle = sector.angle;\n }\n }\n });\n var RadarBarChart = BarChart.extend({\n pointType: function () {\n return RadarSegment;\n },\n clusterType: function () {\n return RadarClusterLayout;\n },\n stackType: function () {\n return RadarStackLayout;\n },\n categorySlot: function (categoryAxis, categoryIx) {\n return categoryAxis.getSlot(categoryIx);\n },\n pointSlot: function (categorySlot, valueSlot) {\n var slot = categorySlot.clone();\n var y = categorySlot.center.y;\n slot.radius = y - valueSlot.y1;\n slot.innerRadius = y - valueSlot.y2;\n return slot;\n },\n reflowPoint: function (point, pointSlot) {\n point.sector = pointSlot;\n point.reflow();\n },\n createAnimation: function () {\n this.options.animation.center = this.box.toRect().center();\n BarChart.fn.createAnimation.call(this);\n }\n });\n RadarBarChart.prototype.reflow = CategoricalChart.prototype.reflow;\n setDefaultOptions(RadarBarChart, {\n clip: false,\n limitPoints: false,\n animation: { type: 'pie' }\n });\n var RadarPlotArea = PolarPlotAreaBase.extend({\n createPolarAxis: function () {\n var categoryAxis = new dataviz.RadarCategoryAxis(this.options.categoryAxis, this.chartService);\n this.polarAxis = categoryAxis;\n this.categoryAxis = categoryAxis;\n this.appendAxis(categoryAxis);\n this.aggregateCategories();\n this.createCategoryAxesLabels();\n },\n valueAxisOptions: function (defaults) {\n if (this._hasBarCharts) {\n deepExtend(defaults, {\n majorGridLines: { type: ARC },\n minorGridLines: { type: ARC }\n });\n }\n if (this._isStacked100) {\n deepExtend(defaults, {\n roundToMajorUnit: false,\n labels: { format: 'P0' }\n });\n }\n return deepExtend(defaults, this.options.valueAxis);\n },\n aggregateCategories: function () {\n CategoricalPlotArea.prototype.aggregateCategories.call(this, this.panes);\n },\n createCategoryAxesLabels: function () {\n CategoricalPlotArea.prototype.createCategoryAxesLabels.call(this, this.panes);\n },\n filterSeries: function (currentSeries) {\n return currentSeries;\n },\n createCharts: function () {\n var series = this.filterVisibleSeries(this.series);\n var pane = this.panes[0];\n this.createAreaChart(filterSeriesByType(series, [RADAR_AREA]), pane);\n this.createLineChart(filterSeriesByType(series, [RADAR_LINE]), pane);\n this.createBarChart(filterSeriesByType(series, [RADAR_COLUMN]), pane);\n },\n chartOptions: function (series) {\n var options = { series: series };\n var firstSeries = series[0];\n if (firstSeries) {\n var filteredSeries = this.filterVisibleSeries(series);\n var stack = firstSeries.stack;\n options.isStacked = stack && filteredSeries.length > 1;\n options.isStacked100 = stack && stack.type === '100%' && filteredSeries.length > 1;\n if (options.isStacked100) {\n this._isStacked100 = true;\n }\n }\n return options;\n },\n createAreaChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var areaChart = new RadarAreaChart(this, this.chartOptions(series));\n this.appendChart(areaChart, pane);\n },\n createLineChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var lineChart = new RadarLineChart(this, this.chartOptions(series));\n this.appendChart(lineChart, pane);\n },\n createBarChart: function (series, pane) {\n if (series.length === 0) {\n return;\n }\n var firstSeries = series[0];\n var options = this.chartOptions(series);\n options.gap = firstSeries.gap;\n options.spacing = firstSeries.spacing;\n var barChart = new RadarBarChart(this, options);\n this.appendChart(barChart, pane);\n this._hasBarCharts = true;\n },\n seriesCategoryAxis: function () {\n return this.categoryAxis;\n },\n _dispatchEvent: function (chart, e, eventType) {\n var coords = chart._eventCoordinates(e);\n var point = new Point(coords.x, coords.y);\n var category = this.categoryAxis.getCategory(point);\n var value = this.valueAxis.getValue(point);\n if (category !== null && value !== null) {\n chart.trigger(eventType, {\n element: eventElement(e),\n category: category,\n value: value\n });\n }\n },\n createCrosshairs: function () {\n }\n });\n deepExtend(RadarPlotArea.prototype, PlotAreaEventsMixin, {\n appendChart: CategoricalPlotArea.prototype.appendChart,\n aggregateSeries: CategoricalPlotArea.prototype.aggregateSeries,\n 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 if (force || (size.width > 0 || size.height > 0) && (!currentSize || size.width !== currentSize.width || size.height !== currentSize.height)) {\n this._size = size;\n this._resize(size, force);\n this.trigger('resize', size);\n }\n },\n _resize: function () {\n this._noTransitionsRedraw();\n },\n redraw: function (paneName) {\n this.applyDefaults(this.options);\n this.applySeriesColors();\n if (paneName) {\n var plotArea = this._model._plotArea;\n var pane = plotArea.findPane(paneName);\n plotArea.redraw(pane);\n } else {\n this._redraw();\n }\n },\n getAxis: function (name) {\n 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.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.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 return new Point(clientX - offset.left - padding.left, clientY - offset.top - padding.top);\n },\n _tap: function (e) {\n var this$1 = this;\n var drawingElement = this.surface.eventTarget(e);\n var element = this._drawingChartElement(drawingElement, e);\n 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 () {\n var plotArea = this._plotArea;\n this._mousemove.cancel();\n plotArea.hideCrosshairs();\n this._unsetActivePoint();\n },\n _unsetActivePoint: function () {\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) {\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) {\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 _destroyView: function () {\n var ref = this;\n var model = ref._model;\n var selections = ref._selections;\n if (model) {\n model.destroy();\n this._model = null;\n }\n if (selections) {\n while (selections.length > 0) {\n selections.shift().destroy();\n }\n }\n this._unsetActivePoint();\n if (this._tooltip) {\n this._tooltip.destroy();\n }\n if (this._highlight) {\n this._highlight.destroy();\n }\n if (this._zoomSelection) {\n this._zoomSelection.destroy();\n delete this._zoomSelection;\n }\n if (this._pannable) {\n this._pannable.destroy();\n delete this._pannable;\n }\n if (this._mousewheelZoom) {\n this._mousewheelZoom.destroy();\n delete this._mousewheelZoom;\n }\n }\n });\n function resolveAxisAliases(options) {\n var aliases = AXIS_NAMES;\n for (var idx = 0; idx < aliases.length; idx++) {\n var alias = aliases[idx] + 'Axes';\n if (options[alias]) {\n options[aliases[idx] + 'Axis'] = options[alias];\n delete options[alias];\n }\n }\n }\n function pointByCategoryName(points, name) {\n if (points) {\n for (var idx = 0; idx < points.length; idx++) {\n if (points[idx].category === name) {\n return [points[idx]];\n }\n }\n }\n }\n function applyAxisDefaults(options, themeOptions) {\n var themeAxisDefaults = (themeOptions || {}).axisDefaults || {};\n var axisName, axisDefaults, axes;\n function mapAxisOptions(axisOptions) {\n var axisColor = (axisOptions || {}).color || axisDefaults.color;\n var result = deepExtend({}, themeAxisDefaults, themeAxisDefaults[axisName], axisDefaults, axisDefaults[axisName], {\n line: { color: axisColor },\n labels: { color: axisColor },\n title: { color: axisColor }\n }, axisOptions);\n delete result[axisName];\n return result;\n }\n for (var idx = 0; idx < AXIS_NAMES.length; idx++) {\n axisName = AXIS_NAMES[idx] + 'Axis';\n axisDefaults = options.axisDefaults || {};\n axes = [].concat(options[axisName]);\n axes = axes.map(mapAxisOptions);\n options[axisName] = axes.length > 1 ? axes : axes[0];\n }\n }\n function applySeriesDefaults(options, themeOptions) {\n var series = options.series;\n var seriesLength = series.length;\n var seriesDefaults = options.seriesDefaults;\n var commonDefaults = deepExtend({}, options.seriesDefaults);\n var themeSeriesDefaults = themeOptions ? deepExtend({}, themeOptions.seriesDefaults) : {};\n var commonThemeDefaults = deepExtend({}, themeSeriesDefaults);\n cleanupNestedSeriesDefaults(commonDefaults);\n cleanupNestedSeriesDefaults(commonThemeDefaults);\n for (var i = 0; i < seriesLength; i++) {\n var seriesType = series[i].type || options.seriesDefaults.type;\n var baseOptions = deepExtend({ data: [] }, commonThemeDefaults, themeSeriesDefaults[seriesType], { tooltip: options.tooltip }, commonDefaults, seriesDefaults[seriesType]);\n series[i]._defaults = baseOptions;\n series[i] = deepExtend({}, baseOptions, series[i]);\n 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 CHANGE = 'change';\n var DATABOUND = 'dataBound';\n var LEAVE = 'leave';\n var VALUE = constants.VALUE;\n var PIE = constants.PIE;\n var DONUT = constants.DONUT;\n var FUNNEL = constants.FUNNEL;\n var Observable = kendo.Observable;\n var TOOLTIP_ANIMATION_DURATION = 150;\n var TOOLTIP_SHOW_DELAY = 100;\n var TOOLTIP_INVERSE = 'k-chart-tooltip-inverse';\n var SHARED_TOOLTIP_CLASS = 'k-chart-shared-tooltip';\n var RTL = 'rtl';\n services.DomEventsBuilder.register({\n create: function (element, events) {\n return new kendo.UserEvents(element, deepExtend({\n global: true,\n multiTouch: true,\n fastTap: true\n }, events));\n }\n });\n var ChartInstanceObserver = InstanceObserver.extend({\n handlerMap: {\n showTooltip: '_showTooltip',\n hideTooltip: '_hideTooltip',\n legendItemClick: '_onLegendItemClick',\n render: '_onRender',\n init: '_onInit'\n }\n });\n var Chart = Widget.extend({\n init: function (element, userOptions) {\n var dataSource;\n kendo.destroy(element);\n Widget.fn.init.call(this, element);\n if (userOptions) {\n dataSource = userOptions.dataSource;\n delete userOptions.dataSource;\n }\n this.options = deepExtend({}, this.options, userOptions);\n this.wrapper = this.element;\n this._attachEvents();\n if (userOptions) {\n userOptions.dataSource = dataSource;\n }\n this._seriesVisibility = new SeriesVisibilityState();\n this.bind(this.events, this.options);\n this._initDataSource(userOptions);\n kendo.notify(this, dataviz.ui);\n },\n events: [\n DATABOUND,\n SERIES_CLICK,\n SERIES_HOVER,\n 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();\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('
    ' + '
    ', {\n useWithBlock: false,\n paramName: 'd'\n });\n }\n tooltip.element = $(tooltip.template(tooltip.options));\n tooltip.move = proxy(tooltip.move, tooltip);\n tooltip._mouseleave = proxy(tooltip._mouseleave, tooltip);\n var mobileScrollerSelector = kendo.format('[{0}=\\'content\\'],[{0}=\\'scroller\\']', kendo.attr('role'));\n tooltip._mobileScroller = chartElement.closest(mobileScrollerSelector).data('kendoMobileScroller');\n },\n destroy: function () {\n this._clearShowTimeout();\n if (this.element) {\n this.element.off(MOUSELEAVE_NS).remove();\n this.element = null;\n }\n },\n setOptions: function (options) {\n this.options = deepExtend({}, this.options, options);\n },\n options: {\n opacity: 1,\n animation: { duration: TOOLTIP_ANIMATION_DURATION },\n sharedTemplate: '' + '' + '# for(var i = 0; i < points.length; i++) { #' + '# var point = points[i]; #' + '' + '# if(colorMarker) { # ' + '' + '# } #' + '# if(nameColumn) { # ' + '' + '# } #' + '' + '' + '# } #' + '
    #= categoryText #
    #if (point.series.name) {# #: point.series.name #: #} else {#   #}##= content(point) #
    ',\n categoryFormat: '{0:d}'\n },\n move: function () {\n var tooltip = this, options = tooltip.options, element = tooltip.element, offset;\n if (!tooltip.anchor || !tooltip.element) {\n return;\n }\n offset = tooltip._offset();\n if (!tooltip.visible) {\n element.css({\n top: offset.top,\n left: offset.left\n });\n }\n tooltip.visible = true;\n tooltip._ensureElement(document.body);\n element.stop(true, true).show().animate({\n left: offset.left,\n top: offset.top\n }, options.animation.duration);\n },\n _clearShowTimeout: function () {\n if (this.showTimeout) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n },\n getAnchor: function (size) {\n var anchor = this.anchor;\n var point = anchor.point;\n var align = anchor.align;\n var x = point.left;\n var y = point.top;\n if (align.horizontal === 'center') {\n x -= size.width / 2;\n } else if (align.horizontal === 'right') {\n x -= size.width;\n }\n if (align.vertical === 'center') {\n y -= size.height / 2;\n } else if (align.vertical === 'bottom') {\n y -= size.height;\n }\n return {\n x: x,\n y: y\n };\n },\n _offset: function () {\n var tooltip = this, size = tooltip._measure(), anchor = tooltip.getAnchor(size), top = anchor.y, left = anchor.x, zoomLevel = kendo.support.zoomLevel(), viewport = $(window), scrollTop = window.pageYOffset || document.documentElement.scrollTop || 0, scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || 0, movable = (this._mobileScroller || {}).movable;\n if (!movable || movable.scale === 1) {\n top += tooltip._fit(top - scrollTop, size.height, outerHeight(viewport) / zoomLevel);\n left += tooltip._fit(left - scrollLeft, size.width, outerWidth(viewport) / zoomLevel);\n } else {\n var transform = geom.transform().scale(movable.scale, movable.scale, [\n movable.x,\n movable.y\n ]);\n var point = new geom.Point(left, top).transform(transform);\n left = point.x;\n top = point.y;\n }\n return {\n top: top,\n left: left\n };\n },\n show: function (e) {\n this.anchor = e.anchor;\n this.element.css(normalizeStyle(e.style));\n this.element.toggleClass(TOOLTIP_INVERSE, !!e.className);\n this.element.toggleClass(SHARED_TOOLTIP_CLASS, !!e.shared);\n var content = e.shared ? this._sharedContent(e) : this._pointContent(e.point);\n this.element.html(content);\n this._clearShowTimeout();\n this.showTimeout = setTimeout(this.move, TOOLTIP_SHOW_DELAY);\n },\n hide: function () {\n var tooltip = this;\n clearTimeout(tooltip.showTimeout);\n tooltip._hideElement();\n if (tooltip.visible) {\n tooltip.point = null;\n tooltip.visible = false;\n tooltip.index = null;\n }\n },\n _sharedContent: function (e) {\n var points = e.points;\n var nameColumn = dataviz.grep(points, function (point) {\n return defined(point.series.name);\n }).length;\n var colorMarker = e.series.length > 1;\n var colspan = 1;\n if (nameColumn) {\n colspan++;\n }\n if (colorMarker) {\n colspan++;\n }\n var template = kendo.template(this.options.sharedTemplate);\n var content = template({\n points: points,\n category: e.category,\n categoryText: e.categoryText,\n content: this._pointContent,\n colorMarker: colorMarker,\n nameColumn: nameColumn,\n colspan: colspan\n });\n return content;\n },\n _measure: function () {\n this._ensureElement();\n var size = {\n width: outerWidth(this.element),\n height: outerHeight(this.element)\n };\n return size;\n },\n _ensureElement: function () {\n if (this.element) {\n this.element.appendTo(document.body).on(MOUSELEAVE_NS, this._mouseleave);\n }\n },\n _mouseleave: function (e) {\n var target = e.relatedTarget;\n var chart = this.chartElement[0];\n if (target && target !== chart && !$.contains(chart, target)) {\n this.trigger(LEAVE);\n }\n },\n _hideElement: function () {\n var tooltip = this;\n var element = this.element;\n if (element) {\n element.fadeOut({\n always: function () {\n if (!tooltip.visible) {\n element.off(MOUSELEAVE_NS).remove();\n }\n }\n });\n }\n },\n _pointContent: function (point) {\n var tooltip = this, options = deepExtend({}, tooltip.options, point.options.tooltip), content, tooltipTemplate;\n if (defined(point.value)) {\n content = point.value.toString();\n }\n if (options.template) {\n tooltipTemplate = template(options.template);\n content = tooltipTemplate({\n value: point.value,\n category: point.category,\n series: point.series,\n dataItem: point.dataItem,\n percentage: point.percentage,\n runningTotal: point.runningTotal,\n total: point.total,\n low: point.low,\n high: point.high,\n xLow: point.xLow,\n xHigh: point.xHigh,\n yLow: point.yLow,\n yHigh: point.yHigh\n });\n } else if (options.format) {\n content = point.formatValue(options.format);\n }\n return content;\n },\n _fit: function (offset, size, viewPortSize) {\n var output = 0;\n if (offset + size > viewPortSize) {\n output = viewPortSize - (offset + size);\n }\n if (offset < 0) {\n output = -offset;\n }\n return output;\n }\n });\n var CrosshairTooltip = Tooltip.extend({\n init: function (chartElement, options) {\n Tooltip.fn.init.call(this, chartElement, options);\n this.element.addClass('k-chart-crosshair-tooltip');\n },\n show: function (e) {\n var element = this.element;\n if (element) {\n this.anchor = e.anchor;\n this.element.css(e.style);\n this.element.html(this.content(e));\n this.move();\n }\n },\n move: function () {\n var tooltip = this, element = tooltip.element, offset = tooltip._offset();\n tooltip._ensureElement();\n element.css({\n top: offset.top,\n left: offset.left\n }).show();\n },\n content: function (e) {\n var content = e.value, options = e.crosshair.options.tooltip;\n if (options.template) {\n content = template(options.template)({ value: content });\n }\n return content;\n },\n hide: function () {\n this.element.hide();\n }\n });\n var ChartPane = Class.extend({\n init: function (chart, pane) {\n this._chart = chart;\n this._pane = pane;\n this.visual = pane.visual;\n this.chartsVisual = pane.chartContainer.visual;\n this.name = pane.options.name;\n },\n series: function () {\n var chart = this._chart;\n var seriesByPane = chart._plotArea.groupSeriesByPane();\n var series = seriesByPane[this.name || 'default'];\n var result = [];\n if (series) {\n for (var idx = 0; idx < series.length; idx++) {\n result.push(new ChartSeries(chart, series[idx]));\n }\n }\n return result;\n }\n });\n var ChartSeries = Class.extend({\n init: function (chart, options) {\n this._chart = chart;\n this._options = options;\n },\n points: function (filter) {\n var points = this._points;\n if (!points) {\n var series = this._seriesOptions();\n var plotArea = this._chart._plotArea;\n this._points = points = plotArea.pointsBySeriesIndex(series.index);\n }\n if (kendo.isFunction(filter)) {\n points = this._filterPoints(points, filter);\n }\n return points;\n },\n data: function (data) {\n var series = this._seriesOptions();\n if (data) {\n var chart = this._chart;\n var plotArea = chart._plotArea;\n series.data = data;\n if (series.categoryField) {\n var axis = plotArea.seriesCategoryAxis(series);\n var options = [].concat(chart.options.categoryAxis);\n chart._instance.bindCategoryAxisFromSeries(options[axis.axisIndex], axis.axisIndex);\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n }\n return series.data;\n },\n findPoint: function (filter) {\n var points = this.points();\n for (var idx = 0; idx < points.length; idx++) {\n if (filter(points[idx])) {\n return points[idx];\n }\n }\n },\n toggleHighlight: function (show, elements) {\n if (!elements) {\n elements = this.points();\n } else if (kendo.isFunction(elements)) {\n elements = this.points(elements);\n } else {\n elements = isArray(elements) ? elements : [elements];\n }\n this._chart._instance.togglePointsHighlight(show, elements);\n },\n toggleVisibility: function (visible, filter) {\n var chart = this._chart;\n var seriesOptions = this._seriesOptions();\n var hasFilter = kendo.isFunction(filter);\n if (!hasFilter) {\n seriesOptions.visible = visible;\n chart._seriesVisibility.save(seriesOptions);\n } else {\n if (inArray(seriesOptions.type, [\n PIE,\n DONUT,\n FUNNEL\n ])) {\n var data = this._filterData(filter);\n for (var idx = 0; idx < data.length; idx++) {\n data[idx].visible = visible;\n }\n } else {\n seriesOptions.visible = function (data) {\n return filter(data.dataItem) ? visible : true;\n };\n }\n }\n chart._noTransitionsRedraw();\n this._clearFields();\n },\n _filterData: function (filter) {\n var data = this._seriesOptions().data;\n var length = data.length;\n var result = [];\n for (var idx = 0; idx < length; idx++) {\n if (filter(data[idx])) {\n result.push(data[idx]);\n }\n }\n return result;\n },\n _filterPoints: function (points, filter) {\n var result = [];\n var length = points.length;\n for (var idx = 0; idx < length; idx++) {\n if (filter(points[idx])) {\n result.push(points[idx]);\n }\n }\n return result;\n },\n _seriesOptions: function () {\n var series = this._series;\n if (!series) {\n series = this._series = this._chart._seriesOptions(this._options);\n }\n return series;\n },\n _clearFields: function () {\n delete this._points;\n delete this._series;\n }\n });\n 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 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.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 });\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-header k-shadow k-navigator').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'Navigator',\n panStep: 1\n },\n events: ['pan'],\n dispose: function () {\n this._keyroot.off('keydown', this._keydown);\n },\n _pan: function (x, y) {\n var panStep = this.options.panStep;\n this.trigger('pan', {\n x: x * panStep,\n y: y * panStep\n });\n },\n _click: function (e) {\n var x = 0;\n var y = 0;\n var button = $(e.currentTarget);\n if (button.is('.k-navigator-up')) {\n y = 1;\n } else if (button.is('.k-navigator-down')) {\n y = -1;\n } else if (button.is('.k-navigator-right')) {\n x = 1;\n } else if (button.is('.k-navigator-left')) {\n x = -1;\n }\n this._pan(x, y);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.UP:\n this._pan(0, 1);\n e.preventDefault();\n break;\n case keys.DOWN:\n this._pan(0, -1);\n e.preventDefault();\n break;\n case keys.RIGHT:\n this._pan(1, 0);\n e.preventDefault();\n break;\n case keys.LEFT:\n this._pan(-1, 0);\n e.preventDefault();\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(Navigator);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/zoom', ['kendo.core'], f);\n}(function () {\n (function ($) {\n var kendo = window.kendo;\n var Widget = kendo.ui.Widget;\n var keys = kendo.keys;\n var proxy = $.proxy;\n function button(dir, iconClass) {\n return kendo.format('', dir, iconClass);\n }\n var NS = '.kendoZoomControl';\n var BUTTONS = button('in', 'k-i-plus') + button('out', 'k-i-minus');\n var PLUS = 187;\n var MINUS = 189;\n var FF_PLUS = 61;\n var FF_MINUS = 173;\n var ZoomControl = Widget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this._initOptions(options);\n this.element.addClass('k-widget k-zoom-control k-button-wrap k-buttons-horizontal k-button-group k-group-horizontal').append(BUTTONS).on('click' + NS, '.k-button', proxy(this, '_click'));\n var parentElement = this.element.parent().closest('[' + kendo.attr('role') + ']');\n this._keyroot = parentElement.length > 0 ? parentElement : this.element;\n this._tabindex(this._keyroot);\n this._keydown = proxy(this._keydown, this);\n this._keyroot.on('keydown', this._keydown);\n },\n options: {\n name: 'ZoomControl',\n zoomStep: 1\n },\n events: ['change'],\n _change: function (dir) {\n var zoomStep = this.options.zoomStep;\n this.trigger('change', { delta: dir * zoomStep });\n },\n _click: function (e) {\n var button = $(e.currentTarget);\n var dir = 1;\n if (button.is('.k-zoom-out')) {\n dir = -1;\n }\n this._change(dir);\n e.preventDefault();\n },\n _keydown: function (e) {\n switch (e.which) {\n case keys.NUMPAD_PLUS:\n case PLUS:\n case FF_PLUS:\n this._change(1);\n break;\n case keys.NUMPAD_MINUS:\n case MINUS:\n case FF_MINUS:\n this._change(-1);\n break;\n }\n }\n });\n kendo.dataviz.ui.plugin(ZoomControl);\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/crs', [\n 'dataviz/map/location',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, atan = math.atan, exp = math.exp, pow = math.pow, sin = math.sin, log = math.log, tan = math.tan, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, map = dataviz.map, Location = map.Location, util = kendo.drawing.util, rad = util.rad, deg = util.deg, limit = util.limitValue;\n var PI = math.PI, PI_DIV_2 = PI / 2, PI_DIV_4 = PI / 4, DEG_TO_RAD = PI / 180;\n var WGS84 = {\n a: 6378137,\n b: 6356752.314245179,\n f: 0.0033528106647474805,\n e: 0.08181919084262149\n };\n var Mercator = Class.extend({\n init: function (options) {\n this._initOptions(options);\n },\n MAX_LNG: 180,\n MAX_LAT: 85.0840590501,\n INVERSE_ITERATIONS: 15,\n INVERSE_CONVERGENCE: 1e-12,\n options: {\n centralMeridian: 0,\n datum: WGS84\n },\n forward: function (loc, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lat = limit(loc.lat, -proj.MAX_LAT, proj.MAX_LAT), lng = clamp ? limit(loc.lng, -proj.MAX_LNG, proj.MAX_LNG) : loc.lng, x = rad(lng - lng0) * r, y = proj._projectLat(lat);\n return new Point(x, y);\n },\n _projectLat: function (lat) {\n var datum = this.options.datum, ecc = datum.e, r = datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2), con = ecc * sin(y), p = pow((1 - con) / (1 + con), ecc / 2);\n return r * log(ts * p);\n },\n inverse: function (point, clamp) {\n var proj = this, options = proj.options, datum = options.datum, r = datum.a, lng0 = options.centralMeridian, lng = point.x / (DEG_TO_RAD * r) + lng0, lat = limit(proj._inverseY(point.y), -proj.MAX_LAT, proj.MAX_LAT);\n if (clamp) {\n lng = limit(lng, -proj.MAX_LNG, proj.MAX_LNG);\n }\n return new Location(lat, lng);\n },\n _inverseY: function (y) {\n var proj = this, datum = proj.options.datum, r = datum.a, ecc = datum.e, ecch = ecc / 2, ts = exp(-y / r), phi = PI_DIV_2 - 2 * atan(ts), i;\n for (i = 0; i <= proj.INVERSE_ITERATIONS; i++) {\n var con = ecc * sin(phi), p = pow((1 - con) / (1 + con), ecch), dphi = PI_DIV_2 - 2 * atan(ts * p) - phi;\n phi += dphi;\n if (math.abs(dphi) <= proj.INVERSE_CONVERGENCE) {\n break;\n }\n }\n return deg(phi);\n }\n });\n var SphericalMercator = Mercator.extend({\n MAX_LAT: 85.0511287798,\n _projectLat: function (lat) {\n var r = this.options.datum.a, y = rad(lat), ts = tan(PI_DIV_4 + y / 2);\n return r * log(ts);\n },\n _inverseY: function (y) {\n var r = this.options.datum.a, ts = exp(-y / r);\n return deg(PI_DIV_2 - 2 * atan(ts));\n }\n });\n var Equirectangular = Class.extend({\n forward: function (loc) {\n return new Point(loc.lng, loc.lat);\n },\n inverse: function (point) {\n return new Location(point.y, point.x);\n }\n });\n var EPSG3857 = Class.extend({\n init: function () {\n var crs = this, proj = crs._proj = new SphericalMercator();\n var c = this.c = 2 * PI * proj.options.datum.a;\n this._tm = g.transform().translate(0.5, 0.5).scale(1 / c, -1 / c);\n this._itm = g.transform().scale(c, -c).translate(-0.5, -0.5);\n },\n toPoint: function (loc, scale, clamp) {\n var point = this._proj.forward(loc, clamp);\n return point.transform(this._tm).scale(scale || 1);\n },\n toLocation: function (point, scale, clamp) {\n point = point.clone().scale(1 / (scale || 1)).transform(this._itm);\n return this._proj.inverse(point, clamp);\n }\n });\n var EPSG3395 = Class.extend({\n init: function () {\n this._proj = new Mercator();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n var EPSG4326 = Class.extend({\n init: function () {\n this._proj = new Equirectangular();\n },\n toPoint: function (loc) {\n return this._proj.forward(loc);\n },\n toLocation: function (point) {\n return this._proj.inverse(point);\n }\n });\n deepExtend(dataviz, {\n map: {\n crs: {\n EPSG3395: EPSG3395,\n EPSG3857: EPSG3857,\n EPSG4326: EPSG4326\n },\n datums: { WGS84: WGS84 },\n projections: {\n Equirectangular: Equirectangular,\n Mercator: Mercator,\n SphericalMercator: SphericalMercator\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/base', [\n 'kendo.core',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, Extent = dataviz.map.Extent, util = kendo.drawing.util, defined = util.defined;\n var Layer = Class.extend({\n init: function (map, options) {\n this._initOptions(options);\n this.map = map;\n this.element = $('
    ').css({\n 'zIndex': this.options.zIndex,\n 'opacity': this.options.opacity\n }).appendTo(map.scrollElement);\n this._beforeReset = proxy(this._beforeReset, this);\n this._reset = proxy(this._reset, this);\n this._resize = proxy(this._resize, this);\n this._panEnd = proxy(this._panEnd, this);\n this._activate();\n this._updateAttribution();\n },\n destroy: function () {\n this._deactivate();\n },\n show: function () {\n this.reset();\n this._activate();\n this._applyExtent(true);\n },\n hide: function () {\n this._deactivate();\n this._setVisibility(false);\n },\n reset: function () {\n this._beforeReset();\n this._reset();\n },\n _reset: function () {\n this._applyExtent();\n },\n _beforeReset: $.noop,\n _resize: $.noop,\n _panEnd: function () {\n this._applyExtent();\n },\n _applyExtent: function () {\n var options = this.options;\n var zoom = this.map.zoom();\n var matchMinZoom = !defined(options.minZoom) || zoom >= options.minZoom;\n var matchMaxZoom = !defined(options.maxZoom) || zoom <= options.maxZoom;\n var extent = Extent.create(options.extent);\n var inside = !extent || extent.overlaps(this.map.extent());\n this._setVisibility(matchMinZoom && matchMaxZoom && inside);\n },\n _setVisibility: function (visible) {\n this.element.css('display', visible ? '' : 'none');\n },\n _activate: function () {\n var map = this.map;\n map.bind('beforeReset', this._beforeReset);\n map.bind('reset', this._reset);\n map.bind('resize', this._resize);\n map.bind('panEnd', this._panEnd);\n },\n _deactivate: function () {\n var map = this.map;\n map.unbind('beforeReset', this._beforeReset);\n map.unbind('reset', this._reset);\n map.unbind('resize', this._resize);\n map.unbind('panEnd', this._panEnd);\n },\n _updateAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n attr.add(this.options.attribution);\n }\n }\n });\n deepExtend(dataviz, { map: { layers: { Layer: Layer } } });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/shape', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, Group = d.Group, last = d.util.last, defined = d.util.defined, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var ShapeLayer = Layer.extend({\n init: function (map, options) {\n this._pan = proxy(this._pan, this);\n Layer.fn.init.call(this, map, options);\n this.surface = d.Surface.create(this.element, {\n width: map.scrollElement.width(),\n height: map.scrollElement.height()\n });\n this._initRoot();\n this.movable = new kendo.ui.Movable(this.surface.element);\n this._markers = [];\n this._click = this._handler('shapeClick');\n this.surface.bind('click', this._click);\n this._mouseenter = this._handler('shapeMouseEnter');\n this.surface.bind('mouseenter', this._mouseenter);\n this._mouseleave = this._handler('shapeMouseLeave');\n this.surface.bind('mouseleave', this._mouseleave);\n this._initDataSource();\n },\n options: { autoBind: true },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.surface.destroy();\n this.dataSource.unbind('change', this._dataChange);\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._translateSurface();\n if (this._data) {\n this._load(this._data);\n }\n },\n _initRoot: function () {\n this._root = new Group();\n this.surface.draw(this._root);\n },\n _beforeReset: function () {\n this.surface.clear();\n this._initRoot();\n },\n _resize: function () {\n this.surface.size(this.map.size());\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._data = e.sender.view();\n this._load(this._data);\n },\n _load: function (data) {\n this._clearMarkers();\n if (!this._loader) {\n this._loader = new GeoJSONLoader(this.map, this.options.style, this);\n }\n var container = new Group();\n for (var i = 0; i < data.length; i++) {\n var shape = this._loader.parse(data[i]);\n if (shape) {\n container.append(shape);\n }\n }\n this._root.clear();\n this._root.append(container);\n },\n shapeCreated: function (shape) {\n var cancelled = false;\n if (shape instanceof d.Circle) {\n cancelled = defined(this._createMarker(shape));\n }\n if (!cancelled) {\n var args = {\n layer: this,\n shape: shape\n };\n cancelled = this.map.trigger('shapeCreated', args);\n }\n return cancelled;\n },\n featureCreated: function (e) {\n e.layer = this;\n this.map.trigger('shapeFeatureCreated', e);\n },\n _createMarker: function (shape) {\n var marker = this.map.markers.bind({ location: shape.location }, shape.dataItem);\n if (marker) {\n this._markers.push(marker);\n }\n return marker;\n },\n _clearMarkers: function () {\n for (var i = 0; i < this._markers.length; i++) {\n this.map.markers.remove(this._markers[i]);\n }\n this._markers = [];\n },\n _pan: function () {\n if (!this._panning) {\n this._panning = true;\n this.surface.suspendTracking();\n }\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._translateSurface();\n this.surface.resumeTracking();\n this._panning = false;\n },\n _translateSurface: function () {\n var map = this.map;\n var nw = map.locationToView(map.extent().nw);\n if (this.surface.translate) {\n this.surface.translate(nw);\n this.movable.moveTo({\n x: nw.x,\n y: nw.y\n });\n }\n },\n _handler: function (event) {\n var layer = this;\n return function (e) {\n if (e.element) {\n var args = {\n layer: layer,\n shape: e.element,\n originalEvent: e.originalEvent\n };\n layer.map.trigger(event, args);\n }\n };\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n this.map.bind('pan', this._pan);\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n this.map.unbind('pan', this._pan);\n }\n });\n var GeoJSONLoader = Class.extend({\n init: function (locator, defaultStyle, observer) {\n this.observer = observer;\n this.locator = locator;\n this.style = defaultStyle;\n },\n parse: function (item) {\n var root = new Group();\n var unwrap = true;\n if (item.type === 'Feature') {\n unwrap = false;\n this._loadGeometryTo(root, item.geometry, item);\n this._featureCreated(root, item);\n } else {\n this._loadGeometryTo(root, item, item);\n }\n if (unwrap && root.children.length < 2) {\n root = root.children[0];\n }\n return root;\n },\n _shapeCreated: function (shape) {\n var cancelled = false;\n if (this.observer && this.observer.shapeCreated) {\n cancelled = this.observer.shapeCreated(shape);\n }\n return cancelled;\n },\n _featureCreated: function (group, dataItem) {\n if (this.observer && this.observer.featureCreated) {\n this.observer.featureCreated({\n group: group,\n dataItem: dataItem,\n properties: dataItem.properties\n });\n }\n },\n _loadGeometryTo: function (container, geometry, dataItem) {\n var coords = geometry.coordinates;\n var i;\n var path;\n switch (geometry.type) {\n case 'LineString':\n path = this._loadPolygon(container, [coords], dataItem);\n this._setLineFill(path);\n break;\n case 'MultiLineString':\n for (i = 0; i < coords.length; i++) {\n path = this._loadPolygon(container, [coords[i]], dataItem);\n this._setLineFill(path);\n }\n break;\n case 'Polygon':\n this._loadPolygon(container, coords, dataItem);\n break;\n case 'MultiPolygon':\n for (i = 0; i < coords.length; i++) {\n this._loadPolygon(container, coords[i], dataItem);\n }\n break;\n case 'Point':\n this._loadPoint(container, coords, dataItem);\n break;\n case 'MultiPoint':\n for (i = 0; i < coords.length; i++) {\n this._loadPoint(container, coords[i], dataItem);\n }\n break;\n }\n },\n _setLineFill: function (path) {\n var segments = path.segments;\n if (segments.length < 4 || !segments[0].anchor().equals(last(segments).anchor())) {\n path.options.fill = null;\n }\n },\n _loadShape: function (container, shape) {\n if (!this._shapeCreated(shape)) {\n container.append(shape);\n }\n return shape;\n },\n _loadPolygon: function (container, rings, dataItem) {\n var shape = this._buildPolygon(rings);\n shape.dataItem = dataItem;\n return this._loadShape(container, shape);\n },\n _buildPolygon: function (rings) {\n var type = rings.length > 1 ? d.MultiPath : d.Path;\n var path = new type(this.style);\n for (var i = 0; i < rings.length; i++) {\n for (var j = 0; j < rings[i].length; j++) {\n var point = this.locator.locationToView(Location.fromLngLat(rings[i][j]));\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n }\n }\n return path;\n },\n _loadPoint: function (container, coords, dataItem) {\n var location = Location.fromLngLat(coords);\n var point = this.locator.locationToView(location);\n var circle = new g.Circle(point, 10);\n var shape = new d.Circle(circle, this.style);\n shape.dataItem = dataItem;\n shape.location = location;\n return this._loadShape(container, shape);\n }\n });\n deepExtend(kendo.data, {\n schemas: {\n geojson: {\n type: 'json',\n data: function (data) {\n if (data.type === 'FeatureCollection') {\n return data.features;\n }\n if (data.type === 'GeometryCollection') {\n return data.geometries;\n }\n return data;\n }\n }\n },\n transports: { geojson: { read: { dataType: 'json' } } }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n shape: ShapeLayer,\n ShapeLayer: ShapeLayer\n },\n GeoJSONLoader: GeoJSONLoader\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bubble', ['dataviz/map/layers/shape'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, getter = kendo.getter, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, d = kendo.drawing, util = d.util, defined = util.defined, map = dataviz.map, Location = map.Location, ShapeLayer = map.layers.ShapeLayer;\n var BubbleLayer = ShapeLayer.extend({\n options: {\n autoBind: true,\n locationField: 'location',\n valueField: 'value',\n minSize: 0,\n maxSize: 100,\n scale: 'sqrt',\n symbol: 'circle'\n },\n _load: function (data) {\n this.surface.clear();\n if (data.length === 0) {\n return;\n }\n var opt = this.options;\n var getValue = getter(opt.valueField);\n data = data.slice(0);\n data.sort(function (a, b) {\n return getValue(b) - getValue(a);\n });\n var scaleType = this._scaleType();\n var scale;\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n var location = getter(opt.locationField)(dataItem);\n var value = getter(opt.valueField)(dataItem);\n if (defined(location) && defined(value)) {\n if (!scale) {\n scale = new scaleType([\n 0,\n value\n ], [\n opt.minSize,\n opt.maxSize\n ]);\n }\n location = Location.create(location);\n var center = this.map.locationToView(location);\n var size = scale.map(value);\n var symbol = this._createSymbol({\n center: center,\n size: size,\n style: opt.style,\n dataItem: dataItem,\n location: location\n });\n symbol.dataItem = dataItem;\n symbol.location = location;\n symbol.value = value;\n this._drawSymbol(symbol);\n }\n }\n },\n _scaleType: function () {\n var scale = this.options.scale;\n if (kendo.isFunction(scale)) {\n return scale;\n }\n return dataviz.map.scales[scale];\n },\n _createSymbol: function (args) {\n var symbol = this.options.symbol;\n if (!kendo.isFunction(symbol)) {\n symbol = dataviz.map.symbols[symbol];\n }\n return symbol(args);\n },\n _drawSymbol: function (shape) {\n var args = {\n layer: this,\n shape: shape\n };\n var cancelled = this.map.trigger('shapeCreated', args);\n if (!cancelled) {\n this.surface.draw(shape);\n }\n }\n });\n var SqrtScale = kendo.Class.extend({\n init: function (domain, range) {\n this._domain = domain;\n this._range = range;\n var domainRange = Math.sqrt(domain[1]) - Math.sqrt(domain[0]);\n var outputRange = range[1] - range[0];\n this._ratio = outputRange / domainRange;\n },\n map: function (value) {\n var rel = (Math.sqrt(value) - Math.sqrt(this._domain[0])) * this._ratio;\n return this._range[0] + rel;\n }\n });\n var Symbols = {\n circle: function (args) {\n var geo = new g.Circle(args.center, args.size / 2);\n return new d.Circle(geo, args.style);\n },\n square: function (args) {\n var path = new d.Path(args.style);\n var halfSize = args.size / 2;\n var center = args.center;\n path.moveTo(center.x - halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y - halfSize).lineTo(center.x + halfSize, center.y + halfSize).lineTo(center.x - halfSize, center.y + halfSize).close();\n return path;\n }\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n bubble: BubbleLayer,\n BubbleLayer: BubbleLayer\n },\n scales: { sqrt: SqrtScale },\n symbols: Symbols\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/tile', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, template = kendo.template, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, g = kendo.geometry, Point = g.Point, Layer = dataviz.map.layers.Layer, util = kendo.util, renderSize = util.renderSize, drawingUtil = kendo.drawing.util, round = drawingUtil.round, limit = drawingUtil.limitValue;\n var TileLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n if (typeof this.options.subdomains === 'string') {\n this.options.subdomains = this.options.subdomains.split('');\n }\n var viewType = this._viewType();\n this._view = new viewType(this.element, this.options);\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this._view.destroy();\n this._view = null;\n },\n _beforeReset: function () {\n var map = this.map;\n var origin = map.locationToLayer(map.extent().nw).round();\n this._view.viewOrigin(origin);\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n this._updateView();\n this._view.reset();\n },\n _viewType: function () {\n return TileView;\n },\n _activate: function () {\n Layer.fn._activate.call(this);\n if (!kendo.support.mobileOS) {\n if (!this._pan) {\n this._pan = kendo.throttle(proxy(this._render, this), 100);\n }\n this.map.bind('pan', this._pan);\n }\n },\n _deactivate: function () {\n Layer.fn._deactivate.call(this);\n if (this._pan) {\n this.map.unbind('pan', this._pan);\n }\n },\n _updateView: function () {\n var view = this._view, map = this.map, extent = map.extent(), extentToPoint = {\n nw: map.locationToLayer(extent.nw).round(),\n se: map.locationToLayer(extent.se).round()\n };\n view.center(map.locationToLayer(map.center()));\n view.extent(extentToPoint);\n view.zoom(map.zoom());\n },\n _resize: function () {\n this._render();\n },\n _panEnd: function (e) {\n Layer.fn._panEnd.call(this, e);\n this._render();\n },\n _render: function () {\n this._updateView();\n this._view.render();\n }\n });\n var TileView = Class.extend({\n init: function (element, options) {\n this.element = element;\n this._initOptions(options);\n this.pool = new TilePool();\n },\n options: {\n tileSize: 256,\n subdomains: [\n 'a',\n 'b',\n 'c'\n ],\n urlTemplate: ''\n },\n center: function (center) {\n this._center = center;\n },\n extent: function (extent) {\n this._extent = extent;\n },\n viewOrigin: function (origin) {\n this._viewOrigin = origin;\n },\n zoom: function (zoom) {\n this._zoom = zoom;\n },\n pointToTileIndex: function (point) {\n return new Point(math.floor(point.x / this.options.tileSize), math.floor(point.y / this.options.tileSize));\n },\n tileCount: function () {\n var size = this.size(), firstTileIndex = this.pointToTileIndex(this._extent.nw), nw = this._extent.nw, point = this.indexToPoint(firstTileIndex).translate(-nw.x, -nw.y);\n return {\n x: math.ceil((math.abs(point.x) + size.width) / this.options.tileSize),\n y: math.ceil((math.abs(point.y) + size.height) / this.options.tileSize)\n };\n },\n size: function () {\n var nw = this._extent.nw, se = this._extent.se, diff = se.clone().translate(-nw.x, -nw.y);\n return {\n width: diff.x,\n height: diff.y\n };\n },\n indexToPoint: function (index) {\n var x = index.x, y = index.y;\n return new Point(x * this.options.tileSize, y * this.options.tileSize);\n },\n subdomainText: function () {\n var subdomains = this.options.subdomains;\n return subdomains[this.subdomainIndex++ % subdomains.length];\n },\n destroy: function () {\n this.element.empty();\n this.pool.empty();\n },\n reset: function () {\n this.pool.reset();\n this.subdomainIndex = 0;\n this.render();\n },\n render: function () {\n var size = this.tileCount(), firstTileIndex = this.pointToTileIndex(this._extent.nw), tile, x, y;\n for (x = 0; x < size.x; x++) {\n for (y = 0; y < size.y; y++) {\n tile = this.createTile({\n x: firstTileIndex.x + x,\n y: firstTileIndex.y + y\n });\n if (!tile.visible) {\n tile.show();\n }\n }\n }\n },\n createTile: function (currentIndex) {\n var options = this.tileOptions(currentIndex);\n var tile = this.pool.get(this._center, options);\n if (tile.element.parent().length === 0) {\n this.element.append(tile.element);\n }\n return tile;\n },\n tileOptions: function (currentIndex) {\n var index = this.wrapIndex(currentIndex), point = this.indexToPoint(currentIndex), origin = this._viewOrigin, offset = point.clone().translate(-origin.x, -origin.y);\n return {\n index: index,\n currentIndex: currentIndex,\n point: point,\n offset: roundPoint(offset),\n zoom: this._zoom,\n size: this.options.tileSize,\n subdomain: this.subdomainText(),\n urlTemplate: this.options.urlTemplate,\n errorUrlTemplate: this.options.errorUrlTemplate\n };\n },\n wrapIndex: function (index) {\n var boundary = math.pow(2, this._zoom);\n return {\n x: this.wrapValue(index.x, boundary),\n y: limit(index.y, 0, boundary - 1)\n };\n },\n wrapValue: function (value, boundary) {\n var remainder = math.abs(value) % boundary;\n if (value >= 0) {\n value = remainder;\n } else {\n value = boundary - (remainder === 0 ? boundary : remainder);\n }\n return value;\n }\n });\n var ImageTile = Class.extend({\n init: function (id, options) {\n this.id = id;\n this.visible = true;\n this._initOptions(options);\n this.createElement();\n this.show();\n },\n options: {\n urlTemplate: '',\n errorUrlTemplate: ''\n },\n createElement: function () {\n this.element = $('\\'\\'').css({\n width: this.options.size,\n height: this.options.size\n }).on('error', proxy(function (e) {\n if (this.errorUrl()) {\n e.target.setAttribute('src', this.errorUrl());\n } else {\n e.target.removeAttribute('src');\n }\n }, this));\n },\n show: function () {\n var element = this.element[0];\n element.style.top = renderSize(this.options.offset.y);\n element.style.left = renderSize(this.options.offset.x);\n var url = this.url();\n if (url) {\n element.setAttribute('src', url);\n }\n element.style.visibility = 'visible';\n this.visible = true;\n },\n hide: function () {\n this.element[0].style.visibility = 'hidden';\n this.visible = false;\n },\n url: function () {\n var urlResult = template(this.options.urlTemplate);\n return urlResult(this.urlOptions());\n },\n errorUrl: function () {\n var urlResult = template(this.options.errorUrlTemplate);\n return urlResult(this.urlOptions());\n },\n urlOptions: function () {\n var options = this.options;\n return {\n zoom: options.zoom,\n subdomain: options.subdomain,\n z: options.zoom,\n x: options.index.x,\n y: options.index.y,\n s: options.subdomain,\n quadkey: options.quadkey,\n q: options.quadkey,\n culture: options.culture,\n c: options.culture\n };\n },\n destroy: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n }\n });\n var TilePool = Class.extend({\n init: function () {\n this._items = [];\n },\n options: { maxSize: 100 },\n get: function (center, options) {\n if (this._items.length >= this.options.maxSize) {\n this._remove(center);\n }\n return this._create(options);\n },\n empty: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].destroy();\n }\n this._items = [];\n },\n reset: function () {\n var items = this._items;\n for (var i = 0; i < items.length; i++) {\n items[i].hide();\n }\n },\n _create: function (options) {\n var items = this._items;\n var tile;\n var id = util.hashKey(options.point.toString() + options.offset.toString() + options.zoom + options.urlTemplate);\n for (var i = 0; i < items.length; i++) {\n if (items[i].id === id) {\n tile = items[i];\n break;\n }\n }\n if (tile) {\n tile.show();\n } else {\n tile = new ImageTile(id, options);\n this._items.push(tile);\n }\n return tile;\n },\n _remove: function (center) {\n var items = this._items;\n var maxDist = -1;\n var index = -1;\n for (var i = 0; i < items.length; i++) {\n var dist = items[i].options.point.distanceTo(center);\n if (dist > maxDist && !items[i].visible) {\n index = i;\n maxDist = dist;\n }\n }\n if (index !== -1) {\n items[index].destroy();\n items.splice(index, 1);\n }\n }\n });\n function roundPoint(point) {\n return new Point(round(point.x), round(point.y));\n }\n deepExtend(dataviz, {\n map: {\n layers: {\n tile: TileLayer,\n TileLayer: TileLayer,\n ImageTile: ImageTile,\n TilePool: TilePool,\n TileView: TileView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/bing', ['dataviz/map/layers/tile'], f);\n}(function () {\n (function ($, undefined) {\n var kendo = window.kendo, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, defined = kendo.drawing.util.defined, Extent = dataviz.map.Extent, Location = dataviz.map.Location, TileLayer = dataviz.map.layers.TileLayer, TileView = dataviz.map.layers.TileView;\n var BingLayer = TileLayer.extend({\n init: function (map, options) {\n this.options.baseUrl = this._scheme() + '://dev.virtualearth.net/REST/v1/Imagery/Metadata/';\n TileLayer.fn.init.call(this, map, options);\n this._onMetadata = $.proxy(this._onMetadata, this);\n this._fetchMetadata();\n },\n options: { imagerySet: 'road' },\n _fetchMetadata: function () {\n var options = this.options;\n if (!options.key) {\n throw new Error('Bing tile layer: API key is required');\n }\n $.ajax({\n url: options.baseUrl + options.imagerySet,\n data: {\n output: 'json',\n include: 'ImageryProviders',\n key: options.key,\n uriScheme: this._scheme()\n },\n type: 'get',\n dataType: 'jsonp',\n jsonp: 'jsonp',\n success: this._onMetadata\n });\n },\n _scheme: function (proto) {\n proto = proto || window.location.protocol;\n return proto.replace(':', '') === 'https' ? 'https' : 'http';\n },\n _onMetadata: function (data) {\n if (data && data.resourceSets.length) {\n var resource = this.resource = data.resourceSets[0].resources[0];\n deepExtend(this._view.options, {\n urlTemplate: resource.imageUrl.replace('{subdomain}', '#= subdomain #').replace('{quadkey}', '#= quadkey #').replace('{culture}', '#= culture #'),\n subdomains: resource.imageUrlSubdomains\n });\n var options = this.options;\n if (!defined(options.minZoom)) {\n options.minZoom = resource.zoomMin;\n }\n if (!defined(options.maxZoom)) {\n options.maxZoom = resource.zoomMax;\n }\n this._addAttribution();\n if (this.element.css('display') !== 'none') {\n this._reset();\n }\n }\n },\n _viewType: function () {\n return BingView;\n },\n _addAttribution: function () {\n var attr = this.map.attribution;\n if (attr) {\n var items = this.resource.imageryProviders;\n if (items) {\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n for (var y = 0; y < item.coverageAreas.length; y++) {\n var area = item.coverageAreas[y];\n attr.add({\n text: item.attribution,\n minZoom: area.zoomMin,\n maxZoom: area.zoomMax,\n extent: new Extent(new Location(area.bbox[2], area.bbox[1]), new Location(area.bbox[0], area.bbox[3]))\n });\n }\n }\n }\n }\n },\n imagerySet: function (value) {\n if (value) {\n this.options.imagerySet = value;\n this.map.attribution.clear();\n this._fetchMetadata();\n } else {\n return this.options.imagerySet;\n }\n }\n });\n var BingView = TileView.extend({\n options: { culture: 'en-US' },\n tileOptions: function (currentIndex) {\n var options = TileView.fn.tileOptions.call(this, currentIndex);\n options.culture = this.options.culture;\n options.quadkey = this.tileQuadKey(this.wrapIndex(currentIndex));\n return options;\n },\n tileQuadKey: function (index) {\n var quadKey = '', digit, mask, i;\n for (i = this._zoom; i > 0; i--) {\n digit = 0;\n mask = 1 << i - 1;\n if ((index.x & mask) !== 0) {\n digit++;\n }\n if ((index.y & mask) !== 0) {\n digit += 2;\n }\n quadKey += digit;\n }\n return quadKey;\n }\n });\n deepExtend(dataviz, {\n map: {\n layers: {\n bing: BingLayer,\n BingLayer: BingLayer,\n BingView: BingView\n }\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/layers/marker', [\n 'dataviz/map/layers/base',\n 'dataviz/map/location',\n 'kendo.data',\n 'kendo.tooltip'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, indexOf = $.inArray, proxy = $.proxy, kendo = window.kendo, Class = kendo.Class, DataSource = kendo.data.DataSource, Tooltip = kendo.ui.Tooltip, dataviz = kendo.dataviz, deepExtend = kendo.deepExtend, map = dataviz.map, Location = map.Location, Layer = map.layers.Layer;\n var MarkerLayer = Layer.extend({\n init: function (map, options) {\n Layer.fn.init.call(this, map, options);\n this._markerClick = proxy(this._markerClick, this);\n this.element.on('click', '.k-marker', this._markerClick);\n this.items = [];\n this._initDataSource();\n },\n destroy: function () {\n Layer.fn.destroy.call(this);\n this.element.off('click', '.k-marker', this._markerClick);\n this.dataSource.unbind('change', this._dataChange);\n this.clear();\n },\n options: {\n zIndex: 1000,\n autoBind: true,\n dataSource: {},\n locationField: 'location',\n titleField: 'title'\n },\n add: function (arg) {\n if ($.isArray(arg)) {\n for (var i = 0; i < arg.length; i++) {\n this._addOne(arg[i]);\n }\n } else {\n return this._addOne(arg);\n }\n },\n remove: function (marker) {\n marker.destroy();\n var index = indexOf(marker, this.items);\n if (index > -1) {\n this.items.splice(index, 1);\n }\n },\n clear: function () {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].destroy();\n }\n this.items = [];\n },\n update: function (marker) {\n var loc = marker.location();\n if (loc) {\n marker.showAt(this.map.locationToView(loc));\n var args = {\n marker: marker,\n layer: this\n };\n this.map.trigger('markerActivate', args);\n }\n },\n _reset: function () {\n Layer.fn._reset.call(this);\n var items = this.items;\n for (var i = 0; i < items.length; i++) {\n this.update(items[i]);\n }\n },\n bind: function (options, dataItem) {\n var marker = map.Marker.create(options, this.options);\n marker.dataItem = dataItem;\n var args = {\n marker: marker,\n layer: this\n };\n var cancelled = this.map.trigger('markerCreated', args);\n if (!cancelled) {\n this.add(marker);\n return marker;\n }\n },\n setDataSource: function (dataSource) {\n if (this.dataSource) {\n this.dataSource.unbind('change', this._dataChange);\n }\n this.dataSource = kendo.data.DataSource.create(dataSource);\n this.dataSource.bind('change', this._dataChange);\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _addOne: function (arg) {\n var marker = Marker.create(arg, this.options);\n marker.addTo(this);\n return marker;\n },\n _initDataSource: function () {\n var dsOptions = this.options.dataSource;\n this._dataChange = proxy(this._dataChange, this);\n this.dataSource = DataSource.create(dsOptions).bind('change', this._dataChange);\n if (dsOptions && this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n _dataChange: function (e) {\n this._load(e.sender.view());\n },\n _load: function (data) {\n this._data = data;\n this.clear();\n var getLocation = kendo.getter(this.options.locationField);\n var getTitle = kendo.getter(this.options.titleField);\n for (var i = 0; i < data.length; i++) {\n var dataItem = data[i];\n this.bind({\n location: getLocation(dataItem),\n title: getTitle(dataItem)\n }, dataItem);\n }\n },\n _markerClick: function (e) {\n var args = {\n marker: $(e.target).data('kendoMarker'),\n layer: this\n };\n this.map.trigger('markerClick', args);\n }\n });\n var Marker = Class.extend({\n init: function (options) {\n this.options = options || {};\n },\n addTo: function (parent) {\n this.layer = parent.markers || parent;\n this.layer.items.push(this);\n this.layer.update(this);\n },\n location: function (value) {\n if (value) {\n this.options.location = Location.create(value).toArray();\n if (this.layer) {\n this.layer.update(this);\n }\n return this;\n } else {\n return Location.create(this.options.location);\n }\n },\n showAt: function (point) {\n this.render();\n this.element.css({\n left: math.round(point.x),\n top: math.round(point.y)\n });\n if (this.tooltip && this.tooltip.popup) {\n this.tooltip.popup._position();\n }\n },\n hide: function () {\n if (this.element) {\n this.element.remove();\n this.element = null;\n }\n if (this.tooltip) {\n this.tooltip.destroy();\n this.tooltip = null;\n }\n },\n destroy: function () {\n this.layer = null;\n this.hide();\n },\n render: function () {\n if (!this.element) {\n var options = this.options;\n var layer = this.layer;\n this.element = $(doc.createElement('span')).addClass('k-marker k-icon k-i-marker-' + kendo.toHyphens(options.shape || 'pin')).attr('title', options.title).attr(options.attributes || {}).data('kendoMarker', this).css('zIndex', options.zIndex);\n if (layer) {\n layer.element.append(this.element);\n }\n this.renderTooltip();\n }\n },\n renderTooltip: function () {\n var marker = this;\n var title = marker.options.title;\n var options = marker.options.tooltip || {};\n if (options && Tooltip) {\n var template = options.template;\n if (template) {\n var contentTemplate = kendo.template(template);\n options.content = function (e) {\n e.location = marker.location();\n e.marker = marker;\n return contentTemplate(e);\n };\n }\n if (title || options.content || options.contentUrl) {\n this.tooltip = new Tooltip(this.element, options);\n this.tooltip.marker = this;\n }\n }\n }\n });\n Marker.create = function (arg, defaults) {\n if (arg instanceof Marker) {\n return arg;\n }\n return new Marker(deepExtend({}, defaults, arg));\n };\n deepExtend(dataviz, {\n map: {\n layers: {\n marker: MarkerLayer,\n MarkerLayer: MarkerLayer\n },\n Marker: Marker\n }\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/map/main', [\n 'dataviz/map/crs',\n 'dataviz/map/location'\n ], f);\n}(function () {\n (function ($, undefined) {\n var doc = document, math = Math, min = math.min, pow = math.pow, proxy = $.proxy, kendo = window.kendo, Widget = kendo.ui.Widget, deepExtend = kendo.deepExtend, dataviz = kendo.dataviz, ui = dataviz.ui, g = kendo.geometry, Point = g.Point, map = dataviz.map, Extent = map.Extent, Location = map.Location, EPSG3857 = map.crs.EPSG3857, util = kendo.util, renderPos = util.renderPos, drawingUtil = kendo.drawing.util, defined = drawingUtil.defined, limit = drawingUtil.limitValue, valueOrDefault = drawingUtil.valueOrDefault;\n var CSS_PREFIX = 'k-', FRICTION = 0.9, FRICTION_MOBILE = 0.93, MOUSEWHEEL = 'DOMMouseScroll mousewheel', VELOCITY_MULTIPLIER = 5, 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, 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', GROUP_START = 'k-group-start', GROUP_END = 'k-group-end', PRIMARY = 'k-primary', ICON = 'k-icon', ICON_PREFIX = 'k-i-', BUTTON_ICON = 'k-button-icon', BUTTON_ICON_TEXT = 'k-button-icontext', LIST_CONTAINER = 'k-list-container k-split-container', SPLIT_BUTTON_ARROW = 'k-split-button-arrow', OVERFLOW_ANCHOR = 'k-overflow-anchor', OVERFLOW_CONTAINER = 'k-overflow-container', FIRST_TOOLBAR_VISIBLE = 'k-toolbar-first-visible', LAST_TOOLBAR_VISIBLE = 'k-toolbar-last-visible', CLICK = 'click', TOGGLE = 'toggle', OPEN = 'open', CLOSE = 'close', OVERFLOW_OPEN = 'overflowOpen', OVERFLOW_CLOSE = 'overflowClose', OVERFLOW_NEVER = 'never', OVERFLOW_AUTO = 'auto', OVERFLOW_ALWAYS = 'always', OVERFLOW_HIDDEN = 'k-overflow-hidden', OPTION_LIST_SUFFIX = '_optionlist', KENDO_UID_ATTR = kendo.attr('uid');\n kendo.toolbar = {};\n var components = {\n overflowAnchor: '
    ',\n overflowContainer: '
      '\n };\n kendo.toolbar.registerComponent = function (name, toolbar, overflow) {\n components[name] = {\n toolbar: toolbar,\n overflow: overflow\n };\n };\n var Item = kendo.Class.extend({\n addOverflowAttr: function () {\n this.element.attr(kendo.attr('overflow'), this.options.overflow || OVERFLOW_AUTO);\n },\n addUidAttr: function () {\n this.element.attr(KENDO_UID_ATTR, this.options.uid);\n },\n addIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id);\n }\n },\n addOverflowIdAttr: function () {\n if (this.options.id) {\n this.element.attr('id', this.options.id + '_overflow');\n }\n },\n attributes: function () {\n if (this.options.attributes) {\n this.element.attr(this.options.attributes);\n }\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).show();\n this.options.hidden = false;\n },\n hide: function () {\n this.element.addClass(STATE_HIDDEN).hide();\n if (this.overflow && this.overflowHidden) {\n this.overflowHidden();\n }\n this.options.hidden = true;\n },\n remove: function () {\n this.element.remove();\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n twin: function () {\n var uid = this.element.attr(KENDO_UID_ATTR);\n if (this.overflow && this.options.splitContainerId) {\n return $('#' + this.options.splitContainerId).find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.overflow) {\n return this.toolbar.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n } else if (this.toolbar.options.resizable) {\n return this.toolbar.popup.element.find('[' + KENDO_UID_ATTR + '=\\'' + uid + '\\']').data(this.options.type);\n }\n }\n });\n kendo.toolbar.Item = Item;\n var Button = Item.extend({\n init: function (options, toolbar) {\n var element = options.useButtonTag ? $('') : $('');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n if (options.primary) {\n element.addClass(PRIMARY);\n }\n if (options.togglable) {\n element.addClass(TOGGLE_BUTTON);\n this.toggle(options.selected);\n }\n if (options.url !== undefined && !options.useButtonTag) {\n element.attr('href', options.url);\n if (options.mobile) {\n element.attr(kendo.attr('role'), 'button');\n }\n }\n if (options.group) {\n element.attr(kendo.attr('group'), options.group);\n this.group = this.toolbar.addToGroup(this, options.group);\n }\n if (!options.togglable && options.click && isFunction(options.click)) {\n this.clickHandler = options.click;\n }\n if (options.togglable && options.toggle && isFunction(options.toggle)) {\n this.toggleHandler = options.toggle;\n }\n },\n toggle: function (state, propagate) {\n state = !!state;\n if (this.group && state) {\n this.group.select(this);\n } else if (!this.group) {\n this.select(state);\n }\n if (propagate && this.twin()) {\n this.twin().toggle(state);\n }\n },\n getParentGroup: function () {\n if (this.options.isChild) {\n return this.element.closest('.' + BUTTON_GROUP).data('buttonGroup');\n }\n },\n _addGraphics: function () {\n var element = this.element, icon = this.options.icon, spriteCssClass = this.options.spriteCssClass, imageUrl = this.options.imageUrl, isEmpty, span, img;\n if (spriteCssClass || imageUrl || icon) {\n isEmpty = true;\n element.contents().filter(function () {\n return !$(this).hasClass('k-sprite') && !$(this).hasClass(ICON) && !$(this).hasClass('k-image');\n }).each(function (idx, el) {\n if (el.nodeType == 1 || el.nodeType == 3 && $.trim(el.nodeValue).length > 0) {\n isEmpty = false;\n }\n });\n if (isEmpty) {\n element.addClass(BUTTON_ICON);\n } else {\n element.addClass(BUTTON_ICON_TEXT);\n }\n }\n if (icon) {\n span = element.children('span.' + ICON).first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(ICON_PREFIX + icon);\n } else if (spriteCssClass) {\n span = element.children('span.k-sprite').first();\n if (!span[0]) {\n span = $('').prependTo(element);\n }\n span.addClass(spriteCssClass);\n } else if (imageUrl) {\n img = element.children('img.k-image').first();\n if (!img[0]) {\n img = $('\"icon\"').prependTo(element);\n }\n img.attr('src', imageUrl);\n }\n }\n });\n kendo.toolbar.Button = Button;\n var ToolBarButton = Button.extend({\n init: function (options, toolbar) {\n Button.fn.init.call(this, options, toolbar);\n var element = this.element;\n element.addClass(BUTTON);\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (options.showText != 'overflow' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html(options.text);\n }\n }\n options.hasIcon = options.showIcon != 'overflow' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n this.element.toggleClass(STATE_ACTIVE, selected);\n this.options.selected = selected;\n }\n });\n kendo.toolbar.ToolBarButton = ToolBarButton;\n var OverflowButton = Button.extend({\n init: function (options, toolbar) {\n this.overflow = true;\n Button.fn.init.call(this, $.extend({}, options), toolbar);\n var element = this.element;\n if (options.showText != 'toolbar' && options.text) {\n if (options.mobile) {\n element.html('' + options.text + '');\n } else {\n element.html('' + options.text + '');\n }\n }\n options.hasIcon = options.showIcon != 'toolbar' && (options.icon || options.spriteCssClass || options.imageUrl);\n if (options.hasIcon) {\n this._addGraphics();\n }\n if (!options.isChild) {\n this._wrap();\n }\n this.addOverflowIdAttr();\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.enable(options.enable);\n element.addClass(OVERFLOW_BUTTON + ' ' + BUTTON);\n if (options.hidden) {\n this.hide();\n }\n if (options.togglable) {\n this.toggle(options.selected);\n }\n this.element.data({\n type: 'button',\n button: this\n });\n },\n _wrap: function () {\n this.element = this.element.wrap('
    • ').parent();\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n },\n select: function (selected) {\n if (selected === undefined) {\n selected = false;\n }\n if (this.options.isChild) {\n this.element.toggleClass(STATE_ACTIVE, selected);\n } else {\n this.element.find('.k-button').toggleClass(STATE_ACTIVE, selected);\n }\n this.options.selected = selected;\n }\n });\n kendo.toolbar.OverflowButton = OverflowButton;\n kendo.toolbar.registerComponent('button', ToolBarButton, OverflowButton);\n var ButtonGroup = Item.extend({\n createButtons: function (buttonConstructor) {\n var options = this.options;\n var items = options.buttons || [];\n var item;\n for (var i = 0; i < items.length; i++) {\n if (!items[i].uid) {\n items[i].uid = kendo.guid();\n }\n item = new buttonConstructor($.extend({\n mobile: options.mobile,\n isChild: true,\n type: 'button'\n }, items[i]), this.toolbar);\n item.element.appendTo(this.element);\n }\n },\n refresh: function () {\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):first').addClass(GROUP_START);\n this.element.children().filter(':not(\\'.' + STATE_HIDDEN + '\\'):last').addClass(GROUP_END);\n }\n });\n kendo.toolbar.ButtonGroup = ButtonGroup;\n var ToolBarButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.addIdAttr();\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n this.createButtons(ToolBarButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass(BUTTON_GROUP);\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n }\n });\n kendo.toolbar.ToolBarButtonGroup = ToolBarButtonGroup;\n var OverflowButtonGroup = ButtonGroup.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
    • ');\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.addOverflowIdAttr();\n this.createButtons(OverflowButton);\n this.attributes();\n this.addUidAttr();\n this.addOverflowAttr();\n this.refresh();\n element.addClass((options.mobile ? '' : BUTTON_GROUP) + ' k-overflow-group');\n this.element.data({\n type: 'buttonGroup',\n buttonGroup: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowButtonGroup = OverflowButtonGroup;\n kendo.toolbar.registerComponent('buttonGroup', ToolBarButtonGroup, OverflowButtonGroup);\n var ToolBarSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      ');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('');\n this.popupElement = $('
        ');\n this.mainButton.element.removeAttr('href tabindex').appendTo(element);\n this.arrowButton.appendTo(element);\n this.popupElement.appendTo(element);\n if (options.align) {\n element.addClass('k-align-' + options.align);\n }\n if (!options.id) {\n options.id = options.uid;\n }\n element.attr('id', options.id + '_wrapper');\n this.addOverflowAttr();\n this.addUidAttr();\n this.createMenuButtons();\n this.createPopup();\n this._navigatable();\n this.mainButton.main = true;\n this.enable(options.enable);\n if (options.hidden) {\n this.hide();\n }\n element.data({\n type: 'splitButton',\n splitButton: this,\n kendoPopup: this.popup\n });\n },\n _navigatable: function () {\n var that = this;\n that.popupElement.on('keydown', '.' + BUTTON, function (e) {\n var li = $(e.target).parent();\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that.toggle();\n that.focus();\n } else if (e.keyCode === keys.DOWN) {\n findFocusableSibling(li, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n findFocusableSibling(li, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.toolbar.userEvents.trigger('tap', { target: $(e.target) });\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n },\n createMenuButtons: function () {\n var options = this.options;\n var items = options.menuButtons;\n var item;\n for (var i = 0; i < items.length; i++) {\n item = new ToolBarButton($.extend({\n mobile: options.mobile,\n type: 'button',\n click: options.click\n }, items[i]), this.toolbar);\n item.element.wrap('
      • ').parent().appendTo(this.popupElement);\n }\n },\n createPopup: function () {\n var that = this;\n var options = this.options;\n var element = this.element;\n this.popupElement.attr('id', options.id + OPTION_LIST_SUFFIX).attr(KENDO_UID_ATTR, options.rootUid);\n if (options.mobile) {\n this.popupElement = actionSheetWrap(this.popupElement);\n }\n this.popup = this.popupElement.kendoPopup({\n appendTo: options.mobile ? $(options.mobile).children('.km-pane') : null,\n anchor: element,\n isRtl: this.toolbar._isRtl,\n copyAnchorStyles: false,\n animation: options.animation,\n open: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(OPEN, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n return;\n }\n that.adjustPopupWidth(e.sender);\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n var isDefaultPrevented = that.toolbar.trigger(CLOSE, { target: element });\n if (isDefaultPrevented) {\n e.preventDefault();\n }\n element.focus();\n }\n }).data('kendoPopup');\n this.popup.element.on(CLICK, 'a.k-button', preventClick);\n },\n adjustPopupWidth: function (popup) {\n var anchor = popup.options.anchor, computedWidth = outerWidth(anchor), width;\n kendo.wrap(popup.element).addClass('k-split-wrapper');\n if (popup.element.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(popup.element) - popup.element.width());\n } else {\n width = computedWidth;\n }\n popup.element.css({\n fontFamily: anchor.css('font-family'),\n 'min-width': width\n });\n },\n remove: function () {\n this.popup.element.off(CLICK, 'a.k-button');\n this.popup.destroy();\n this.element.remove();\n },\n toggle: function () {\n if (this.options.enable || this.popup.visible()) {\n this.popup.toggle();\n }\n },\n enable: function (isEnabled) {\n if (isEnabled === undefined) {\n isEnabled = true;\n }\n this.mainButton.enable(isEnabled);\n this.element.toggleClass(STATE_DISABLED, !isEnabled);\n this.options.enable = isEnabled;\n },\n focus: function () {\n this.element.focus();\n },\n hide: function () {\n if (this.popup) {\n this.popup.close();\n }\n this.element.addClass(STATE_HIDDEN).hide();\n this.options.hidden = true;\n },\n show: function () {\n this.element.removeClass(STATE_HIDDEN).hide();\n this.options.hidden = false;\n }\n });\n kendo.toolbar.ToolBarSplitButton = ToolBarSplitButton;\n var OverflowSplitButton = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      • '), items = options.menuButtons, item, splitContainerId;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n splitContainerId = (options.id || options.uid) + OPTION_LIST_SUFFIX;\n this.mainButton = new OverflowButton($.extend({}, options));\n this.mainButton.element.appendTo(element);\n for (var i = 0; i < items.length; i++) {\n item = new OverflowButton($.extend({\n mobile: options.mobile,\n type: 'button',\n splitContainerId: splitContainerId\n }, items[i]), this.toolbar);\n item.element.appendTo(element);\n }\n this.addUidAttr();\n this.addOverflowAttr();\n this.mainButton.main = true;\n element.data({\n type: 'splitButton',\n splitButton: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.OverflowSplitButton = OverflowSplitButton;\n kendo.toolbar.registerComponent('splitButton', ToolBarSplitButton, OverflowSplitButton);\n var ToolBarSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
         
        ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.attributes();\n this.addIdAttr();\n this.addUidAttr();\n this.addOverflowAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n }\n });\n var OverflowSeparator = Item.extend({\n init: function (options, toolbar) {\n var element = this.element = $('
      •  
      • ');\n this.element = element;\n this.options = options;\n this.toolbar = toolbar;\n this.overflow = true;\n this.attributes();\n this.addUidAttr();\n this.addOverflowIdAttr();\n element.addClass(SEPARATOR);\n element.data({\n type: 'separator',\n separator: this\n });\n },\n overflowHidden: function () {\n this.element.addClass(OVERFLOW_HIDDEN);\n }\n });\n kendo.toolbar.registerComponent('separator', ToolBarSeparator, OverflowSeparator);\n var 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, 'a.k-button', preventClick);\n that._navigatable();\n if (options.resizable) {\n that.popup.element.on(CLICK, +'a.k-button', preventClick);\n }\n if (options.resizable) {\n this._toggleOverflowAnchor();\n }\n kendo.notify(that);\n },\n events: [\n CLICK,\n TOGGLE,\n OPEN,\n CLOSE,\n OVERFLOW_OPEN,\n OVERFLOW_CLOSE\n ],\n options: {\n name: 'ToolBar',\n items: [],\n resizable: true,\n mobile: null\n },\n addToGroup: function (button, groupName) {\n var group;\n if (!this._groups[groupName]) {\n group = this._groups[groupName] = new Group();\n } else {\n group = this._groups[groupName];\n }\n group.add(button);\n return group;\n },\n destroy: function () {\n var that = this;\n that.element.find('.' + SPLIT_BUTTON).each(function (idx, element) {\n $(element).data('kendoPopup').destroy();\n });\n that.element.off(CLICK, 'a.k-button');\n that.userEvents.destroy();\n if (that.options.resizable) {\n kendo.unbindResize(that._resizeHandler);\n that.overflowUserEvents.destroy();\n that.popup.element.off(CLICK, 'a.k-button');\n that.popup.destroy();\n }\n Widget.fn.destroy.call(that);\n },\n add: function (options) {\n var component = components[options.type], template = options.template, tool, that = this, itemClasses = that.isMobile ? '' : 'k-item k-state-default', overflowTemplate = options.overflowTemplate, overflowTool;\n $.extend(options, {\n uid: kendo.guid(),\n animation: that.animation,\n mobile: that.isMobile,\n rootUid: that.uid\n });\n if (options.menuButtons) {\n for (var i = 0; i < options.menuButtons.length; i++) {\n $.extend(options.menuButtons[i], { uid: kendo.guid() });\n }\n }\n if (template && !overflowTemplate || 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 if (item.toolbar) {\n if (item.toolbar.options.type === 'button' && item.toolbar.options.isChild) {\n item.toolbar.show();\n item.toolbar.getParentGroup().refresh();\n } else if (item.toolbar.options.hidden) {\n item.toolbar.show();\n }\n }\n if (item.overflow) {\n if (item.overflow.options.type === 'button' && item.overflow.options.isChild) {\n item.toolbar.show();\n item.overflow.getParentGroup().refresh();\n } else if (item.overflow.options.hidden) {\n item.overflow.show();\n }\n }\n this.resize(true);\n },\n enable: function (element, enable) {\n var item = this._getItem(element);\n if (typeof enable == 'undefined') {\n enable = true;\n }\n if (item.toolbar) {\n item.toolbar.enable(enable);\n }\n if (item.overflow) {\n item.overflow.enable(enable);\n }\n },\n getSelectedFromGroup: function (groupName) {\n return this.element.find('.' + TOGGLE_BUTTON + '[data-group=\\'' + groupName + '\\']').filter('.' + STATE_ACTIVE);\n },\n toggle: function (button, checked) {\n var element = $(button), item = element.data('button');\n if (item.options.togglable) {\n if (checked === undefined) {\n checked = true;\n }\n item.toggle(checked, true);\n }\n },\n _renderOverflow: function () {\n var that = this, overflowContainer = components.overflowContainer, isRtl = that._isRtl, horizontalDirection = isRtl ? 'left' : 'right';\n that.overflowAnchor = $(components.overflowAnchor).addClass(BUTTON);\n that.element.append(that.overflowAnchor);\n if (that.isMobile) {\n that.overflowAnchor.append('');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('');\n }\n that.popup = new kendo.ui.Popup(overflowContainer, {\n origin: 'bottom ' + horizontalDirection,\n position: 'top ' + horizontalDirection,\n anchor: that.overflowAnchor,\n isRtl: isRtl,\n animation: that.animation,\n appendTo: that.isMobile ? $(that.isMobile).children('.km-pane') : null,\n copyAnchorStyles: false,\n open: function (e) {\n var wrapper = kendo.wrap(that.popup.element).addClass('k-overflow-wrapper');\n if (!that.isMobile) {\n wrapper.css('margin-left', (isRtl ? -1 : 1) * ((outerWidth(wrapper) - wrapper.width()) / 2 + 1));\n } else {\n that.popup.container.css('max-height', parseFloat($('.km-content:visible').innerHeight()) - 15 + 'px');\n }\n if (that.trigger(OVERFLOW_OPEN)) {\n e.preventDefault();\n }\n },\n activate: function () {\n this.element.find(':kendoFocusable').first().focus();\n },\n close: function (e) {\n if (that.trigger(OVERFLOW_CLOSE)) {\n e.preventDefault();\n }\n this.element.focus();\n }\n });\n that.popup.element.on('keydown', '.' + BUTTON, function (e) {\n var target = $(e.target), li = target.parent(), isComplexTool = li.is('.' + BUTTON_GROUP) || li.is('.' + SPLIT_BUTTON), element;\n e.preventDefault();\n if (e.keyCode === keys.ESC || e.keyCode === keys.TAB || e.altKey && e.keyCode === keys.UP) {\n that._toggleOverflow();\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.DOWN) {\n element = !isComplexTool || isComplexTool && target.is(':last-child') ? li : target;\n findFocusableSibling(element, 'next').focus();\n } else if (e.keyCode === keys.UP) {\n element = !isComplexTool || isComplexTool && target.is(':first-child') ? li : target;\n findFocusableSibling(element, 'prev').focus();\n } else if (e.keyCode === keys.SPACEBAR || e.keyCode === keys.ENTER) {\n that.userEvents.trigger('tap', { target: $(e.target) });\n that.overflowAnchor.focus();\n } else if (e.keyCode === keys.HOME) {\n li.parent().find(':kendoFocusable').first().focus();\n } else if (e.keyCode === keys.END) {\n li.parent().find(':kendoFocusable').last().focus();\n }\n });\n if (that.isMobile) {\n that.popup.container = that.popup.element.find('.' + OVERFLOW_CONTAINER);\n } else {\n that.popup.container = that.popup.element;\n }\n that.popup.container.attr(KENDO_UID_ATTR, this.uid);\n },\n _toggleOverflowAnchor: function () {\n var hasVisibleChildren = false;\n 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', 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', 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.hide();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').removeClass(OVERFLOW_HIDDEN);\n }\n },\n _showItem: function (item, containerWidth) {\n if (item.length && containerWidth > this._childrenWidth() + outerWidth(item, true)) {\n item.show();\n if (this.popup) {\n this.popup.container.find('>li[data-uid=\\'' + item.data('uid') + '\\']').addClass(OVERFLOW_HIDDEN);\n }\n return true;\n }\n return false;\n },\n _markVisibles: function () {\n var overflowItems = this.popup.container.children(), toolbarItems = this.element.children(':not(.k-overflow-anchor)'), visibleOverflowItems = overflowItems.filter(':not(.k-overflow-hidden)'), visibleToolbarItems = toolbarItems.filter(':visible');\n overflowItems.add(toolbarItems).removeClass(FIRST_TOOLBAR_VISIBLE + ' ' + LAST_TOOLBAR_VISIBLE);\n visibleOverflowItems.first().add(visibleToolbarItems.first()).addClass(FIRST_TOOLBAR_VISIBLE);\n visibleOverflowItems.last().add(visibleToolbarItems.last()).addClass(LAST_TOOLBAR_VISIBLE);\n }\n });\n kendo.ui.plugin(ToolBar);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.selectable', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'selectable',\n name: 'Selectable',\n category: 'framework',\n depends: [\n 'core',\n 'userevents'\n ],\n advanced: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, proxy = $.proxy, abs = Math.abs, ARIASELECTED = 'aria-selected', SELECTED = 'k-state-selected', ACTIVE = 'k-state-selecting', SELECTABLE = 'k-selectable', CHANGE = 'change', NS = '.kendoSelectable', 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', 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 };\n var Calendar = Widget.extend({\n init: function (element, options) {\n var that = this, value, id;\n Widget.fn.init.call(that, element, options);\n element = that.wrapper = that.element;\n options = that.options;\n options.url = window.unescape(options.url);\n that.options.disableDates = getDisabledExpr(that.options.disableDates);\n that._templates();\n that._selectable();\n that._header();\n that._viewWrapper();\n that._footer(that.footer);\n id = element.addClass('k-widget k-calendar ' + (options.weekNumber ? ' k-week-number' : '')).on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE, CELLSELECTOR, mousetoggle).on(KEYDOWN_NS, 'table.k-content', proxy(that._move, that)).on(CLICK, CELLSELECTOR, function (e) {\n var link = e.currentTarget.firstChild, value = 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: { weekColumnHeader: '' }\n },\n events: [\n CHANGE,\n NAVIGATE\n ],\n setOptions: function (options) {\n var that = this;\n normalize(options);\n options.disableDates = getDisabledExpr(options.disableDates);\n Widget.fn.setOptions.call(that, options);\n that._templates();\n that._selectable();\n that._viewWrapper();\n that._footer(that.footer);\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;\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 }, that[currentView.name])));\n addClassToViewContainer(to, currentView.name);\n makeUnselectable(to);\n var replace = from && from.data('start') === to.data('start');\n that._animate({\n from: from,\n to: to,\n vertical: vertical,\n future: future,\n replace: replace\n });\n that.trigger(NAVIGATE);\n that._focus(value);\n }\n if (view === views[options.depth] && that._selectDates.length > 0) {\n that._visualizeSelectedDatesInView();\n }\n if (that.options.selectable === 'single') {\n if (view === views[options.depth] && that._value && !that.options.disableDates(that._value)) {\n that._class('k-state-selected', that._value);\n }\n }\n that._class(FOCUSED, value);\n if (!from && that._cell) {\n that._cell.removeClass(FOCUSED);\n }\n that._changeView = true;\n },\n selectDates: function (dates) {\n var that = this, validSelectedDates, datesUnique;\n if (dates === undefined) {\n return that._selectDates;\n }\n datesUnique = dates.map(function (date) {\n return date.getTime();\n }).filter(function (date, position, array) {\n return array.indexOf(date) === position;\n }).map(function (time) {\n return new Date(time);\n });\n validSelectedDates = $.grep(datesUnique, function (value) {\n if (value) {\n return +that._validateValue(new Date(value.setHours(0, 0, 0, 0))) === +value;\n }\n });\n that._selectDates = validSelectedDates.length > 0 ? validSelectedDates : datesUnique.length === 0 ? datesUnique : that._selectDates;\n that._visualizeSelectedDatesInView();\n },\n value: function (value) {\n var that = this, old = that._view, view = that._view;\n if (value === undefined) {\n return that._value;\n }\n value = that._validateValue(value);\n if (value && that._isMultipleSelection()) {\n var date = new Date(+value);\n date.setHours(0, 0, 0, 0);\n that._selectDates = [date];\n that.selectable._lastActive = null;\n }\n if (old && value === null && that._cell) {\n that._cell.removeClass(SELECTED);\n } else {\n that._changeView = !value || view && view.compare(value, that._current) !== 0;\n that.navigate(value);\n }\n },\n _validateValue: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === null) {\n that._current = createDate(that._current.getFullYear(), that._current.getMonth(), that._current.getDate());\n }\n value = parse(value, options.format, options.culture);\n if (value !== null) {\n value = new DATE(+value);\n if (!isInRange(value, min, max)) {\n value = null;\n }\n }\n if (value === null || !that.options.disableDates(new Date(+value))) {\n that._value = value;\n } else if (that._value === undefined) {\n that._value = null;\n }\n return that._value;\n },\n _visualizeSelectedDatesInView: function () {\n var that = this;\n var selectedDates = {};\n $.each(that._selectDates, function (index, value) {\n selectedDates[kendo.calendar.views[0].toDateString(value)] = value;\n });\n that.selectable.clear();\n var cells = that._table.find(CELLSELECTOR).filter(function (index, element) {\n return selectedDates[$(element.firstChild).attr(kendo.attr(VALUE))];\n });\n if (cells.length > 0) {\n that.selectable._selectElement(cells, true);\n }\n },\n _isMultipleSelection: function () {\n var that = this;\n return that.options.selectable === 'multiple';\n },\n _selectable: function () {\n var that = this;\n if (!that._isMultipleSelection()) {\n return;\n }\n var selectable = that.options.selectable, selectableOptions = Selectable.parseOptions(selectable);\n if (selectableOptions.multiple) {\n that.element.attr('aria-multiselectable', 'true');\n }\n that.selectable = new Selectable(that.wrapper, {\n aria: true,\n inputSelectors: 'input,textarea,.k-multiselect-wrap,select,button,.k-button>span,.k-button>img,span.k-icon.k-i-arrow-60-down,span.k-icon.k-i-arrow-60-up',\n multiple: selectableOptions.multiple,\n filter: 'table.k-month:eq(0) ' + CELLSELECTORVALID,\n change: proxy(that._onSelect, that),\n relatedTarget: proxy(that._onRelatedTarget, that)\n });\n },\n _onRelatedTarget: function (target) {\n var that = this;\n if (that.selectable.options.multiple && target.is(CELLSELECTORVALID)) {\n that._current = 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(CELLSELECTOR + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTOR + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || 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 (isDisabled(currentValue)) {\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('.k-header'));\n }\n },\n _footer: function (template) {\n var that = this, today = getToday(), element = that.element, footer = element.find('.k-footer');\n if (!template) {\n that._toggle(false);\n footer.hide();\n return;\n }\n if (!footer[0]) {\n footer = $('
        ').appendTo(element);\n }\n that._today = footer.show().find('.k-link').html(template(today)).attr('title', kendo.toString(today, 'D', that.options.culture));\n that._toggle();\n },\n _header: function () {\n var that = this, element = that.element, links;\n if (!element.find('.k-header')[0]) {\n element.html('
        ' + '' + '' + '' + '
        ');\n }\n links = element.find('.k-link').on(MOUSEENTER_WITH_NS + ' ' + MOUSELEAVE + ' ' + FOCUS_WITH_NS + ' ' + BLUR, mousetoggle).on('click', function () {\n return false;\n });\n that._title = links.eq(1).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateUp();\n });\n that[PREVARROW] = links.eq(0).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToPast();\n });\n that[NEXTARROW] = links.eq(2).on(CLICK, function () {\n that._active = that.options.focusOnNav !== false;\n that.navigateToFuture();\n });\n },\n _navigate: function (arrow, modifier) {\n var that = this, index = that._index + 1, currentValue = new DATE(+that._current);\n if (that._isMultipleSelection()) {\n var firstDayCurrentMonth = that._table.find('td:not(.k-other-month):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(), 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);\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 if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n });\n };\n that._formElement = form.on('reset', that._resetHandler);\n }\n },\n _paste: function (e) {\n e.preventDefault();\n },\n _keydown: function (e) {\n var key = e.keyCode;\n var selection;\n if (key == 37 || key == 39) {\n e.preventDefault();\n selection = caret(this.element[0]);\n if (selection[0] != selection[1]) {\n this._selectNearestSegment();\n }\n var dir = key == 37 ? -1 : 1;\n var index = dir == -1 ? caret(this.element[0])[0] - 1 : caret(this.element[0])[1] + 1;\n while (index >= 0 && index < this._format.length) {\n if (knownSymbols.indexOf(this._format[index]) >= 0) {\n this._selectSegment(this._format[index]);\n break;\n }\n index += dir;\n }\n }\n if (key == 38 || key == 40) {\n e.preventDefault();\n selection = caret(this.element[0]);\n var symbol = this._format[selection[0]];\n if (knownSymbols.indexOf(symbol) >= 0) {\n this._dateTime.modifyPart(symbol, key == 38 ? 1 : -1);\n this._updateElementValue();\n this._selectSegment(symbol);\n 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_EXPANDED = 'aria-expanded', ARIA_HIDDEN = 'aria-hidden', calendar = kendo.calendar, isInRange = calendar.isInRange, restrictValue = calendar.restrictValue, isEqualDatePart = calendar.isEqualDatePart, extend = $.extend, proxy = $.proxy, DATE = Date;\n function normalize(options) {\n var parseFormats = options.parseFormats, format = options.format;\n calendar.normalize(options);\n parseFormats = $.isArray(parseFormats) ? parseFormats : [parseFormats];\n if (!parseFormats.length) {\n parseFormats.push('yyyy-MM-dd');\n }\n if ($.inArray(format, parseFormats) === -1) {\n parseFormats.splice(0, 0, options.format);\n }\n options.parseFormats = parseFormats;\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n var DateView = function (options) {\n var that = this, id, body = document.body, div = $(DIV).attr(ARIA_HIDDEN, 'true').addClass('k-calendar-container').appendTo(body);\n that.options = options = options || {};\n id = options.id;\n if (id) {\n id += '_dateview';\n div.attr(ID, id);\n that._dateViewID = id;\n }\n that.popup = new ui.Popup(div, extend(options.popup, options, {\n name: 'Popup',\n isRtl: kendo.support.isRtl(options.anchor)\n }));\n that.div = div;\n that.value(options.value);\n };\n DateView.prototype = {\n _calendar: function () {\n var that = this;\n var calendar = that.calendar;\n var options = that.options;\n var div;\n if (!calendar) {\n div = $(DIV).attr(ID, kendo.guid()).appendTo(that.popup.element).on(MOUSEDOWN, preventDefault).on(CLICK, 'td:has(.k-link)', proxy(that._click, that));\n that.calendar = calendar = new ui.Calendar(div);\n that._setOptions(options);\n kendo.calendar.makeUnselectable(calendar.element);\n calendar.navigate(that._value || that._current, options.start);\n that.value(that._value);\n }\n },\n _setOptions: function (options) {\n this.calendar.setOptions({\n focusOnNav: false,\n change: options.change,\n culture: options.culture,\n dates: options.dates,\n depth: options.depth,\n footer: options.footer,\n format: options.format,\n max: options.max,\n min: options.min,\n month: options.month,\n weekNumber: options.weekNumber,\n start: options.start,\n disableDates: options.disableDates\n });\n },\n setOptions: function (options) {\n var old = this.options;\n var disableDates = options.disableDates;\n if (disableDates) {\n options.disableDates = calendar.disabled(disableDates);\n }\n this.options = extend(old, options, {\n change: old.change,\n close: old.close,\n open: old.open\n });\n if (this.calendar) {\n this._setOptions(this.options);\n }\n },\n destroy: function () {\n this.popup.destroy();\n },\n open: function () {\n var that = this;\n 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.visible()) {\n if (key == keys.ESC || selectIsClicked && calendar._cell.hasClass(SELECTED)) {\n that.close();\n e.preventDefault();\n return true;\n }\n if (key != keys.SPACEBAR) {\n that._current = calendar._move(e);\n }\n handled = true;\n }\n return handled;\n },\n current: function (date) {\n this._current = date;\n this.calendar._focus(date);\n },\n value: function (value) {\n var that = this, calendar = that.calendar, options = that.options, disabledDate = options.disableDates;\n if (disabledDate && disabledDate(value)) {\n value = null;\n }\n that._value = value;\n that._current = new DATE(+restrictValue(value, options.min, options.max));\n if (calendar) {\n calendar.value(value);\n }\n },\n _click: function (e) {\n if (e.currentTarget.className.indexOf(SELECTED) !== -1) {\n this.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 },\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).on('keydown' + ns, proxy(that._keydown, that)).on('focusout' + ns, proxy(that._blur, that)).on('focus' + ns, function () {\n that._inputWrapper.addClass(FOCUSED);\n });\n icon.on(UP, proxy(that._click, that)).on(MOUSEDOWN, preventDefault);\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n element.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n 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 }\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);\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n that.value(element[0].defaultValue);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _template: function () {\n this._ariaTemplate = template(this.options.ARIATemplate);\n },\n _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.numerictextbox', [\n 'kendo.core',\n 'kendo.userevents'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'numerictextbox',\n name: 'NumericTextBox',\n category: 'web',\n description: 'The NumericTextBox widget can format and display numeric, percentage or currency textbox.',\n depends: [\n 'core',\n 'userevents'\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, caret = kendo.caret, keys = kendo.keys, ui = kendo.ui, Widget = ui.Widget, activeElement = kendo._activeElement, extractFormat = kendo._extractFormat, parse = kendo.parseFloat, placeholderSupported = kendo.support.placeholder, getCulture = kendo.getCulture, CHANGE = 'change', DISABLED = 'disabled', READONLY = 'readonly', INPUT = 'k-input', SPIN = 'spin', ns = '.kendoNumericTextBox', TOUCHEND = 'touchend', MOUSELEAVE = 'mouseleave' + ns, HOVEREVENTS = 'mouseenter' + ns + ' ' + MOUSELEAVE, DEFAULT = 'k-state-default', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', FOCUS = 'focus', POINT = '.', CLASS_ICON = 'k-icon', SELECTED = 'k-state-selected', STATEDISABLED = 'k-state-disabled', STATE_INVALID = 'k-state-invalid', ARIA_DISABLED = 'aria-disabled', INTEGER_REGEXP = /^(-)?(\\d*)$/, NULL = null, proxy = $.proxy, extend = $.extend;\n var NumericTextBox = Widget.extend({\n init: function (element, options) {\n var that = this, isStep = options && options.step !== undefined, min, max, step, value, disabled;\n 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 });\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 kendo.notify(that);\n },\n options: {\n name: 'NumericTextBox',\n decimals: NULL,\n restrictDecimals: false,\n min: NULL,\n max: NULL,\n value: NULL,\n step: 1,\n round: true,\n culture: '',\n format: 'n',\n spinners: true,\n placeholder: '',\n factor: 1,\n upArrowText: 'Increase value',\n downArrowText: 'Decrease value'\n },\n events: [\n CHANGE,\n SPIN\n ],\n _editable: function (options) {\n var that = this, element = that.element, disable = options.disable, readonly = options.readonly, text = that._text.add(element), wrapper = that._inputWrapper.off(HOVEREVENTS);\n that._toggleText(true);\n that._upArrowEventHandler.unbind('press');\n that._downArrowEventHandler.unbind('press');\n element.off('keydown' + ns).off('keypress' + ns).off('keyup' + ns).off('paste' + ns);\n if (!readonly && !disable) {\n wrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n text.removeAttr(DISABLED).removeAttr(READONLY).attr(ARIA_DISABLED, false);\n that._upArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(1);\n that._upArrow.addClass(SELECTED);\n });\n that._downArrowEventHandler.bind('press', function (e) {\n e.preventDefault();\n that._spin(-1);\n that._downArrow.addClass(SELECTED);\n });\n that.element.on('keydown' + ns, proxy(that._keydown, that)).on('keypress' + ns, proxy(that._keypress, that)).on('keyup' + ns, proxy(that._keyup, that)).on('paste' + ns, proxy(that._paste, that));\n } else {\n wrapper.addClass(disable ? STATEDISABLED : DEFAULT).removeClass(disable ? DEFAULT : STATEDISABLED);\n text.attr(DISABLED, disable).attr(READONLY, readonly).attr(ARIA_DISABLED, disable);\n }\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n setOptions: function (options) {\n var that = this;\n Widget.fn.setOptions.call(that, options);\n that._arrowsWrap.toggle(that.options.spinners);\n that._inputWrapper.toggleClass('k-expand-padding', !that.options.spinners);\n that._text.prop('placeholder', that.options.placeholder);\n that._placeholder(that.options.placeholder);\n that.element.attr({\n 'aria-valuemin': that.options.min !== NULL ? that.options.min * that.options.factor : that.options.min,\n 'aria-valuemax': that.options.max !== NULL ? that.options.max * that.options.factor : that.options.max\n });\n that.options.format = extractFormat(that.options.format);\n if (options.value !== undefined) {\n that.value(options.value);\n }\n },\n destroy: function () {\n var that = this;\n that.element.add(that._text).add(that._upArrow).add(that._downArrow).add(that._inputWrapper).off(ns);\n that._upArrowEventHandler.destroy();\n that._downArrowEventHandler.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n Widget.fn.destroy.call(that);\n },\n min: function (value) {\n return this._option('min', value);\n },\n max: function (value) {\n return this._option('max', value);\n },\n step: function (value) {\n return this._option('step', value);\n },\n value: function (value) {\n var that = this, adjusted;\n if (value === undefined) {\n return that._value;\n }\n value = that._parse(value);\n adjusted = that._adjust(value);\n if (value !== adjusted) {\n return;\n }\n that._update(value);\n that._old = that._value;\n },\n focus: function () {\n this._focusin();\n },\n _adjust: function (value) {\n var that = this, options = that.options, min = options.min, max = options.max;\n if (value === NULL) {\n return value;\n }\n if (min !== NULL && value < min) {\n value = min;\n } else if (max !== NULL && value > max) {\n value = max;\n }\n return value;\n },\n _arrows: function () {\n var that = this, arrows, _release = function () {\n clearTimeout(that._spinning);\n arrows.removeClass(SELECTED);\n }, options = that.options, spinners = options.spinners, element = that.element;\n arrows = element.siblings('.' + CLASS_ICON);\n if (!arrows[0]) {\n arrows = $(buttonHtml('increase', options.upArrowText) + buttonHtml('decrease', options.downArrowText)).insertAfter(element);\n that._arrowsWrap = arrows.wrapAll('').parent();\n }\n if (!spinners) {\n arrows.parent().toggle(spinners);\n that._inputWrapper.addClass('k-expand-padding');\n }\n that._upArrow = arrows.eq(0);\n that._upArrowEventHandler = new kendo.UserEvents(that._upArrow, { release: _release });\n that._downArrow = arrows.eq(1);\n that._downArrowEventHandler = new kendo.UserEvents(that._downArrow, { release: _release });\n },\n _validation: function () {\n var that = this;\n var element = that.element;\n that._validationIcon = $('').hide().insertAfter(element);\n },\n _blur: function () {\n var that = this;\n that._toggleText(true);\n that._change(that.element.val());\n },\n _click: function (e) {\n var that = this;\n clearTimeout(that._focusing);\n that._focusing = setTimeout(function () {\n var input = e.target, idx = caret(input)[0], value = input.value.substring(0, idx), format = that._format(that.options.format), group = format[','], result, groupRegExp, extractRegExp, caretPosition = 0;\n if (group) {\n groupRegExp = new RegExp('\\\\' + group, 'g');\n extractRegExp = new RegExp('(^(-)$)|(^(-)?([\\\\d\\\\' + group + ']+)(\\\\' + format[POINT] + ')?(\\\\d+)?)');\n }\n if (extractRegExp) {\n result = extractRegExp.exec(value);\n }\n if (result) {\n caretPosition = result[0].replace(groupRegExp, '').length;\n if (value.indexOf('(') != -1 && that._value < 0) {\n caretPosition++;\n }\n }\n that._focusin();\n caret(that.element[0], caretPosition);\n });\n },\n _change: function (value) {\n var that = this, factor = that.options.factor;\n if (factor && factor !== 1) {\n value = kendo.parseFloat(value);\n if (value !== null) {\n value = value / factor;\n }\n }\n that._update(value);\n value = that._value;\n if (that._old != value) {\n that._old = value;\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that._typing = false;\n },\n _culture: function (culture) {\n return culture || getCulture(this.options.culture);\n },\n _focusin: function () {\n var that = this;\n that._inputWrapper.addClass(FOCUSED);\n that._toggleText(false);\n that.element[0].focus();\n },\n _focusout: function () {\n var that = this;\n clearTimeout(that._focusing);\n that._inputWrapper.removeClass(FOCUSED).removeClass(HOVER);\n that._blur();\n that._removeInvalidState();\n },\n _format: function (format, culture) {\n var numberFormat = this._culture(culture).numberFormat;\n format = format.toLowerCase();\n if (format.indexOf('c') > -1) {\n numberFormat = numberFormat.currency;\n } else if (format.indexOf('p') > -1) {\n numberFormat = numberFormat.percent;\n }\n return numberFormat;\n },\n _input: function () {\n var that = this, options = that.options, CLASSNAME = 'k-formatted-value', element = that.element.addClass(INPUT).show()[0], accessKey = element.accessKey, wrapper = that.wrapper, text;\n text = wrapper.find(POINT + CLASSNAME);\n if (!text[0]) {\n text = $('').insertBefore(element).addClass(CLASSNAME);\n }\n try {\n element.setAttribute('type', 'text');\n } catch (e) {\n element.type = 'text';\n }\n 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 that._key = key;\n if (key == keys.DOWN) {\n that._step(-1);\n } else if (key == keys.UP) {\n that._step(1);\n } else if (key == keys.ENTER) {\n that._change(that.element.val());\n } else if (key != keys.TAB) {\n that._typing = true;\n }\n },\n _keypress: function (e) {\n if (e.which === 0 || e.metaKey || e.ctrlKey || e.keyCode === keys.BACKSPACE || e.keyCode === keys.ENTER) {\n return;\n }\n var that = this;\n var min = that.options.min;\n var element = that.element;\n var selection = caret(element);\n var selectionStart = selection[0];\n var selectionEnd = selection[1];\n var character = String.fromCharCode(e.which);\n var numberFormat = that._format(that.options.format);\n var isNumPadDecimal = that._key === keys.NUMPAD_DOT;\n var value = element.val();\n var isValid;\n if (isNumPadDecimal) {\n character = numberFormat[POINT];\n }\n value = value.substring(0, selectionStart) + character + value.substring(selectionEnd);\n isValid = that._numericRegex(numberFormat).test(value);\n if (isValid && isNumPadDecimal) {\n element.val(value);\n caret(element, selectionStart + character.length);\n e.preventDefault();\n } else if (min !== null && min >= 0 && value.charAt(0) === '-' || !isValid) {\n that._addInvalidState();\n e.preventDefault();\n }\n that._key = 0;\n },\n _keyup: function () {\n this._removeInvalidState();\n },\n _addInvalidState: function () {\n var that = this;\n that._inputWrapper.addClass(STATE_INVALID);\n that._validationIcon.show();\n },\n _removeInvalidState: function () {\n var that = this;\n that._inputWrapper.removeClass(STATE_INVALID);\n that._validationIcon.hide();\n },\n _numericRegex: function (numberFormat) {\n var that = this;\n var separator = numberFormat[POINT];\n var precision = that.options.decimals;\n var fractionRule = '*';\n if (separator === POINT) {\n separator = '\\\\' + separator;\n }\n if (precision === NULL) {\n precision = numberFormat.decimals;\n }\n if (precision === 0 && that.options.restrictDecimals) {\n return INTEGER_REGEXP;\n }\n if (that.options.restrictDecimals) {\n fractionRule = '{0,' + precision + '}';\n }\n if (that._separator !== separator) {\n that._separator = separator;\n that._floatRegExp = new RegExp('^(-)?(((\\\\d+(' + separator + '\\\\d' + fractionRule + ')?)|(' + separator + '\\\\d' + fractionRule + ')))?$');\n }\n return that._floatRegExp;\n },\n _paste: function (e) {\n var that = this;\n var element = e.target;\n var value = element.value;\n var numberFormat = that._format(that.options.format);\n setTimeout(function () {\n var result = that._parse(element.value);\n if (result === NULL) {\n that._update(value);\n } else {\n element.value = result.toString().replace(POINT, numberFormat[POINT]);\n if (that._adjust(result) !== result || !that._numericRegex(numberFormat).test(element.value)) {\n that._update(value);\n }\n }\n });\n },\n _option: function (option, value) {\n var that = this, element = that.element, options = that.options;\n if (value === undefined) {\n return options[option];\n }\n value = that._parse(value);\n if (!value && option === 'step') {\n return;\n }\n options[option] = value;\n element.add(that._text).attr('aria-value' + option, value);\n element.attr(option, value);\n },\n _spin: function (step, timeout) {\n var that = this;\n timeout = timeout || 500;\n clearTimeout(that._spinning);\n that._spinning = setTimeout(function () {\n that._spin(step, 50);\n }, timeout);\n that._step(step);\n },\n _step: function (step) {\n var that = this, element = that.element, 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.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 _wrapper: function () {\n var that = this, element = that.element, DOMElement = element[0], wrapper;\n wrapper = element.parents('.k-numerictextbox');\n if (!wrapper.is('span.k-numerictextbox')) {\n wrapper = element.hide().wrap('').parent();\n wrapper = wrapper.wrap('').parent();\n }\n wrapper[0].style.cssText = DOMElement.style.cssText;\n DOMElement.style.width = '';\n that.wrapper = wrapper.addClass('k-widget k-numerictextbox').addClass(DOMElement.className).css('display', '');\n that._inputWrapper = $(wrapper[0].firstChild);\n },\n _reset: function () {\n var that = this, element = that.element, formId = element.attr('form'), form = formId ? $('#' + formId) : element.closest('form');\n if (form[0]) {\n that._resetHandler = function () {\n setTimeout(function () {\n that.value(element[0].value);\n that.max(that._initialOptions.max);\n that.min(that._initialOptions.min);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n }\n });\n function buttonHtml(direction, text) {\n var className = 'k-i-arrow-' + (direction === 'increase' ? '60-up' : '60-down');\n return '' + '' + '';\n }\n function truncate(value, precision) {\n var parts = parseFloat(value, 10).toString().split(POINT);\n if (parts[1]) {\n parts[1] = parts[1].substring(0, precision);\n }\n return parts.join(POINT);\n }\n ui.plugin(NumericTextBox);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.validator', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'validator',\n name: 'Validator',\n category: 'web',\n description: 'The Validator offers an easy way to do a client-side form validation.',\n depends: ['core']\n };\n (function ($, undefined) {\n var kendo = window.kendo, Widget = kendo.ui.Widget, NS = '.kendoValidator', INVALIDMSG = 'k-invalid-msg', invalidMsgRegExp = new RegExp(INVALIDMSG, 'i'), INVALIDINPUT = 'k-invalid', VALIDINPUT = 'k-valid', emailRegExp = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i, urlRegExp = /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i, INPUTSELECTOR = ':input:not(:button,[type=submit],[type=reset],[disabled],[readonly])', CHECKBOXSELECTOR = ':checkbox:not([disabled],[readonly])', NUMBERINPUTSELECTOR = '[type=number],[type=range]', BLUR = 'blur', NAME = 'name', FORM = 'form', NOVALIDATE = 'novalidate', VALIDATE = 'validate', CHANGE = 'change', VALIDATE_INPUT = 'validateInput', proxy = $.proxy, patternMatcher = function (value, pattern) {\n if (typeof pattern === 'string') {\n pattern = new RegExp('^(?:' + pattern + ')$');\n }\n return pattern.test(value);\n }, matcher = function (input, selector, pattern) {\n var value = input.val();\n if (input.filter(selector).length && value !== '') {\n return patternMatcher(value, pattern);\n }\n return true;\n }, hasAttribute = function (input, name) {\n if (input.length) {\n return input[0].attributes[name] != null;\n }\n return false;\n };\n if (!kendo.ui.validator) {\n kendo.ui.validator = {\n rules: {},\n messages: {}\n };\n }\n function resolveRules(element) {\n var resolvers = kendo.ui.validator.ruleResolvers || {}, rules = {}, name;\n for (name in resolvers) {\n $.extend(true, rules, resolvers[name].resolve(element));\n }\n return rules;\n }\n function decode(value) {\n return value.replace(/&/g, '&').replace(/"/g, '\"').replace(/'/g, '\\'').replace(/</g, '<').replace(/>/g, '>');\n }\n function numberOfDecimalDigits(value) {\n value = (value + '').split('.');\n if (value.length > 1) {\n return value[1].length;\n }\n return 0;\n }\n function parseHtml(text) {\n if ($.parseHTML) {\n return $($.parseHTML(text));\n }\n return $(text);\n }\n function searchForMessageContainer(elements, fieldName) {\n var containers = $(), element, attr;\n for (var idx = 0, length = elements.length; idx < length; idx++) {\n element = elements[idx];\n if (invalidMsgRegExp.test(element.className)) {\n attr = element.getAttribute(kendo.attr('for'));\n if (attr === fieldName) {\n containers = containers.add(element);\n }\n }\n }\n return containers;\n }\n var Validator = Widget.extend({\n init: function (element, options) {\n var that = this, resolved = resolveRules(element), validateAttributeSelector = '[' + kendo.attr('validate') + '!=false]';\n options = options || {};\n options.rules = $.extend({}, kendo.ui.validator.rules, resolved.rules, options.rules);\n options.messages = $.extend({}, kendo.ui.validator.messages, resolved.messages, options.messages);\n Widget.fn.init.call(that, element, options);\n that._errorTemplate = kendo.template(that.options.errorTemplate);\n if (that.element.is(FORM)) {\n that.element.attr(NOVALIDATE, NOVALIDATE);\n }\n that._inputSelector = INPUTSELECTOR + validateAttributeSelector;\n that._checkboxSelector = CHECKBOXSELECTOR + validateAttributeSelector;\n that._errors = {};\n that._attachEvents();\n that._isValidated = false;\n },\n events: [\n VALIDATE,\n CHANGE,\n VALIDATE_INPUT\n ],\n options: {\n name: 'Validator',\n errorTemplate: '' + ' #=message#',\n messages: {\n required: '{0} is required',\n pattern: '{0} is not valid',\n min: '{0} should be greater than or equal to {1}',\n max: '{0} should be smaller than or equal to {1}',\n step: '{0} is not valid',\n email: '{0} is not valid email',\n url: '{0} is not valid URL',\n date: '{0} is not valid date',\n dateCompare: 'End date should be greater than or equal to the start date'\n },\n rules: {\n required: function (input) {\n var checkbox = input.filter('[type=checkbox]').length && !input.is(':checked'), value = input.val();\n return !(hasAttribute(input, 'required') && (!value || value === '' || value.length === 0 || checkbox));\n },\n pattern: function (input) {\n if (input.filter('[type=text],[type=email],[type=url],[type=tel],[type=search],[type=password]').filter('[pattern]').length && input.val() !== '') {\n return patternMatcher(input.val(), input.attr('pattern'));\n }\n return true;\n },\n min: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[min]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, val = kendo.parseFloat(input.val());\n return min <= val;\n }\n return true;\n },\n max: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[max]').length && input.val() !== '') {\n var max = parseFloat(input.attr('max')) || 0, val = kendo.parseFloat(input.val());\n return max >= val;\n }\n return true;\n },\n step: function (input) {\n if (input.filter(NUMBERINPUTSELECTOR + ',[' + kendo.attr('type') + '=number]').filter('[step]').length && input.val() !== '') {\n var min = parseFloat(input.attr('min')) || 0, step = parseFloat(input.attr('step')) || 1, val = parseFloat(input.val()), decimals = numberOfDecimalDigits(step), raise;\n if (decimals) {\n raise = Math.pow(10, decimals);\n return Math.floor((val - min) * raise) % (step * raise) / Math.pow(100, decimals) === 0;\n }\n return (val - min) % step === 0;\n }\n return true;\n },\n email: function (input) {\n return matcher(input, '[type=email],[' + kendo.attr('type') + '=email]', emailRegExp);\n },\n url: function (input) {\n return matcher(input, '[type=url],[' + kendo.attr('type') + '=url]', urlRegExp);\n },\n date: function (input) {\n if (input.filter('[type^=date],[' + kendo.attr('type') + '=date]').length && input.val() !== '') {\n return kendo.parseDate(input.val(), input.attr(kendo.attr('format'))) !== null;\n }\n return true;\n }\n },\n validateOnBlur: true\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n },\n value: function () {\n if (!this._isValidated) {\n return false;\n }\n return this.errors().length === 0;\n },\n _submit: function (e) {\n if (!this.validate()) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n e.preventDefault();\n return false;\n }\n return true;\n },\n _checkElement: function (element) {\n var state = this.value();\n this.validateInput(element);\n if (this.value() !== state) {\n this.trigger(CHANGE);\n }\n },\n _attachEvents: function () {\n var that = this;\n if (that.element.is(FORM)) {\n that.element.on('submit' + NS, proxy(that._submit, that));\n }\n if (that.options.validateOnBlur) {\n if (!that.element.is(INPUTSELECTOR)) {\n that.element.on(BLUR + NS, that._inputSelector, function () {\n that._checkElement($(this));\n });\n that.element.on('click' + NS, that._checkboxSelector, function () {\n that._checkElement($(this));\n });\n } else {\n that.element.on(BLUR + NS, function () {\n that._checkElement(that.element);\n });\n if (that.element.is(CHECKBOXSELECTOR)) {\n that.element.on('click' + NS, function () {\n that._checkElement(that.element);\n });\n }\n }\n }\n },\n validate: function () {\n var inputs;\n var idx;\n var result = false;\n var length;\n var isValid = this.value();\n this._errors = {};\n if (!this.element.is(INPUTSELECTOR)) {\n var invalid = false;\n inputs = this.element.find(this._inputSelector);\n for (idx = 0, length = inputs.length; idx < length; idx++) {\n if (!this.validateInput(inputs.eq(idx))) {\n invalid = true;\n }\n }\n result = !invalid;\n } else {\n result = this.validateInput(this.element);\n }\n this.trigger(VALIDATE, { valid: result });\n if (isValid !== result) {\n this.trigger(CHANGE);\n }\n return result;\n },\n validateInput: function (input) {\n input = $(input);\n this._isValidated = true;\n var that = this, template = that._errorTemplate, result = that._checkValidity(input), valid = result.valid, className = '.' + INVALIDMSG, fieldName = input.attr(NAME) || '', lbl = that._findMessageContainer(fieldName).add(input.next(className).filter(function () {\n var element = $(this);\n if (element.filter('[' + kendo.attr('for') + ']').length) {\n return element.attr(kendo.attr('for')) === fieldName;\n }\n return true;\n })).hide(), messageText, wasValid = !input.attr('aria-invalid');\n input.removeAttr('aria-invalid');\n if (!valid) {\n messageText = that._extractMessage(input, result.key);\n that._errors[fieldName] = messageText;\n var messageLabel = parseHtml(template({ message: decode(messageText) }));\n var lblId = lbl.attr('id');\n that._decorateMessageContainer(messageLabel, fieldName);\n if (lblId) {\n messageLabel.attr('id', lblId);\n }\n if (!lbl.replaceWith(messageLabel).length) {\n messageLabel.insertAfter(input);\n }\n messageLabel.show();\n input.attr('aria-invalid', true);\n } else {\n delete that._errors[fieldName];\n }\n if (wasValid !== valid) {\n this.trigger(VALIDATE_INPUT, {\n valid: valid,\n input: input\n });\n }\n input.toggleClass(INVALIDINPUT, !valid);\n input.toggleClass(VALIDINPUT, valid);\n if (kendo.widgetInstance(input)) {\n var inputWrap = kendo.widgetInstance(input)._inputWrapper;\n if (inputWrap) {\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n inputWrap.toggleClass(INVALIDINPUT, !valid);\n }\n }\n return valid;\n },\n hideMessages: function () {\n var that = this, className = '.' + INVALIDMSG, element = that.element;\n if (!element.is(INPUTSELECTOR)) {\n element.find(className).hide();\n } else {\n element.next(className).hide();\n }\n },\n _findMessageContainer: function (fieldName) {\n var locators = kendo.ui.validator.messageLocators, name, containers = $();\n for (var idx = 0, length = this.element.length; idx < length; idx++) {\n containers = containers.add(searchForMessageContainer(this.element[idx].getElementsByTagName('*'), fieldName));\n }\n for (name in locators) {\n containers = containers.add(locators[name].locate(this.element, fieldName));\n }\n return containers;\n },\n _decorateMessageContainer: function (container, fieldName) {\n var locators = kendo.ui.validator.messageLocators, name;\n container.addClass(INVALIDMSG).attr(kendo.attr('for'), fieldName || '');\n for (name in locators) {\n locators[name].decorate(container, fieldName);\n }\n container.attr('role', 'alert');\n },\n _extractMessage: function (input, ruleKey) {\n var that = this, customMessage = that.options.messages[ruleKey], fieldName = input.attr(NAME), nonDefaultMessage;\n if (!kendo.ui.Validator.prototype.options.messages[ruleKey]) {\n nonDefaultMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n }\n customMessage = kendo.isFunction(customMessage) ? customMessage(input) : customMessage;\n return kendo.format(input.attr(kendo.attr(ruleKey + '-msg')) || input.attr('validationMessage') || nonDefaultMessage || input.attr('title') || customMessage || '', fieldName, input.attr(ruleKey) || input.attr(kendo.attr(ruleKey)));\n },\n _checkValidity: function (input) {\n var rules = this.options.rules, rule;\n for (rule in rules) {\n if (!rules[rule].call(this, input)) {\n return {\n valid: false,\n key: rule\n };\n }\n }\n return { valid: true };\n },\n errors: function () {\n var results = [], errors = this._errors, error;\n for (error in errors) {\n results.push(errors[error]);\n }\n return results;\n }\n });\n kendo.ui.plugin(Validator);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.editable', [\n 'kendo.datepicker',\n 'kendo.numerictextbox',\n 'kendo.validator',\n 'kendo.binder'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'editable',\n name: 'Editable',\n category: 'framework',\n depends: [\n 'datepicker',\n 'numerictextbox',\n 'validator',\n 'binder'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, extend = $.extend, oldIE = kendo.support.browser.msie && kendo.support.browser.version < 9, isFunction = kendo.isFunction, isPlainObject = $.isPlainObject, inArray = $.inArray, POINT = '.', nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '
        ' + '#=message#
        ', CHANGE = 'change';\n var EQUAL_SET = 'equalSet';\n var specialRules = [\n 'url',\n 'email',\n 'number',\n 'date',\n 'boolean'\n ];\n function fieldType(field) {\n field = field != null ? field : '';\n return field.type || $.type(field) || 'string';\n }\n function convertToValueBinding(container) {\n container.find(':input:not(:button, .k-combobox .k-input, [' + kendo.attr('role') + '=listbox], [' + kendo.attr('role') + '=upload], [' + kendo.attr('skip') + '], [type=file])').each(function () {\n var bindAttr = kendo.attr('bind'), binding = this.getAttribute(bindAttr) || '', bindingName = this.type === 'checkbox' || this.type === 'radio' ? 'checked:' : 'value:', fieldName = this.name;\n if (binding.indexOf(bindingName) === -1 && fieldName) {\n binding += (binding.length ? ',' : '') + bindingName + fieldName;\n $(this).attr(bindAttr, binding);\n }\n });\n }\n function createAttributes(options) {\n var field = (options.model.fields || options.model)[options.field], type = fieldType(field), validation = field ? field.validation : {}, ruleName, DATATYPE = kendo.attr('type'), BINDING = kendo.attr('bind'), rule, attr = {\n name: options.field,\n title: options.title\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n 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 }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options), format = options.format;\n if (format) {\n format = kendo._extractFormat(format);\n }\n attr[kendo.attr('format')] = format;\n $('').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('').attr(attr).appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = options.values;\n var select = $('').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).css('display', '').attr({\n accesskey: element.attr('accesskey'),\n unselectable: 'on',\n role: 'listbox',\n 'aria-haspopup': true,\n 'aria-expanded': false\n });\n element.hide().removeAttr('accesskey');\n },\n _clearSelection: function (parent) {\n this.select(parent.value() ? 0 : -1);\n },\n _inputTemplate: function () {\n var that = this, template = that.options.valueTemplate;\n if (!template) {\n template = $.proxy(kendo.template('#:this._text(data)#', { useWithBlock: false }), that);\n } else {\n template = kendo.template(template);\n }\n that.valueTemplate = template;\n if (that.hasOptionLabel() && !that.options.optionLabelTemplate) {\n try {\n that.valueTemplate(that._optionLabelDataItem());\n } catch (e) {\n throw new Error(MSG_INVALID_OPTION_LABEL);\n }\n }\n },\n _textAccessor: function (text) {\n var dataItem = null;\n var template = this.valueTemplate;\n var optionLabelText = this._optionLabelText();\n var span = this.span;\n if (text === undefined) {\n return span.text();\n }\n if ($.isPlainObject(text) || text instanceof ObservableObject) {\n dataItem = text;\n } else if (optionLabelText && optionLabelText === text) {\n dataItem = this.options.optionLabel;\n }\n if (!dataItem) {\n dataItem = this._assignInstance(text, this._accessor());\n }\n if (this.hasOptionLabel()) {\n if (dataItem === optionLabelText || this._text(dataItem) === optionLabelText) {\n template = this.optionLabelTemplate;\n if (typeof this.options.optionLabel === 'string' && !this.options.optionLabelTemplate) {\n dataItem = optionLabelText;\n }\n }\n }\n var getElements = function () {\n return {\n elements: span.get(),\n data: [{ dataItem: dataItem }]\n };\n };\n this.angular('cleanup', getElements);\n try {\n span.html(template(dataItem));\n } catch (e) {\n span.html('');\n }\n this.angular('compile', getElements);\n },\n _preselect: function (value, text) {\n if (!value && !text) {\n text = this._optionLabelText();\n }\n this._accessor(value);\n this._textAccessor(text);\n this._old = this._accessor();\n this._oldIndex = this.selectedIndex;\n this.listView.setValue(value);\n this._initialIndex = null;\n this._presetValue = true;\n },\n _assignInstance: function (text, value) {\n var dataTextField = this.options.dataTextField;\n var dataItem = {};\n if (dataTextField) {\n assign(dataItem, dataTextField.split('.'), text);\n assign(dataItem, this.options.dataValueField.split('.'), value);\n dataItem = new ObservableObject(dataItem);\n } else {\n dataItem = text;\n }\n return dataItem;\n }\n });\n function assign(instance, fields, value) {\n var idx = 0, lastIndex = fields.length - 1, field;\n for (; idx < lastIndex; ++idx) {\n field = fields[idx];\n if (!(field in instance)) {\n instance[field] = {};\n }\n instance = instance[field];\n }\n instance[fields[lastIndex]] = value;\n }\n function normalizeIndex(index, length) {\n if (index >= length) {\n index -= length;\n }\n return index;\n }\n function sameCharsOnly(word, character) {\n for (var idx = 0; idx < word.length; idx++) {\n if (word.charAt(idx) !== character) {\n return false;\n }\n }\n return true;\n }\n ui.plugin(DropDownList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('dataviz/diagram/dom', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.toolbar',\n 'kendo.editable',\n 'kendo.window',\n 'kendo.dropdownlist',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout'\n ], f);\n}(function () {\n (function ($, undefined) {\n var dataviz = kendo.dataviz, draw = kendo.drawing, geom = kendo.geometry, diagram = dataviz.diagram, Widget = kendo.ui.Widget, Class = kendo.Class, proxy = $.proxy, deepExtend = kendo.deepExtend, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, extend = $.extend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, Canvas = diagram.Canvas, Group = diagram.Group, Rectangle = diagram.Rectangle, Circle = diagram.Circle, CompositeTransform = diagram.CompositeTransform, Rect = diagram.Rect, Path = diagram.Path, DeleteShapeUnit = diagram.DeleteShapeUnit, DeleteConnectionUnit = diagram.DeleteConnectionUnit, TextBlock = diagram.TextBlock, Image = diagram.Image, Point = diagram.Point, Intersect = diagram.Intersect, ConnectionEditAdorner = diagram.ConnectionEditAdorner, UndoRedoService = diagram.UndoRedoService, ToolService = diagram.ToolService, Selector = diagram.Selector, ResizingAdorner = diagram.ResizingAdorner, ConnectorsAdorner = diagram.ConnectorsAdorner, Cursors = diagram.Cursors, Utils = diagram.Utils, Observable = kendo.Observable, ToBackUnit = diagram.ToBackUnit, ToFrontUnit = diagram.ToFrontUnit, PolylineRouter = diagram.PolylineRouter, CascadingRouter = diagram.CascadingRouter, isUndefined = Utils.isUndefined, isDefined = Utils.isDefined, defined = draw.util.defined, isArray = $.isArray, isFunction = kendo.isFunction, isString = Utils.isString, isPlainObject = $.isPlainObject, math = Math;\n var NS = '.kendoDiagram', CASCADING = 'cascading', ITEMBOUNDSCHANGE = 'itemBoundsChange', CHANGE = 'change', CLICK = 'click', DRAG = 'drag', DRAG_END = 'dragEnd', DRAG_START = 'dragStart', MOUSE_ENTER = 'mouseEnter', MOUSE_LEAVE = 'mouseLeave', ERROR = 'error', AUTO = 'Auto', TOP = 'Top', RIGHT = 'Right', LEFT = 'Left', BOTTOM = 'Bottom', MAXINT = 9007199254740992, SELECT = 'select', ITEMROTATE = 'itemRotate', PAN = 'pan', ZOOM_START = 'zoomStart', ZOOM_END = 'zoomEnd', NONE = 'none', DEFAULT_CANVAS_WIDTH = 600, DEFAULT_CANVAS_HEIGHT = 600, DEFAULT_SHAPE_TYPE = 'rectangle', DEFAULT_SHAPE_WIDTH = 100, DEFAULT_SHAPE_HEIGHT = 100, DEFAULT_SHAPE_MINWIDTH = 20, DEFAULT_SHAPE_MINHEIGHT = 20, DEFAULT_SHAPE_POSITION = 0, DEFAULT_CONNECTION_BACKGROUND = 'Yellow', MAX_VALUE = Number.MAX_VALUE, MIN_VALUE = -Number.MAX_VALUE, ABSOLUTE = 'absolute', TRANSFORMED = 'transformed', ROTATED = 'rotated', TRANSPARENT = 'transparent', WIDTH = 'width', HEIGHT = 'height', X = 'x', Y = 'y', MOUSEWHEEL_NS = 'DOMMouseScroll' + NS + ' mousewheel' + NS, MOBILE_ZOOM_RATE = 0.05, MOBILE_PAN_DISTANCE = 5, BUTTON_TEMPLATE = '#=text#', CONNECTION_CONTENT_OFFSET = 5;\n diagram.DefaultConnectors = [\n { name: TOP },\n { name: BOTTOM },\n { name: LEFT },\n { name: RIGHT },\n {\n name: AUTO,\n position: function (shape) {\n return shape.getPosition('center');\n }\n }\n ];\n var defaultButtons = {\n cancel: {\n text: 'Cancel',\n imageClass: 'k-i-cancel',\n className: 'k-diagram-cancel',\n iconClass: 'k-icon'\n },\n update: {\n text: 'Update',\n imageClass: 'k-i-checkmark',\n className: 'k-diagram-update',\n iconClass: 'k-icon'\n }\n };\n diagram.shapeDefaults = function (extra) {\n var defaults = {\n type: DEFAULT_SHAPE_TYPE,\n path: '',\n autoSize: true,\n visual: null,\n x: DEFAULT_SHAPE_POSITION,\n y: DEFAULT_SHAPE_POSITION,\n minWidth: DEFAULT_SHAPE_MINWIDTH,\n minHeight: DEFAULT_SHAPE_MINHEIGHT,\n width: DEFAULT_SHAPE_WIDTH,\n height: DEFAULT_SHAPE_HEIGHT,\n hover: {},\n editable: {\n connect: true,\n tools: []\n },\n connectors: diagram.DefaultConnectors,\n rotation: { angle: 0 }\n };\n Utils.simpleExtend(defaults, extra);\n return defaults;\n };\n function mwDelta(e) {\n var origEvent = e.originalEvent, delta = 0;\n if (origEvent.wheelDelta) {\n delta = -origEvent.wheelDelta / 40;\n delta = delta > 0 ? math.ceil(delta) : math.floor(delta);\n } else if (origEvent.detail) {\n delta = origEvent.detail;\n }\n return delta;\n }\n function isAutoConnector(connector) {\n return connector.options.name.toLowerCase() === AUTO.toLowerCase();\n }\n function closestConnector(point, connectors) {\n var minimumDistance = MAXINT, resCtr, connector;\n for (var i = 0; i < connectors.length; i++) {\n connector = connectors[i];\n if (!isAutoConnector(connector)) {\n var dist = point.distanceTo(connector.position());\n if (dist < minimumDistance) {\n minimumDistance = dist;\n resCtr = connector;\n }\n }\n }\n return resCtr;\n }\n function indicesOfItems(group, visuals) {\n var i, indices = [], visual;\n var children = group.drawingContainer().children;\n var length = children.length;\n for (i = 0; i < visuals.length; i++) {\n visual = visuals[i];\n for (var j = 0; j < length; j++) {\n if (children[j] == visual.drawingContainer()) {\n indices.push(j);\n break;\n }\n }\n }\n return indices;\n }\n var DiagramElement = Observable.extend({\n init: function (options) {\n var that = this;\n that.dataItem = (options || {}).dataItem;\n Observable.fn.init.call(that);\n that.options = deepExtend({ id: diagram.randomId() }, that.options, options);\n that.isSelected = false;\n that.visual = new Group({\n id: that.options.id,\n autoSize: that.options.autoSize\n });\n that.id = that.options.id;\n that._template();\n },\n options: {\n hover: {},\n cursor: Cursors.grip,\n content: { align: 'center middle' },\n selectable: true,\n serializable: true,\n enable: true\n },\n _getCursor: function (point) {\n if (this.adorner) {\n return this.adorner._getCursor(point);\n }\n return this.options.cursor;\n },\n visible: function (value) {\n if (isUndefined(value)) {\n return this.visual.visible();\n } else {\n this.visual.visible(value);\n }\n },\n bounds: function () {\n },\n refresh: function () {\n this.visual.redraw();\n },\n position: function (point) {\n this.options.x = point.x;\n this.options.y = point.y;\n this.visual.position(point);\n },\n toString: function () {\n return this.options.id;\n },\n serialize: function () {\n var json = deepExtend({}, { options: this.options });\n if (this.dataItem) {\n json.dataItem = this.dataItem.toString();\n }\n return json;\n },\n _content: function (content) {\n if (content !== undefined) {\n var options = this.options;\n if (diagram.Utils.isString(content)) {\n options.content.text = content;\n } else {\n deepExtend(options.content, content);\n }\n var contentOptions = options.content;\n var contentVisual = this._contentVisual;\n if (!contentVisual) {\n this._createContentVisual(contentOptions);\n } else {\n this._updateContentVisual(contentOptions);\n }\n }\n return this.options.content.text;\n },\n _createContentVisual: function (options) {\n if (options.text) {\n this._contentVisual = new TextBlock(options);\n this._contentVisual._includeInBBox = false;\n this.visual.append(this._contentVisual);\n }\n },\n _updateContentVisual: function (options) {\n this._contentVisual.redraw(options);\n },\n _hitTest: function (point) {\n var bounds = this.bounds();\n return this.visible() && bounds.contains(point) && this.options.enable;\n },\n _template: function () {\n var that = this;\n if (that.options.content.template) {\n var data = that.dataItem || {}, elementTemplate = kendo.template(that.options.content.template, { paramName: 'dataItem' });\n that.options.content.text = elementTemplate(data);\n }\n },\n _canSelect: function () {\n return this.options.selectable !== false;\n },\n toJSON: function () {\n return { id: this.options.id };\n }\n });\n var Connector = Class.extend({\n init: function (shape, options) {\n this.options = deepExtend({}, this.options, options);\n this.connections = [];\n this.shape = shape;\n },\n options: {\n width: 7,\n height: 7,\n fill: { color: DEFAULT_CONNECTION_BACKGROUND },\n hover: {}\n },\n position: function () {\n if (this.options.position) {\n return this.options.position(this.shape);\n } else {\n return this.shape.getPosition(this.options.name);\n }\n },\n toJSON: function () {\n return {\n shapeId: this.shape.toString(),\n connector: this.options.name\n };\n }\n });\n Connector.parse = function (diagram, str) {\n var tempStr = str.split(':'), id = tempStr[0], name = tempStr[1] || AUTO;\n for (var i = 0; i < diagram.shapes.length; i++) {\n var shape = diagram.shapes[i];\n if (shape.options.id == id) {\n return shape.getConnector(name.trim());\n }\n }\n };\n var Shape = DiagramElement.extend({\n init: function (options, diagram) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.diagram = diagram;\n this.updateOptionsFromModel();\n options = that.options;\n that.connectors = [];\n that.type = options.type;\n that.createShapeVisual();\n that.updateBounds();\n that.content(that.content());\n that._createConnectors();\n },\n options: diagram.shapeDefaults(),\n _setOptionsFromModel: function (model) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n this.options = deepExtend({}, this.options, modelOptions);\n this.redrawVisual();\n },\n updateOptionsFromModel: function (model, field) {\n if (this.diagram && this.diagram._isEditable) {\n var modelOptions = filterShapeDataItem(model || this.dataItem);\n if (model && field) {\n if (!dataviz.inArray(field, [\n 'x',\n 'y',\n 'width',\n 'height'\n ])) {\n if (this.options.visual) {\n this._redrawVisual();\n } else if (modelOptions.type) {\n this.options = deepExtend({}, this.options, modelOptions);\n this._redrawVisual();\n }\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n } else {\n var bounds = this.bounds();\n bounds[field] = model[field];\n this.bounds(bounds);\n }\n } else {\n this.options = deepExtend({}, this.options, modelOptions);\n }\n }\n },\n _redrawVisual: function () {\n this.visual.clear();\n this._contentVisual = null;\n this.options.dataItem = this.dataItem;\n this.createShapeVisual();\n this.updateBounds();\n },\n redrawVisual: function () {\n this._redrawVisual();\n if (this.options.content) {\n this._template();\n this.content(this.options.content);\n }\n },\n updateModel: function (syncChanges) {\n var diagram = this.diagram;\n if (diagram && diagram._isEditable) {\n var bounds = this._bounds;\n var model = this.dataItem;\n if (model) {\n diagram._suspendModelRefresh();\n if (defined(model.x) && bounds.x !== model.x) {\n model.set('x', bounds.x);\n }\n if (defined(model.y) && bounds.y !== model.y) {\n model.set('y', bounds.y);\n }\n if (defined(model.width) && bounds.width !== model.width) {\n model.set('width', bounds.width);\n }\n if (defined(model.height) && bounds.height !== model.height) {\n model.set('height', bounds.height);\n }\n this.dataItem = model;\n diagram._resumeModelRefresh();\n if (syncChanges) {\n diagram._syncShapeChanges();\n }\n }\n }\n },\n updateBounds: function () {\n var bounds = this.visual._measure(true);\n var options = this.options;\n this.bounds(new Rect(options.x, options.y, bounds.width, bounds.height));\n this._rotate();\n this._alignContent();\n },\n content: function (content) {\n var result = this._content(content);\n this._alignContent();\n return result;\n },\n _alignContent: function () {\n var contentOptions = this.options.content || {};\n var contentVisual = this._contentVisual;\n if (contentVisual && contentOptions.align) {\n var containerRect = this.visual._measure();\n var aligner = new diagram.RectAlign(containerRect);\n var contentBounds = contentVisual.drawingElement.bbox(null);\n var contentRect = new Rect(0, 0, contentBounds.width(), contentBounds.height());\n var alignedBounds = aligner.align(contentRect, contentOptions.align);\n contentVisual.position(alignedBounds.topLeft());\n }\n },\n _createConnectors: function () {\n var options = this.options, length = options.connectors.length, connectorDefaults = options.connectorDefaults, connector, i;\n for (i = 0; i < length; i++) {\n connector = new Connector(this, deepExtend({}, connectorDefaults, options.connectors[i]));\n this.connectors.push(connector);\n }\n },\n bounds: function (value) {\n var bounds;\n if (value) {\n if (isString(value)) {\n switch (value) {\n case TRANSFORMED:\n bounds = this._transformedBounds();\n break;\n case ABSOLUTE:\n bounds = this._transformedBounds();\n var pan = this.diagram._pan;\n bounds.x += pan.x;\n bounds.y += pan.y;\n break;\n case ROTATED:\n bounds = this._rotatedBounds();\n break;\n default:\n bounds = this._bounds;\n }\n } else {\n this._setBounds(value);\n this._triggerBoundsChange();\n if (!(this.diagram && this.diagram._layouting)) {\n this.refreshConnections();\n }\n }\n } else {\n bounds = this._bounds;\n }\n return bounds;\n },\n _setBounds: function (rect) {\n var options = this.options;\n var topLeft = rect.topLeft();\n var x = options.x = topLeft.x;\n var y = options.y = topLeft.y;\n var width = options.width = math.max(rect.width, options.minWidth);\n var height = options.height = math.max(rect.height, options.minHeight);\n this._bounds = new Rect(x, y, width, height);\n this.visual.redraw({\n x: x,\n y: y,\n width: width,\n height: height\n });\n },\n position: function (point) {\n if (point) {\n this.bounds(new Rect(point.x, point.y, this._bounds.width, this._bounds.height));\n } else {\n return this._bounds.topLeft();\n }\n },\n clone: function () {\n var json = this.serialize();\n json.options.id = diagram.randomId();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Shape(json.options);\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (isUndefined(value)) {\n value = true;\n }\n if (this._canSelect()) {\n if (this.isSelected != value) {\n selected = [];\n deselected = [];\n this.isSelected = value;\n if (this.isSelected) {\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n Utils.remove(diagram._selectedItems, this);\n deselected.push(this);\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n rotate: function (angle, center, undoable) {\n var rotate = this.visual.rotate();\n if (angle !== undefined) {\n if (undoable !== false && this.diagram && this.diagram.undoRedoService && angle !== rotate.angle) {\n this.diagram.undoRedoService.add(new diagram.RotateUnit(this.diagram._resizingAdorner, [this], [rotate.angle]), false);\n }\n var b = this.bounds(), sc = new Point(b.width / 2, b.height / 2), deltaAngle, newPosition;\n if (center) {\n deltaAngle = angle - rotate.angle;\n newPosition = b.center().rotate(center, 360 - deltaAngle).minus(sc);\n this._rotationOffset = this._rotationOffset.plus(newPosition.minus(b.topLeft()));\n this.position(newPosition);\n }\n this.visual.rotate(angle, sc);\n this.options.rotation.angle = angle;\n if (this.diagram && this.diagram._connectorsAdorner) {\n this.diagram._connectorsAdorner.refresh();\n }\n this.refreshConnections();\n if (this.diagram) {\n this.diagram.trigger(ITEMROTATE, { item: this });\n }\n }\n return rotate;\n },\n connections: function (type) {\n var result = [], i, j, con, cons, ctr;\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n cons = ctr.connections;\n for (j = 0, cons; j < cons.length; j++) {\n con = cons[j];\n if (type == 'out') {\n var source = con.source();\n if (source.shape && source.shape == this) {\n result.push(con);\n }\n } else if (type == 'in') {\n var target = con.target();\n if (target.shape && target.shape == this) {\n result.push(con);\n }\n } else {\n result.push(con);\n }\n }\n }\n return result;\n },\n refreshConnections: function () {\n $.each(this.connections(), function () {\n this.refresh();\n });\n },\n getConnector: function (nameOrPoint) {\n var i, ctr;\n if (isString(nameOrPoint)) {\n nameOrPoint = nameOrPoint.toLocaleLowerCase();\n for (i = 0; i < this.connectors.length; i++) {\n ctr = this.connectors[i];\n if (ctr.options.name.toLocaleLowerCase() == nameOrPoint) {\n return ctr;\n }\n }\n } else if (nameOrPoint instanceof Point) {\n return closestConnector(nameOrPoint, this.connectors);\n } else {\n return this.connectors.length ? this.connectors[0] : null;\n }\n },\n getPosition: function (side) {\n var b = this.bounds(), fnName = side.charAt(0).toLowerCase() + side.slice(1);\n if (isFunction(b[fnName])) {\n return this._transformPoint(b[fnName]());\n }\n return b.center();\n },\n redraw: function (options) {\n if (options) {\n var shapeOptions = this.options;\n var boundsChange;\n this.shapeVisual.redraw(this._visualOptions(options));\n if (this._diffNumericOptions(options, [\n WIDTH,\n HEIGHT,\n X,\n Y\n ])) {\n this.bounds(new Rect(shapeOptions.x, shapeOptions.y, shapeOptions.width, shapeOptions.height));\n boundsChange = true;\n }\n if (options.connectors) {\n shapeOptions.connectors = options.connectors;\n this._updateConnectors();\n }\n shapeOptions = deepExtend(shapeOptions, options);\n if (options.rotation || boundsChange) {\n this._rotate();\n }\n if (shapeOptions.content) {\n this.content(shapeOptions.content);\n }\n }\n },\n _updateConnectors: function () {\n var connections = this.connections();\n this.connectors = [];\n this._createConnectors();\n var connection;\n var source;\n var target;\n for (var idx = 0; idx < connections.length; idx++) {\n connection = connections[idx];\n source = connection.source();\n target = connection.target();\n if (source.shape && source.shape === this) {\n connection.source(this.getConnector(source.options.name) || null);\n } else if (target.shape && target.shape === this) {\n connection.target(this.getConnector(target.options.name) || null);\n }\n connection.updateModel();\n }\n },\n _diffNumericOptions: diagram.diffNumericOptions,\n _visualOptions: function (options) {\n return {\n data: options.path,\n source: options.source,\n hover: options.hover,\n fill: options.fill,\n stroke: options.stroke\n };\n },\n _triggerBoundsChange: function () {\n if (this.diagram) {\n this.diagram.trigger(ITEMBOUNDSCHANGE, {\n item: this,\n bounds: this._bounds.clone()\n });\n }\n },\n _transformPoint: function (point) {\n var rotate = this.rotate(), bounds = this.bounds(), tl = bounds.topLeft();\n if (rotate.angle) {\n point.rotate(rotate.center().plus(tl), 360 - rotate.angle);\n }\n return point;\n },\n _transformedBounds: function () {\n var bounds = this.bounds(), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(this.diagram.modelToView(tl), this.diagram.modelToView(br));\n },\n _rotatedBounds: function () {\n var bounds = this.bounds().rotatedBounds(this.rotate().angle), tl = bounds.topLeft(), br = bounds.bottomRight();\n return Rect.fromPoints(tl, br);\n },\n _rotate: function () {\n var rotation = this.options.rotation;\n if (rotation && rotation.angle) {\n this.rotate(rotation.angle);\n }\n this._rotationOffset = new Point();\n },\n _hover: function (value) {\n var options = this.options, hover = options.hover, stroke = options.stroke, fill = options.fill;\n if (value && isDefined(hover.stroke)) {\n stroke = deepExtend({}, stroke, hover.stroke);\n }\n if (value && isDefined(hover.fill)) {\n fill = hover.fill;\n }\n this.shapeVisual.redraw({\n stroke: stroke,\n fill: fill\n });\n if (options.editable && options.editable.connect) {\n this.diagram._showConnectors(this, value);\n }\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var bounds = this.bounds(), rotatedPoint, angle = this.rotate().angle;\n if (value.isEmpty && !value.isEmpty()) {\n return Intersect.rects(value, bounds, angle ? angle : 0);\n } else {\n rotatedPoint = value.clone().rotate(bounds.center(), angle);\n if (bounds.contains(rotatedPoint)) {\n return this;\n }\n }\n }\n },\n toJSON: function () {\n return { shapeId: this.options.id };\n },\n createShapeVisual: function () {\n var options = this.options;\n var visualOptions = this._visualOptions(options);\n var visualTemplate = options.visual;\n var type = (options.type + '').toLocaleLowerCase();\n var shapeVisual;\n visualOptions.width = options.width;\n visualOptions.height = options.height;\n if (isFunction(visualTemplate)) {\n shapeVisual = visualTemplate.call(this, options);\n } else if (visualOptions.data) {\n shapeVisual = new Path(visualOptions);\n translateToOrigin(shapeVisual);\n } else if (type == 'rectangle') {\n shapeVisual = new Rectangle(visualOptions);\n } else if (type == 'circle') {\n shapeVisual = new Circle(visualOptions);\n } else if (type == 'text') {\n shapeVisual = new TextBlock(visualOptions);\n } else if (type == 'image') {\n shapeVisual = new Image(visualOptions);\n } else {\n shapeVisual = new Path(visualOptions);\n }\n this.shapeVisual = shapeVisual;\n this.visual.append(this.shapeVisual);\n }\n });\n var Connection = DiagramElement.extend({\n init: function (from, to, options) {\n var that = this;\n DiagramElement.fn.init.call(that, options);\n this.updateOptionsFromModel();\n this._initRouter();\n that.path = new diagram.Polyline(that.options);\n that.path.fill(TRANSPARENT);\n that.visual.append(that.path);\n that._sourcePoint = that._targetPoint = new Point();\n that._setSource(from);\n that._setTarget(to);\n that.content(that.options.content);\n that.definers = [];\n if (defined(options) && options.points) {\n that.points(options.points);\n }\n },\n options: {\n hover: { stroke: {} },\n startCap: NONE,\n endCap: NONE,\n points: [],\n selectable: true,\n fromConnector: AUTO,\n toConnector: AUTO\n },\n _setOptionsFromModel: function (model) {\n this.updateOptionsFromModel(model || this.dataItem);\n },\n updateOptionsFromModel: function (model) {\n if (this.diagram && this.diagram._isEditable) {\n var dataMap = this.diagram._dataMap;\n var options = filterConnectionDataItem(model || this.dataItem);\n if (model) {\n if (defined(options.from)) {\n var from = dataMap[options.from];\n if (from && defined(options.fromConnector)) {\n from = from.getConnector(options.fromConnector);\n }\n this.source(from);\n } else if (defined(options.fromX) && defined(options.fromY)) {\n this.source(new Point(options.fromX, options.fromY));\n }\n if (defined(options.to)) {\n var to = dataMap[options.to];\n if (to && defined(options.toConnector)) {\n to = to.getConnector(options.toConnector);\n }\n this.target(to);\n } else if (defined(options.toX) && defined(options.toY)) {\n this.target(new Point(options.toX, options.toY));\n }\n if (defined(options.type) && this.type() !== options.type) {\n this.points([]);\n this.type(options.type);\n }\n this.dataItem = model;\n this._template();\n this.redraw(this.options);\n } else {\n this.options = deepExtend({}, options, this.options);\n }\n }\n },\n updateModel: function (syncChanges) {\n if (this.diagram && this.diagram._isEditable) {\n if (this.diagram.connectionsDataSource) {\n var model = this.diagram.connectionsDataSource.getByUid(this.dataItem.uid);\n if (model) {\n this.diagram._suspendModelRefresh();\n if (defined(this.options.fromX) && this.options.fromX !== null) {\n clearField('from', model);\n clearField('fromConnector', model);\n model.set('fromX', this.options.fromX);\n model.set('fromY', this.options.fromY);\n } else {\n model.set('from', this.options.from);\n if (defined(model.fromConnector)) {\n model.set('fromConnector', this.sourceConnector ? this.sourceConnector.options.name : null);\n }\n clearField('fromX', model);\n clearField('fromY', model);\n }\n if (defined(this.options.toX) && this.options.toX !== null) {\n clearField('to', model);\n clearField('toConnector', model);\n model.set('toX', this.options.toX);\n model.set('toY', this.options.toY);\n } else {\n model.set('to', this.options.to);\n if (defined(model.toConnector)) {\n model.set('toConnector', this.targetConnector ? this.targetConnector.options.name : null);\n }\n clearField('toX', model);\n clearField('toY', model);\n }\n if (defined(this.options.type) && defined(model.type)) {\n model.set('type', this.options.type);\n }\n this.dataItem = model;\n this.diagram._resumeModelRefresh();\n if (syncChanges) {\n this.diagram._syncConnectionChanges();\n }\n }\n }\n }\n },\n sourcePoint: function () {\n return this._resolvedSourceConnector ? this._resolvedSourceConnector.position() : this._sourcePoint;\n },\n _setSource: function (source) {\n var shapeSource = source instanceof Shape;\n var defaultConnector = this.options.fromConnector || AUTO;\n var dataItem;\n if (shapeSource && !source.getConnector(defaultConnector)) {\n return;\n }\n if (source !== undefined) {\n this.from = source;\n }\n this._removeFromSourceConnector();\n if (source === null) {\n if (this.sourceConnector) {\n this._sourcePoint = (this._resolvedSourceConnector || this.sourceConnector).position();\n this._clearSourceConnector();\n this._setFromOptions(null, this._sourcePoint);\n }\n } else if (source instanceof Connector) {\n dataItem = source.shape.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source;\n this.sourceConnector.connections.push(this);\n } else if (source instanceof Point) {\n this._setFromOptions(null, source);\n this._sourcePoint = source;\n if (this.sourceConnector) {\n this._clearSourceConnector();\n }\n } else if (shapeSource) {\n dataItem = source.dataItem;\n if (dataItem) {\n this._setFromOptions(dataItem.id);\n }\n this.sourceConnector = source.getConnector(defaultConnector);\n this.sourceConnector.connections.push(this);\n }\n },\n source: function (source, undoable) {\n if (isDefined(source)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, source));\n }\n this._setSource(source);\n this.refresh();\n }\n return this.sourceConnector ? this.sourceConnector : this._sourcePoint;\n },\n _setFromOptions: function (from, fromPoint) {\n this.options.from = from;\n if (fromPoint) {\n this.options.fromX = fromPoint.x;\n this.options.fromY = fromPoint.y;\n } else {\n this.options.fromX = null;\n this.options.fromY = null;\n }\n },\n sourceDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.left = null;\n this._sourceDefiner = value;\n this.source(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._sourceDefiner) {\n this._sourceDefiner = new diagram.PathDefiner(this.sourcePoint(), null, null);\n }\n return this._sourceDefiner;\n }\n },\n targetPoint: function () {\n return this._resolvedTargetConnector ? this._resolvedTargetConnector.position() : this._targetPoint;\n },\n _setTarget: function (target) {\n var shapeTarget = target instanceof Shape;\n var defaultConnector = this.options.toConnector || AUTO;\n var dataItem;\n if (shapeTarget && !target.getConnector(defaultConnector)) {\n return;\n }\n if (target !== undefined) {\n this.to = target;\n }\n this._removeFromTargetConnector();\n if (target === null) {\n if (this.targetConnector) {\n this._targetPoint = (this._resolvedTargetConnector || this.targetConnector).position();\n this._clearTargetConnector();\n this._setToOptions(null, this._targetPoint);\n }\n } else if (target instanceof Connector) {\n dataItem = target.shape.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target;\n this.targetConnector.connections.push(this);\n } else if (target instanceof Point) {\n this._setToOptions(null, target);\n this._targetPoint = target;\n if (this.targetConnector) {\n this._clearTargetConnector();\n }\n } else if (shapeTarget) {\n dataItem = target.dataItem;\n if (dataItem) {\n this._setToOptions(dataItem.id);\n }\n this.targetConnector = target.getConnector(defaultConnector);\n this.targetConnector.connections.push(this);\n }\n },\n target: function (target, undoable) {\n if (isDefined(target)) {\n if (undoable && this.diagram) {\n this.diagram.undoRedoService.addCompositeItem(new diagram.ConnectionEditUnit(this, undefined, target));\n }\n this._setTarget(target);\n this.refresh();\n }\n return this.targetConnector ? this.targetConnector : this._targetPoint;\n },\n _setToOptions: function (to, toPoint) {\n this.options.to = to;\n if (toPoint) {\n this.options.toX = toPoint.x;\n this.options.toY = toPoint.y;\n } else {\n this.options.toX = null;\n this.options.toY = null;\n }\n },\n targetDefiner: function (value) {\n if (value) {\n if (value instanceof diagram.PathDefiner) {\n value.right = null;\n this._targetDefiner = value;\n this.target(value.point);\n } else {\n throw 'The sourceDefiner needs to be a PathDefiner.';\n }\n } else {\n if (!this._targetDefiner) {\n this._targetDefiner = new diagram.PathDefiner(this.targetPoint(), null, null);\n }\n return this._targetDefiner;\n }\n },\n _updateConnectors: function () {\n this._updateConnector(this.source(), 'source');\n this._updateConnector(this.target(), 'target');\n },\n _updateConnector: function (instance, name) {\n var that = this;\n var diagram = that.diagram;\n if (instance instanceof Connector && !diagram.getShapeById(instance.shape.id)) {\n var dataItem = instance.shape.dataItem;\n var connectorName = instance.options.name;\n var setNewTarget = function () {\n var shape = diagram._dataMap[dataItem.id];\n instance = shape.getConnector(connectorName);\n that[name](instance, false);\n that.updateModel();\n };\n if (diagram._dataMap[dataItem.id]) {\n setNewTarget();\n } else {\n var inactiveItem = diagram._inactiveShapeItems.getByUid(dataItem.uid);\n if (inactiveItem) {\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(setNewTarget));\n }\n }\n } else {\n that[name](instance, false);\n }\n },\n content: function (content) {\n var result = this._content(content);\n if (defined(content)) {\n this._alignContent();\n }\n return result;\n },\n _createContentVisual: function (options) {\n var visual;\n if (isFunction(options.visual)) {\n visual = options.visual.call(this, options);\n } else if (options.text) {\n visual = new TextBlock(options);\n }\n if (visual) {\n this._contentVisual = visual;\n visual._includeInBBox = false;\n this.visual.append(visual);\n }\n return visual;\n },\n _updateContentVisual: function (options) {\n if (isFunction(options.visual)) {\n this.visual.remove(this._contentVisual);\n this._createContentVisual(options);\n } else {\n this._contentVisual.redraw(options);\n }\n },\n _alignContent: function () {\n if (this._contentVisual) {\n var offset = CONNECTION_CONTENT_OFFSET;\n var points = this.allPoints();\n var endIdx = math.floor(points.length / 2);\n var startIdx = endIdx - 1;\n while (startIdx > 0 && points[startIdx].equals(points[endIdx])) {\n startIdx--;\n endIdx++;\n }\n var endPoint = points[endIdx];\n var startPoint = points[startIdx];\n var boundingBox = this._contentVisual._measure();\n var width = boundingBox.width;\n var height = boundingBox.height;\n var alignToPath = points.length % 2 === 0;\n var distance = startPoint.distanceTo(endPoint);\n if (alignToPath && points.length > 2 && distance > 0 && (startPoint.y === endPoint.y && distance < width || startPoint.x === endPoint.x && distance < height)) {\n alignToPath = false;\n offset = 0;\n }\n var point;\n if (alignToPath) {\n var angle = draw.util.deg(math.atan2(endPoint.y - startPoint.y, endPoint.x - startPoint.x));\n point = new Point((endPoint.x - startPoint.x) / 2 + startPoint.x, (endPoint.y - startPoint.y) / 2 + startPoint.y);\n if (math.abs(angle) === 90) {\n point.x += offset;\n point.y -= height / 2;\n } else if (angle % 180 === 0) {\n point.x -= width / 2;\n point.y -= height + offset;\n } else if (angle < -90 || 0 < angle && angle < 90) {\n point.y -= height;\n } else if (angle < 0 || angle > 90) {\n point.x -= width;\n point.y -= height;\n }\n } else {\n var midIdx = math.floor(points.length / 2);\n point = points[midIdx].clone();\n startPoint = points[midIdx - 1];\n endPoint = points[midIdx + 1];\n var offsetX = startPoint.x <= point.x && endPoint.x <= point.x ? offset : -boundingBox.width - offset;\n var offsetY = startPoint.y <= point.y && endPoint.y <= point.y ? offset : -boundingBox.height - offset;\n point.x += offsetX;\n point.y += offsetY;\n }\n this._contentVisual.position(point);\n }\n },\n select: function (value) {\n var diagram = this.diagram, selected, deselected;\n if (this._canSelect()) {\n if (this.isSelected !== value) {\n this.isSelected = value;\n selected = [];\n deselected = [];\n if (this.isSelected) {\n this.adorner = new ConnectionEditAdorner(this, this.options.selection);\n diagram._adorn(this.adorner, true);\n diagram._selectedItems.push(this);\n selected.push(this);\n } else {\n if (this.adorner) {\n diagram._adorn(this.adorner, false);\n Utils.remove(diagram._selectedItems, this);\n this.adorner = undefined;\n deselected.push(this);\n }\n }\n if (this.adorner) {\n this.adorner.refresh();\n }\n if (!diagram._internalSelection) {\n diagram._selectionChanged(selected, deselected);\n }\n return true;\n }\n }\n },\n bounds: function (value) {\n if (value && !isString(value)) {\n this._bounds = value;\n } else {\n return this._bounds;\n }\n },\n type: function (value) {\n var options = this.options;\n if (value) {\n if (value !== options.type) {\n options.type = value;\n this._initRouter();\n this.refresh();\n }\n } else {\n return options.type;\n }\n },\n _initRouter: function () {\n var type = (this.options.type || '').toLowerCase();\n if (type == CASCADING) {\n this._router = new CascadingRouter(this);\n } else {\n this._router = new PolylineRouter(this);\n }\n },\n points: function (value) {\n if (value) {\n this.definers = [];\n for (var i = 0; i < value.length; i++) {\n var definition = value[i];\n if (definition instanceof diagram.Point) {\n this.definers.push(new diagram.PathDefiner(definition));\n } else if (definition.hasOwnProperty('x') && definition.hasOwnProperty('y')) {\n this.definers.push(new diagram.PathDefiner(new Point(definition.x, definition.y)));\n } else {\n throw 'A Connection point needs to be a Point or an object with x and y properties.';\n }\n }\n } else {\n var pts = [];\n if (isDefined(this.definers)) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n return pts;\n }\n },\n allPoints: function () {\n var pts = [this.sourcePoint()];\n if (this.definers) {\n for (var k = 0; k < this.definers.length; k++) {\n pts.push(this.definers[k].point);\n }\n }\n pts.push(this.targetPoint());\n return pts;\n },\n refresh: function () {\n this._resolveConnectors();\n this._refreshPath();\n this._alignContent();\n if (this.adorner) {\n this.adorner.refresh();\n }\n },\n _resolveConnectors: function () {\n var connection = this, sourcePoint, targetPoint, sourceConnectors, targetConnectors, source = connection.source(), target = connection.target();\n if (source instanceof Point) {\n sourcePoint = source;\n } else if (source instanceof Connector) {\n if (isAutoConnector(source)) {\n sourceConnectors = source.shape.connectors;\n } else {\n sourceConnectors = [source];\n }\n }\n if (target instanceof Point) {\n targetPoint = target;\n } else if (target instanceof Connector) {\n if (isAutoConnector(target)) {\n targetConnectors = target.shape.connectors;\n } else {\n targetConnectors = [target];\n }\n }\n if (sourcePoint) {\n if (targetConnectors) {\n connection._resolvedTargetConnector = closestConnector(sourcePoint, targetConnectors);\n }\n } else if (sourceConnectors) {\n if (targetPoint) {\n connection._resolvedSourceConnector = closestConnector(targetPoint, sourceConnectors);\n } else if (targetConnectors) {\n this._resolveAutoConnectors(sourceConnectors, targetConnectors);\n }\n }\n },\n _resolveAutoConnectors: function (sourceConnectors, targetConnectors) {\n var minNonConflict = MAXINT;\n var minDist = MAXINT;\n var minNonConflictSource, minNonConflictTarget;\n var sourcePoint, targetPoint;\n var minSource, minTarget;\n var sourceConnector, targetConnector;\n var sourceIdx, targetIdx;\n var dist;\n for (sourceIdx = 0; sourceIdx < sourceConnectors.length; sourceIdx++) {\n sourceConnector = sourceConnectors[sourceIdx];\n if (!isAutoConnector(sourceConnector)) {\n sourcePoint = sourceConnector.position();\n for (targetIdx = 0; targetIdx < targetConnectors.length; targetIdx++) {\n targetConnector = targetConnectors[targetIdx];\n if (!isAutoConnector(targetConnector)) {\n targetPoint = targetConnector.position();\n dist = math.round(sourcePoint.distanceTo(targetPoint));\n if (dist < minNonConflict && this.diagram && this._testRoutePoints(sourcePoint, targetPoint, sourceConnector, targetConnector)) {\n minNonConflict = dist;\n minNonConflictSource = sourceConnector;\n minNonConflictTarget = targetConnector;\n }\n if (dist < minDist) {\n minSource = sourceConnector;\n minTarget = targetConnector;\n minDist = dist;\n }\n }\n }\n }\n }\n if (minNonConflictSource) {\n minSource = minNonConflictSource;\n minTarget = minNonConflictTarget;\n }\n this._resolvedSourceConnector = minSource;\n this._resolvedTargetConnector = minTarget;\n },\n _testRoutePoints: function (sourcePoint, targetPoint, sourceConnector, targetConnector) {\n var router = this._router;\n var passRoute = true;\n if (router instanceof CascadingRouter) {\n var points = router.routePoints(sourcePoint, targetPoint, sourceConnector, targetConnector), start, end, rect, exclude;\n exclude = this._getRouteExclude(sourcePoint, targetPoint, sourceConnector.shape, targetConnector.shape);\n points.unshift(sourcePoint);\n points.push(targetPoint);\n for (var idx = 1; idx < points.length; idx++) {\n start = points[idx - 1];\n end = points[idx];\n rect = new Rect(math.min(start.x, end.x), math.min(start.y, end.y), math.abs(start.x - end.x), math.abs(start.y - end.y));\n if (rect.width > 0) {\n rect.x++;\n rect.width -= 2;\n }\n if (rect.height > 0) {\n rect.y++;\n rect.height -= 2;\n }\n if (!rect.isEmpty() && this.diagram._shapesQuadTree.hitTestRect(rect, exclude)) {\n passRoute = false;\n break;\n }\n }\n }\n return passRoute;\n },\n _getRouteExclude: function (sourcePoint, targetPoint, sourceShape, targetShape) {\n var exclude = [];\n if (this._isPointInsideShape(sourcePoint, sourceShape)) {\n exclude.push(sourceShape);\n }\n if (this._isPointInsideShape(targetPoint, targetShape)) {\n exclude.push(targetShape);\n }\n return exclude;\n },\n _isPointInsideShape: function (point, shape) {\n var bounds = shape.bounds(), rotatedPoint, angle = shape.rotate().angle, pointX, pointY, boundsX = bounds.x, boundsY = bounds.y;\n rotatedPoint = point.clone().rotate(bounds.center(), angle);\n pointX = rotatedPoint.x;\n pointY = rotatedPoint.y;\n return pointX > boundsX && pointX < boundsX + bounds.width && pointY > boundsY && pointY < boundsY + bounds.height;\n },\n redraw: function (options) {\n if (options) {\n this.options = deepExtend({}, this.options, options);\n var points = this.options.points;\n if (defined(points) && points.length > 0) {\n this.points(points);\n this._refreshPath();\n }\n if (options && options.content || options.text) {\n this.content(options.content);\n }\n this.path.redraw({\n fill: options.fill,\n stroke: options.stroke,\n startCap: options.startCap,\n endCap: options.endCap\n });\n }\n },\n clone: function () {\n var json = this.serialize();\n if (this.diagram && this.diagram._isEditable && defined(this.dataItem)) {\n json.options.dataItem = cloneDataItem(this.dataItem);\n }\n return new Connection(this.from, this.to, json.options);\n },\n serialize: function () {\n var from = this.from.toJSON ? this.from.toJSON : this.from.toString(), to = this.to.toJSON ? this.to.toJSON : this.to.toString();\n var json = deepExtend({}, {\n options: this.options,\n from: from,\n to: to\n });\n if (defined(this.dataItem)) {\n json.dataItem = this.dataItem.toString();\n }\n json.options.points = this.points();\n return json;\n },\n _hitTest: function (value) {\n if (this.visible()) {\n var p = new Point(value.x, value.y), from = this.sourcePoint(), to = this.targetPoint();\n if (value.isEmpty && !value.isEmpty() && value.contains(from) && value.contains(to)) {\n return this;\n }\n if (this._router.hitTest(p)) {\n return this;\n }\n }\n },\n _hover: function (value) {\n var color = (this.options.stroke || {}).color;\n if (value && isDefined(this.options.hover.stroke.color)) {\n color = this.options.hover.stroke.color;\n }\n this.path.redraw({ stroke: { color: color } });\n },\n _refreshPath: function () {\n if (!defined(this.path)) {\n return;\n }\n this._drawPath();\n this.bounds(this._router.getBounds());\n },\n _drawPath: function () {\n if (this._router) {\n this._router.route();\n }\n var source = this.sourcePoint();\n var target = this.targetPoint();\n var points = this.points();\n this.path.redraw({ points: [source].concat(points, [target]) });\n },\n _clearSourceConnector: function () {\n this.sourceConnector = undefined;\n this._resolvedSourceConnector = undefined;\n },\n _clearTargetConnector: function () {\n this.targetConnector = undefined;\n this._resolvedTargetConnector = undefined;\n },\n _removeFromSourceConnector: function () {\n if (this.sourceConnector) {\n Utils.remove(this.sourceConnector.connections, this);\n }\n },\n _removeFromTargetConnector: function () {\n if (this.targetConnector) {\n Utils.remove(this.targetConnector.connections, this);\n }\n },\n toJSON: function () {\n var connection = this;\n var from, to, point;\n if (connection.from && connection.from.toJSON) {\n from = connection.from.toJSON();\n } else {\n point = connection._sourcePoint;\n from = {\n x: point.x,\n y: point.y\n };\n }\n if (connection.to && connection.to.toJSON) {\n to = connection.to.toJSON();\n } else {\n point = connection._targetPoint;\n to = {\n x: point.x,\n y: point.y\n };\n }\n return {\n from: from,\n to: to\n };\n }\n });\n var Diagram = Widget.extend({\n init: function (element, userOptions) {\n var that = this;\n kendo.destroy(element);\n Widget.fn.init.call(that, element, userOptions);\n that._initTheme();\n that._initElements();\n that._extendLayoutOptions(that.options);\n that._initDefaults(userOptions);\n that._interactionDefaults();\n that._initCanvas();\n that.mainLayer = new Group({ id: 'main-layer' });\n that.canvas.append(that.mainLayer);\n that._shapesQuadTree = new ShapesQuadTree(that);\n that._pan = new Point();\n that._adorners = [];\n that.adornerLayer = new Group({ id: 'adorner-layer' });\n that.canvas.append(that.adornerLayer);\n that._createHandlers();\n that._initialize();\n that._resizingAdorner = new ResizingAdorner(that, { editable: that.options.editable });\n that._connectorsAdorner = new ConnectorsAdorner(that);\n that._adorn(that._resizingAdorner, true);\n that._adorn(that._connectorsAdorner, true);\n that.selector = new Selector(that);\n that._clipboard = [];\n that.pauseMouseHandlers = false;\n that._fetchFreshData();\n that._createGlobalToolBar();\n that._createOptionElements();\n that.zoom(that.options.zoom);\n that.canvas.draw();\n },\n options: {\n name: 'Diagram',\n theme: 'default',\n layout: '',\n zoomRate: 0.1,\n zoom: 1,\n zoomMin: 0,\n zoomMax: 2,\n dataSource: {},\n draggable: true,\n template: '',\n autoBind: true,\n editable: {\n rotate: {},\n resize: {},\n text: true,\n tools: [],\n drag: {\n snap: {\n size: 10,\n angle: 10\n }\n },\n remove: true\n },\n pannable: {},\n selectable: { key: 'none' },\n tooltip: {\n enabled: true,\n format: '{0}'\n },\n copy: {\n enabled: true,\n offsetX: 20,\n offsetY: 20\n },\n shapeDefaults: diagram.shapeDefaults({ undoable: true }),\n connectionDefaults: {\n editable: { tools: [] },\n type: CASCADING\n },\n shapes: [],\n connections: []\n },\n events: [\n ZOOM_END,\n ZOOM_START,\n PAN,\n SELECT,\n ITEMROTATE,\n ITEMBOUNDSCHANGE,\n CHANGE,\n CLICK,\n MOUSE_ENTER,\n MOUSE_LEAVE,\n 'toolBarClick',\n 'save',\n 'cancel',\n 'edit',\n 'remove',\n 'add',\n 'dataBound',\n DRAG_START,\n DRAG,\n DRAG_END\n ],\n items: function () {\n return $();\n },\n _createGlobalToolBar: function () {\n var editable = this.options.editable;\n if (editable) {\n var tools = editable.tools;\n if (this._isEditable && tools !== false && (!tools || tools.length === 0)) {\n tools = [\n 'createShape',\n 'undo',\n 'redo',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n }\n if (tools && tools.length) {\n this.toolBar = new DiagramToolBar(this, {\n tools: tools || {},\n click: proxy(this._toolBarClick, this),\n modal: false\n });\n this.toolBar.element.css({ textAlign: 'left' });\n this.element.prepend(this.toolBar.element);\n this._resize();\n }\n }\n },\n createShape: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var dataSource = this.dataSource;\n var view = dataSource.view() || [];\n var index = view.length;\n var model = createModel(dataSource, {});\n var shape = this._createShape(model, {});\n if (!this.trigger('add', { shape: shape })) {\n dataSource.insert(index, model);\n var inactiveItem = this._inactiveShapeItems.getByUid(model.uid);\n inactiveItem.element = shape;\n this.edit(shape);\n }\n }\n },\n _createShape: function (dataItem, options) {\n options = deepExtend({}, this.options.shapeDefaults, options);\n options.dataItem = dataItem;\n var shape = new Shape(options, this);\n return shape;\n },\n createConnection: function () {\n if (this.editor && this.editor.end() || !this.editor) {\n var connectionsDataSource = this.connectionsDataSource;\n var view = connectionsDataSource.view() || [];\n var index = view.length;\n var model = createModel(connectionsDataSource, {});\n var connection = this._createConnection(model);\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[model.uid] = connection;\n connectionsDataSource.insert(index, model);\n this.addConnection(connection, false);\n this.edit(connection);\n }\n }\n },\n _createConnection: function (dataItem, source, target) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(source || new Point(), target || new Point(), options);\n return connection;\n },\n editModel: function (dataItem, editorType) {\n this.cancelEdit();\n var editors, template;\n var editable = this.options.editable;\n if (editorType == 'shape') {\n editors = editable.shapeEditors;\n template = editable.shapeTemplate;\n } else if (editorType == 'connection') {\n var connectionSelectorHandler = proxy(connectionSelector, this);\n editors = deepExtend({}, {\n from: connectionSelectorHandler,\n to: connectionSelectorHandler\n }, editable.connectionEditors);\n template = editable.connectionTemplate;\n } else {\n return;\n }\n this.editor = new PopupEditor(this.element, {\n update: proxy(this._update, this),\n cancel: proxy(this._cancel, this),\n model: dataItem,\n type: editorType,\n target: this,\n editors: editors,\n template: template\n });\n this.trigger('edit', this._editArgs());\n },\n edit: function (item) {\n if (item.dataItem) {\n var editorType = item instanceof Shape ? 'shape' : 'connection';\n this.editModel(item.dataItem, editorType);\n }\n },\n cancelEdit: function () {\n if (this.editor) {\n this._getEditDataSource().cancelChanges(this.editor.model);\n this._destroyEditor();\n }\n },\n saveEdit: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n }\n },\n _update: function () {\n if (this.editor && this.editor.end() && !this.trigger('save', this._editArgs())) {\n this._getEditDataSource().sync();\n this._destroyEditor();\n }\n },\n _cancel: function () {\n if (this.editor && !this.trigger('cancel', this._editArgs())) {\n var model = this.editor.model;\n this._getEditDataSource().cancelChanges(model);\n var element = this._connectionsDataMap[model.uid] || this._dataMap[model.id];\n if (element) {\n element._setOptionsFromModel(model);\n }\n this._destroyEditor();\n }\n },\n _getEditDataSource: function () {\n return this.editor.options.type === 'shape' ? this.dataSource : this.connectionsDataSource;\n },\n _editArgs: function () {\n var result = { container: this.editor.wrapper };\n result[this.editor.options.type] = this.editor.model;\n return result;\n },\n _destroyEditor: function () {\n if (this.editor) {\n this.editor.close();\n this.editor = null;\n }\n },\n _initElements: function () {\n this.wrapper = this.element.empty().css('position', 'relative').attr('tabindex', 0).addClass('k-widget k-diagram');\n this.scrollable = $('
        ').appendTo(this.element);\n },\n _initDefaults: function (userOptions) {\n var options = this.options;\n var editable = options.editable;\n var shapeDefaults = options.shapeDefaults;\n var connectionDefaults = options.connectionDefaults;\n var userShapeDefaults = (userOptions || {}).shapeDefaults;\n if (editable === false) {\n shapeDefaults.editable = false;\n connectionDefaults.editable = false;\n } else {\n copyDefaultOptions(editable, shapeDefaults.editable, [\n 'drag',\n 'remove',\n 'connect'\n ]);\n copyDefaultOptions(editable, connectionDefaults.editable, [\n 'drag',\n 'remove'\n ]);\n }\n if (userShapeDefaults && userShapeDefaults.connectors) {\n options.shapeDefaults.connectors = userShapeDefaults.connectors;\n }\n },\n _interactionDefaults: function () {\n var options = this.options;\n var selectable = options.selectable;\n var pannable = options.pannable;\n var mobile = kendo.support.mobileOS;\n if (selectable && !defined(selectable.multiple)) {\n options.selectable = deepExtend({ multiple: mobile ? false : true }, options.selectable);\n }\n if (pannable && !defined(pannable.key)) {\n options.pannable = deepExtend({ key: mobile ? 'none' : 'ctrl' }, options.pannable);\n }\n },\n _initCanvas: function () {\n var canvasContainer = $('
        ').appendTo(this.scrollable)[0];\n var viewPort = this.viewport();\n this.canvas = new Canvas(canvasContainer, {\n width: viewPort.width || DEFAULT_CANVAS_WIDTH,\n height: viewPort.height || DEFAULT_CANVAS_HEIGHT\n });\n },\n _createHandlers: function () {\n var that = this;\n var element = that.element;\n element.on(MOUSEWHEEL_NS, proxy(that._wheel, that)).on('keydown' + NS, proxy(that._keydown, that));\n that._userEvents = new kendo.UserEvents(this.scrollable, {\n multiTouch: true,\n fastTap: true,\n tap: proxy(that._tap, that),\n start: proxy(that._dragStart, that),\n move: proxy(that._drag, that),\n end: proxy(that._dragEnd, that),\n gesturestart: proxy(that._gestureStart, that),\n gesturechange: proxy(that._gestureChange, that),\n gestureend: proxy(that._gestureEnd, that),\n doubleTap: proxy(that._doubleTap, that),\n supportDoubleTap: true\n });\n that.toolService = new ToolService(that);\n this.scrollable.on('mouseover' + NS, proxy(that._mouseover, that)).on('mouseout' + NS, proxy(that._mouseout, that)).on('mousemove' + NS, proxy(that._mouseMove, that)).on('mousedown' + NS, proxy(that._mouseDown, that)).on('mouseup' + NS, proxy(that._mouseUp, that));\n this._syncHandler = proxy(that._syncChanges, that);\n that._resizeHandler = proxy(that.resize, that, false);\n kendo.onResize(that._resizeHandler);\n this.bind(ZOOM_START, proxy(that._destroyToolBar, that));\n this.bind(PAN, proxy(that._destroyToolBar, that));\n },\n _dragStart: function (e) {\n this._pauseMouseHandlers = true;\n var point = this._eventPositions(e, true);\n var event = e.event;\n if (this.toolService.start(point, this._meta(event))) {\n this._destroyToolBar();\n event.preventDefault();\n }\n },\n _drag: function (e) {\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.move(p, this._meta(event))) {\n event.preventDefault();\n }\n },\n _dragEnd: function (e) {\n this._pauseMouseHandlers = false;\n var p = this._eventPositions(e);\n var event = e.event;\n if (this.toolService.end(p, this._meta(event))) {\n this._createToolBar();\n event.preventDefault();\n }\n },\n _mouseMove: function (e) {\n if (!this._pauseMouseHandlers) {\n var p = this._eventPositions(e);\n this.toolService._updateHoveredItem(p);\n this.toolService._updateCursor(p);\n }\n },\n _mouseDown: function () {\n this._pauseMouseHandlers = true;\n },\n _mouseUp: function () {\n this._pauseMouseHandlers = false;\n },\n _tap: function (e) {\n var toolService = this.toolService;\n var selectable = this.options.selectable;\n var point = this._eventPositions(e);\n var focused = this.focus();\n toolService._updateHoveredItem(point);\n if (toolService.hoveredItem) {\n var item = toolService.hoveredItem;\n this.trigger('click', {\n item: item,\n point: point\n });\n if (selectable && item.options.selectable !== false) {\n var multiple = selectable.multiple !== false;\n var ctrlPressed = kendo.support.mobileOS || this._meta(e.event).ctrlKey;\n if (item.isSelected) {\n if (ctrlPressed) {\n this._destroyToolBar();\n item.select(false);\n } else {\n this._createToolBar(focused);\n }\n } else {\n this._destroyToolBar();\n this.select(item, { addToSelection: multiple && ctrlPressed });\n this._createToolBar(focused);\n }\n }\n } else if (selectable) {\n this._destroyToolBar();\n this.deselect();\n }\n },\n _keydown: function (e) {\n if (this.toolService.keyDown(e.keyCode, this._meta(e))) {\n e.preventDefault();\n }\n },\n _wheel: function (e) {\n var delta = mwDelta(e), p = this._eventPositions(e), meta = deepExtend(this._meta(e), { delta: delta });\n if (this.toolService.wheel(p, meta)) {\n e.preventDefault();\n }\n },\n _meta: function (e) {\n return {\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n shiftKey: e.shiftKey,\n type: e.type\n };\n },\n _eventPositions: function (e, start) {\n var point;\n if (e.touch) {\n var field = start ? 'startLocation' : 'location';\n point = new Point(e.x[field], e.y[field]);\n } else {\n var event = e.originalEvent;\n point = new Point(event.pageX, event.pageY);\n }\n return this.documentToModel(point);\n },\n _gestureStart: function (e) {\n this._destroyToolBar();\n this.scroller.disable();\n var initialCenter = this.documentToModel(new Point(e.center.x, e.center.y));\n var eventArgs = {\n point: initialCenter,\n zoom: this.zoom()\n };\n if (this.trigger(ZOOM_START, eventArgs)) {\n return;\n }\n this._gesture = e;\n this._initialCenter = initialCenter;\n },\n _gestureChange: function (e) {\n var previousGesture = this._gesture;\n var initialCenter = this._initialCenter;\n var center = this.documentToView(new Point(e.center.x, e.center.y));\n var scaleDelta = e.distance / previousGesture.distance;\n var zoom = this._zoom;\n var updateZoom = false;\n if (math.abs(scaleDelta - 1) >= MOBILE_ZOOM_RATE) {\n this._zoom = zoom = this._getValidZoom(zoom * scaleDelta);\n this.options.zoom = zoom;\n this._gesture = e;\n updateZoom = true;\n }\n var zoomedPoint = initialCenter.times(zoom);\n var pan = center.minus(zoomedPoint);\n if (updateZoom || this._pan.distanceTo(pan) >= MOBILE_PAN_DISTANCE) {\n this._panTransform(pan);\n this._updateAdorners();\n }\n e.preventDefault();\n },\n _doubleTap: function (e) {\n var diagram = this;\n var pointPosition = this._eventPositions(e);\n var options = diagram.options;\n var zoomRate = options.zoomRate;\n var zoom = diagram.zoom() + zoomRate;\n var meta = this._meta(e);\n var zoomOptions = {\n point: pointPosition,\n meta: meta,\n zoom: zoom\n };\n if (diagram.trigger(ZOOM_START, zoomOptions)) {\n return;\n }\n zoom = kendo.dataviz.round(Math.max(options.zoomMin, Math.min(options.zoomMax, zoom)), 2);\n zoomOptions.zoom = zoom;\n diagram.zoom(zoom, zoomOptions);\n diagram.trigger(ZOOM_END, zoomOptions);\n },\n _gestureEnd: function () {\n if (this.options.pannable !== false) {\n this.scroller.enable();\n }\n this.trigger(ZOOM_END, {\n point: this._initialCenter,\n zoom: this.zoom()\n });\n },\n _resize: function () {\n var viewport = this.viewport();\n if (this.canvas) {\n this.canvas.size(viewport);\n }\n if (this.scrollable && this.toolBar) {\n this.scrollable.height(viewport.height);\n }\n },\n _mouseover: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(true, node.srcElement);\n }\n },\n _mouseout: function (e) {\n var node = e.target._kendoNode;\n if (node && node.srcElement._hover) {\n node.srcElement._hover(false, node.srcElement);\n }\n },\n _initTheme: function () {\n var that = this;\n var themeName = ((that.options || {}).theme || '').toLowerCase();\n var themes = dataviz.ui.themes || {};\n var themeOptions;\n if (dataviz.SASS_THEMES.indexOf(themeName) != -1) {\n themeOptions = dataviz.autoTheme().diagram;\n } else {\n themeOptions = (themes[themeName] || {}).diagram;\n }\n that.options = deepExtend({}, themeOptions, that.options);\n if (that.options.editable === true) {\n deepExtend(that.options, { editable: (themeOptions || {}).editable });\n }\n },\n _createOptionElements: function () {\n var options = this.options;\n var shapesLength = options.shapes.length;\n if (shapesLength) {\n this._createShapes();\n }\n if (options.connections.length) {\n this._createConnections();\n }\n if (shapesLength && options.layout) {\n this.layout(options.layout);\n }\n },\n _createShapes: function () {\n var that = this, options = that.options, shapes = options.shapes, shape, i;\n for (i = 0; i < shapes.length; i++) {\n shape = shapes[i];\n that.addShape(shape);\n }\n },\n _createConnections: function () {\n var diagram = this, options = diagram.options, defaults = options.connectionDefaults, connections = options.connections, conn, source, target, i;\n for (i = 0; i < connections.length; i++) {\n conn = connections[i];\n source = diagram._findConnectionTarget(conn.from);\n target = diagram._findConnectionTarget(conn.to);\n diagram.connect(source, target, deepExtend({}, defaults, conn));\n }\n },\n _findConnectionTarget: function (options) {\n options = options || {};\n var diagram = this;\n var shapeId = isString(options) ? options : options.shapeId || options.id;\n var target;\n if (shapeId) {\n target = diagram.getShapeById(shapeId);\n if (options.connector) {\n target = target.getConnector(options.connector);\n }\n } else {\n target = new Point(options.x || 0, options.y || 0);\n }\n return target;\n },\n destroy: function () {\n var that = this;\n Widget.fn.destroy.call(that);\n if (this._userEvents) {\n this._userEvents.destroy();\n }\n kendo.unbindResize(that._resizeHandler);\n that.clear();\n that.element.off(NS);\n that.scroller.wrapper.off(NS);\n that.canvas.destroy(true);\n that.canvas = undefined;\n that._destroyEditor();\n that.destroyScroller();\n that._destroyGlobalToolBar();\n that._destroyToolBar();\n },\n destroyScroller: function () {\n var scroller = this.scroller;\n if (!scroller) {\n return;\n }\n scroller.destroy();\n scroller.element.remove();\n this.scroller = null;\n },\n save: function () {\n var json = {\n shapes: [],\n connections: []\n };\n var i, connection, shape;\n for (i = 0; i < this.shapes.length; i++) {\n shape = this.shapes[i];\n if (shape.options.serializable) {\n json.shapes.push(shape.options);\n }\n }\n for (i = 0; i < this.connections.length; i++) {\n connection = this.connections[i];\n json.connections.push(deepExtend({}, connection.options, connection.toJSON()));\n }\n return json;\n },\n focus: function () {\n if (!this.element.is(kendo._activeElement())) {\n var element = this.element, scrollContainer = element[0], containers = [], offsets = [], documentElement = document.documentElement, i;\n do {\n scrollContainer = scrollContainer.parentNode;\n if (scrollContainer.scrollHeight > scrollContainer.clientHeight) {\n containers.push(scrollContainer);\n offsets.push(scrollContainer.scrollTop);\n }\n } while (scrollContainer != documentElement);\n element.focus();\n for (i = 0; i < containers.length; i++) {\n containers[i].scrollTop = offsets[i];\n }\n return true;\n }\n },\n load: function (options) {\n this.clear();\n this.setOptions(options);\n this._createShapes();\n this._createConnections();\n },\n setOptions: function (options) {\n deepExtend(this.options, options);\n },\n clear: function () {\n var that = this;\n that.select(false);\n that.mainLayer.clear();\n that._shapesQuadTree.clear();\n that._initialize();\n },\n connect: function (source, target, options) {\n var connection;\n if (this.connectionsDataSource && this._isEditable) {\n var dataItem = this.connectionsDataSource.add({});\n connection = this._connectionsDataMap[dataItem.uid];\n connection.source(source);\n connection.target(target);\n connection.redraw(options);\n connection.updateModel();\n } else {\n connection = new Connection(source, target, deepExtend({}, this.options.connectionDefaults, options));\n this.addConnection(connection);\n }\n return connection;\n },\n connected: function (source, target) {\n for (var i = 0; i < this.connections.length; i++) {\n var c = this.connections[i];\n if (c.from == source && c.to == target) {\n return true;\n }\n }\n return false;\n },\n addConnection: function (connection, undoable) {\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddConnectionUnit(connection, this), false);\n }\n connection.diagram = this;\n connection._setOptionsFromModel();\n connection.refresh();\n this.mainLayer.append(connection.visual);\n this.connections.push(connection);\n this.trigger(CHANGE, {\n added: [connection],\n removed: []\n });\n return connection;\n },\n _addConnection: function (connection, undoable) {\n var connectionsDataSource = this.connectionsDataSource;\n var dataItem;\n if (connectionsDataSource && this._isEditable) {\n dataItem = createModel(connectionsDataSource, cloneDataItem(connection.dataItem));\n connection.dataItem = dataItem;\n connection.updateModel();\n if (!this.trigger('add', { connection: connection })) {\n this._connectionsDataMap[dataItem.uid] = connection;\n connectionsDataSource.add(dataItem);\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n } else if (!this.trigger('add', { connection: connection })) {\n this.addConnection(connection, undoable);\n connection._updateConnectors();\n return connection;\n }\n },\n addShape: function (item, undoable) {\n var shape, shapeDefaults = this.options.shapeDefaults;\n if (item instanceof Shape) {\n shape = item;\n } else if (!(item instanceof kendo.Class)) {\n shapeDefaults = deepExtend({}, shapeDefaults, item || {});\n shape = new Shape(shapeDefaults, this);\n } else {\n return;\n }\n if (undoable !== false) {\n this.undoRedoService.add(new diagram.AddShapeUnit(shape, this), false);\n }\n this.shapes.push(shape);\n if (shape.diagram !== this) {\n this._shapesQuadTree.insert(shape);\n shape.diagram = this;\n }\n this.mainLayer.append(shape.visual);\n this.trigger(CHANGE, {\n added: [shape],\n removed: []\n });\n return shape;\n },\n _addShape: function (shape, undoable) {\n var that = this;\n var dataSource = that.dataSource;\n var dataItem;\n if (dataSource && this._isEditable) {\n dataItem = createModel(dataSource, cloneDataItem(shape.dataItem));\n shape.dataItem = dataItem;\n shape.updateModel();\n if (!this.trigger('add', { shape: shape })) {\n this.dataSource.add(dataItem);\n var inactiveItem = this._inactiveShapeItems.getByUid(dataItem.uid);\n inactiveItem.element = shape;\n inactiveItem.undoable = undoable;\n return shape;\n }\n } else if (!this.trigger('add', { shape: shape })) {\n return this.addShape(shape, undoable);\n }\n },\n remove: function (items, undoable) {\n items = isArray(items) ? items.slice(0) : [items];\n var elements = splitDiagramElements(items);\n var shapes = elements.shapes;\n var connections = elements.connections;\n var i;\n if (!defined(undoable)) {\n undoable = true;\n }\n if (undoable) {\n this.undoRedoService.begin();\n }\n this._suspendModelRefresh();\n for (i = shapes.length - 1; i >= 0; i--) {\n this._removeItem(shapes[i], undoable, connections);\n }\n for (i = connections.length - 1; i >= 0; i--) {\n this._removeItem(connections[i], undoable);\n }\n this._resumeModelRefresh();\n if (undoable) {\n this.undoRedoService.commit(false);\n }\n this.trigger(CHANGE, {\n added: [],\n removed: items\n });\n },\n _removeShapeDataItem: function (item) {\n if (this._isEditable) {\n this.dataSource.remove(item.dataItem);\n delete this._dataMap[item.dataItem.id];\n }\n },\n _removeConnectionDataItem: function (item) {\n if (this._isEditable) {\n this.connectionsDataSource.remove(item.dataItem);\n delete this._connectionsDataMap[item.dataItem.uid];\n }\n },\n _triggerRemove: function (items) {\n var toRemove = [];\n var item, args, editable;\n for (var idx = 0; idx < items.length; idx++) {\n item = items[idx];\n editable = item.options.editable;\n if (item instanceof Shape) {\n args = { shape: item };\n } else {\n args = { connection: item };\n }\n if (editable && editable.remove !== false && !this.trigger('remove', args)) {\n toRemove.push(item);\n }\n }\n return toRemove;\n },\n undo: function () {\n this.undoRedoService.undo();\n },\n redo: function () {\n this.undoRedoService.redo();\n },\n select: function (item, options) {\n if (isDefined(item)) {\n options = deepExtend({ addToSelection: false }, options);\n var addToSelection = options.addToSelection, items = [], selected = [], i, element;\n if (!addToSelection) {\n this.deselect();\n }\n this._internalSelection = true;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items = [item];\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(true)) {\n selected.push(element);\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n } else {\n return this._selectedItems;\n }\n },\n selectAll: function () {\n this.select(this.shapes.concat(this.connections));\n },\n selectArea: function (rect) {\n var i, items, item;\n this._internalSelection = true;\n var selected = [];\n if (rect instanceof Rect) {\n items = this.shapes.concat(this.connections);\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if ((!rect || item._hitTest(rect)) && item.options.enable) {\n if (item.select(true)) {\n selected.push(item);\n }\n }\n }\n }\n this._selectionChanged(selected, []);\n this._internalSelection = false;\n },\n deselect: function (item) {\n this._internalSelection = true;\n var deselected = [], items = [], element, i;\n if (item instanceof Array) {\n items = item;\n } else if (item instanceof DiagramElement) {\n items.push(item);\n } else if (!isDefined(item)) {\n items = this._selectedItems.slice(0);\n }\n for (i = 0; i < items.length; i++) {\n element = items[i];\n if (element.select(false)) {\n deselected.push(element);\n }\n }\n this._selectionChanged([], deselected);\n this._internalSelection = false;\n },\n toFront: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToFrontUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toFront(result.visuals);\n this._fixOrdering(result, true);\n }\n },\n toBack: function (items, undoable) {\n if (!items) {\n items = this._selectedItems.slice();\n }\n var result = this._getDiagramItems(items), indices;\n if (!defined(undoable) || undoable) {\n indices = indicesOfItems(this.mainLayer, result.visuals);\n var unit = new ToBackUnit(this, items, indices);\n this.undoRedoService.add(unit);\n } else {\n this.mainLayer.toBack(result.visuals);\n this._fixOrdering(result, false);\n }\n },\n bringIntoView: function (item, options) {\n var viewport = this.viewport();\n var aligner = new diagram.RectAlign(viewport);\n var current, rect, original, newPan;\n if (viewport.width === 0 || viewport.height === 0) {\n return;\n }\n options = deepExtend({\n animate: false,\n align: 'center middle'\n }, options);\n if (options.align == 'none') {\n options.align = 'center middle';\n }\n if (item instanceof DiagramElement) {\n rect = item.bounds(TRANSFORMED);\n } else if (isArray(item)) {\n rect = this.boundingBox(item);\n } else if (item instanceof Rect) {\n rect = item.clone();\n }\n original = rect.clone();\n rect.zoom(this._zoom);\n if (rect.width > viewport.width || rect.height > viewport.height) {\n this._zoom = this._getValidZoom(math.min(viewport.width / original.width, viewport.height / original.height));\n rect = original.clone().zoom(this._zoom);\n }\n this._zoomMainLayer();\n current = rect.clone();\n aligner.align(rect, options.align);\n newPan = rect.topLeft().minus(current.topLeft());\n this.pan(newPan.times(-1), options.animate);\n },\n alignShapes: function (direction) {\n if (isUndefined(direction)) {\n direction = 'Left';\n }\n var items = this.select(), val, item, i;\n if (items.length === 0) {\n return;\n }\n switch (direction.toLowerCase()) {\n case 'left':\n case 'top':\n val = MAX_VALUE;\n break;\n case 'right':\n case 'bottom':\n val = MIN_VALUE;\n break;\n }\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n switch (direction.toLowerCase()) {\n case 'left':\n val = math.min(val, item.options.x);\n break;\n case 'top':\n val = math.min(val, item.options.y);\n break;\n case 'right':\n val = math.max(val, item.options.x);\n break;\n case 'bottom':\n val = math.max(val, item.options.y);\n break;\n }\n }\n }\n var undoStates = [];\n var shapes = [];\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (item instanceof Shape) {\n shapes.push(item);\n undoStates.push(item.bounds());\n switch (direction.toLowerCase()) {\n case 'left':\n case 'right':\n item.position(new Point(val, item.options.y));\n break;\n case 'top':\n case 'bottom':\n item.position(new Point(item.options.x, val));\n break;\n }\n }\n }\n var unit = new diagram.TransformUnit(shapes, undoStates);\n this.undoRedoService.add(unit, false);\n },\n zoom: function (zoom, options) {\n if (zoom) {\n var staticPoint = options ? options.point : new diagram.Point(0, 0);\n zoom = this._zoom = this._getValidZoom(zoom);\n if (!isUndefined(staticPoint)) {\n staticPoint = new diagram.Point(math.round(staticPoint.x), math.round(staticPoint.y));\n var zoomedPoint = staticPoint.times(zoom);\n var viewportVector = this.modelToView(staticPoint);\n var raw = viewportVector.minus(zoomedPoint);\n this._storePan(new diagram.Point(math.round(raw.x), math.round(raw.y)));\n }\n if (options) {\n options.zoom = zoom;\n }\n this._panTransform();\n this.canvas.surface.hideTooltip();\n this._updateAdorners();\n }\n return this._zoom;\n },\n _getPan: function (pan) {\n var canvas = this.canvas;\n if (!canvas.translate) {\n pan = pan.plus(this._pan);\n }\n return pan;\n },\n pan: function (pan, animate) {\n if (pan instanceof Point) {\n var that = this;\n var scroller = that.scroller;\n pan = that._getPan(pan);\n pan = pan.times(-1);\n if (animate) {\n scroller.animatedScrollTo(pan.x, pan.y, function () {\n that._updateAdorners();\n });\n } else {\n scroller.scrollTo(pan.x, pan.y);\n that._updateAdorners();\n }\n } else {\n return this._pan.times(-1);\n }\n },\n viewport: function () {\n var element = this.element;\n var width = element.width();\n var height = element.height();\n if (this.toolBar) {\n height -= outerHeight(this.toolBar.element);\n }\n return new Rect(0, 0, width, height);\n },\n copy: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 1;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n }\n },\n cut: function () {\n if (this.options.copy.enabled) {\n this._clipboard = [];\n this._copyOffset = 0;\n for (var i = 0; i < this._selectedItems.length; i++) {\n var item = this._selectedItems[i];\n this._clipboard.push(item);\n }\n this.remove(this._clipboard, true);\n }\n },\n paste: function () {\n if (this._clipboard.length > 0) {\n var item, copied, i;\n var mapping = {};\n var elements = splitDiagramElements(this._clipboard);\n var connections = elements.connections;\n var shapes = elements.shapes;\n var offset = {\n x: this._copyOffset * this.options.copy.offsetX,\n y: this._copyOffset * this.options.copy.offsetY\n };\n this.deselect();\n for (i = 0; i < shapes.length; i++) {\n item = shapes[i];\n copied = item.clone();\n mapping[item.id] = copied;\n copied.position(new Point(item.options.x + offset.x, item.options.y + offset.y));\n copied.diagram = this;\n copied = this._addShape(copied);\n if (copied) {\n copied.select();\n }\n }\n for (i = 0; i < connections.length; i++) {\n item = connections[i];\n copied = this._addConnection(item.clone());\n if (copied) {\n this._updateCopiedConnection(copied, item, 'source', mapping, offset);\n this._updateCopiedConnection(copied, item, 'target', mapping, offset);\n copied.select(true);\n copied.updateModel();\n }\n }\n this._syncChanges();\n this._copyOffset += 1;\n }\n },\n _updateCopiedConnection: function (connection, sourceConnection, connectorName, mapping, offset) {\n var onActivate, inactiveItem, targetShape;\n var target = sourceConnection[connectorName]();\n var diagram = this;\n if (target instanceof Connector && mapping[target.shape.id]) {\n targetShape = mapping[target.shape.id];\n if (diagram.getShapeById(targetShape.id)) {\n connection[connectorName](targetShape.getConnector(target.options.name));\n } else {\n inactiveItem = diagram._inactiveShapeItems.getByUid(targetShape.dataItem.uid);\n if (inactiveItem) {\n onActivate = function (item) {\n targetShape = diagram._dataMap[item.id];\n connection[connectorName](targetShape.getConnector(target.options.name));\n connection.updateModel();\n };\n diagram._deferredConnectionUpdates.push(inactiveItem.onActivate(onActivate));\n }\n }\n } else {\n connection[connectorName](new Point(sourceConnection[connectorName + 'Point']().x + offset.x, sourceConnection[connectorName + 'Point']().y + offset.y));\n }\n },\n boundingBox: function (items, origin) {\n var rect = Rect.empty(), temp, di = isDefined(items) ? this._getDiagramItems(items) : { shapes: this.shapes };\n if (di.shapes.length > 0) {\n var item = di.shapes[0];\n rect = item.bounds(ROTATED);\n for (var i = 1; i < di.shapes.length; i++) {\n item = di.shapes[i];\n temp = item.bounds(ROTATED);\n if (origin === true) {\n temp.x -= item._rotationOffset.x;\n temp.y -= item._rotationOffset.y;\n }\n rect = rect.union(temp);\n }\n }\n return rect;\n },\n _containerOffset: function () {\n var containerOffset = this.element.offset();\n if (this.toolBar) {\n containerOffset.top += outerHeight(this.toolBar.element);\n }\n return containerOffset;\n },\n documentToView: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x - containerOffset.left, point.y - containerOffset.top);\n },\n viewToDocument: function (point) {\n var containerOffset = this._containerOffset();\n return new Point(point.x + containerOffset.left, point.y + containerOffset.top);\n },\n viewToModel: function (point) {\n return this._transformWithMatrix(point, this._matrixInvert);\n },\n modelToView: function (point) {\n return this._transformWithMatrix(point, this._matrix);\n },\n modelToLayer: function (point) {\n return this._transformWithMatrix(point, this._layerMatrix);\n },\n layerToModel: function (point) {\n return this._transformWithMatrix(point, this._layerMatrixInvert);\n },\n documentToModel: function (point) {\n var viewPoint = this.documentToView(point);\n if (!this.canvas.translate) {\n viewPoint.x = viewPoint.x + this.scroller.scrollLeft;\n viewPoint.y = viewPoint.y + this.scroller.scrollTop;\n }\n return this.viewToModel(viewPoint);\n },\n modelToDocument: function (point) {\n return this.viewToDocument(this.modelToView(point));\n },\n _transformWithMatrix: function (point, matrix) {\n var result = point;\n if (point instanceof Point) {\n if (matrix) {\n result = matrix.apply(point);\n }\n } else {\n var tl = this._transformWithMatrix(point.topLeft(), matrix), br = this._transformWithMatrix(point.bottomRight(), matrix);\n result = Rect.fromPoints(tl, br);\n }\n return result;\n },\n setDataSource: function (dataSource) {\n this.options.dataSource = dataSource;\n this._dataSource();\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n },\n setConnectionsDataSource: function (dataSource) {\n this.options.connectionsDataSource = dataSource;\n this._connectionDataSource();\n if (this.options.autoBind) {\n this.connectionsDataSource.fetch();\n }\n },\n layout: function (options) {\n this._layouting = true;\n var type;\n if (isUndefined(options)) {\n options = this.options.layout;\n }\n if (isUndefined(options) || isUndefined(options.type)) {\n type = 'Tree';\n } else {\n type = options.type;\n }\n var l;\n switch (type.toLowerCase()) {\n case 'tree':\n l = new diagram.TreeLayout(this);\n break;\n case 'layered':\n l = new diagram.LayeredLayout(this);\n break;\n case 'forcedirected':\n case 'force':\n case 'spring':\n case 'springembedder':\n l = new diagram.SpringLayout(this);\n break;\n default:\n throw 'Layout algorithm \\'' + type + '\\' is not supported.';\n }\n var initialState = new diagram.LayoutState(this);\n var finalState = l.layout(options);\n if (finalState) {\n var unit = new diagram.LayoutUndoUnit(initialState, finalState, options ? options.animate : null);\n this.undoRedoService.add(unit);\n }\n this._layouting = false;\n this._redrawConnections();\n },\n getShapeById: function (id) {\n var found;\n found = Utils.first(this.shapes, function (s) {\n return s.visual.id === id;\n });\n if (found) {\n return found;\n }\n found = Utils.first(this.connections, function (c) {\n return c.visual.id === id;\n });\n return found;\n },\n getShapeByModelId: function (id) {\n var shape;\n if (this._isEditable) {\n shape = this._dataMap[id];\n } else {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).id === id;\n });\n }\n return shape;\n },\n getShapeByModelUid: function (uid) {\n var shape;\n if (this._isEditable) {\n shape = Utils.first(this.shapes, function (shape) {\n return (shape.dataItem || {}).uid === uid;\n });\n } else {\n shape = this._dataMap[uid];\n }\n return shape;\n },\n getConnectionByModelId: function (id) {\n var connection;\n if (this.connectionsDataSource) {\n connection = Utils.first(this.connections, function (connection) {\n return (connection.dataItem || {}).id === id;\n });\n }\n return connection;\n },\n getConnectionByModelUid: function (uid) {\n var connection;\n if (this.connectionsDataSource) {\n connection = this._connectionsDataMap[uid];\n }\n return connection;\n },\n _extendLayoutOptions: function (options) {\n if (options.layout) {\n options.layout = deepExtend({}, diagram.LayoutBase.fn.defaultOptions || {}, options.layout);\n }\n },\n _selectionChanged: function (selected, deselected) {\n if (selected.length || deselected.length) {\n this.trigger(SELECT, {\n selected: selected,\n deselected: deselected\n });\n }\n },\n _getValidZoom: function (zoom) {\n return math.min(math.max(zoom, this.options.zoomMin), this.options.zoomMax);\n },\n _panTransform: function (pos) {\n var diagram = this, pan = pos || diagram._pan;\n if (diagram.canvas.translate) {\n diagram.scroller.scrollTo(pan.x, pan.y);\n diagram._zoomMainLayer();\n } else {\n diagram._storePan(pan);\n diagram._transformMainLayer();\n }\n },\n _finishPan: function () {\n this.trigger(PAN, {\n total: this._pan,\n delta: Number.NaN\n });\n },\n _storePan: function (pan) {\n this._pan = pan;\n this._storeViewMatrix();\n },\n _zoomMainLayer: function () {\n var zoom = this._zoom;\n var transform = new CompositeTransform(0, 0, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _transformMainLayer: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n transform.render(this.mainLayer);\n this._storeLayerMatrix(transform);\n this._storeViewMatrix();\n },\n _storeLayerMatrix: function (canvasTransform) {\n this._layerMatrix = canvasTransform.toMatrix();\n this._layerMatrixInvert = canvasTransform.invert().toMatrix();\n },\n _storeViewMatrix: function () {\n var pan = this._pan, zoom = this._zoom;\n var transform = new CompositeTransform(pan.x, pan.y, zoom, zoom);\n this._matrix = transform.toMatrix();\n this._matrixInvert = transform.invert().toMatrix();\n },\n _toIndex: function (items, indices) {\n var result = this._getDiagramItems(items);\n this.mainLayer.toIndex(result.visuals, indices);\n this._fixOrdering(result, false);\n },\n _fixOrdering: function (result, toFront) {\n var shapePos = toFront ? this.shapes.length - 1 : 0, conPos = toFront ? this.connections.length - 1 : 0, i, item;\n for (i = 0; i < result.shapes.length; i++) {\n item = result.shapes[i];\n Utils.remove(this.shapes, item);\n Utils.insert(this.shapes, item, shapePos);\n }\n for (i = 0; i < result.cons.length; i++) {\n item = result.cons[i];\n Utils.remove(this.connections, item);\n Utils.insert(this.connections, item, conPos);\n }\n },\n _getDiagramItems: function (items) {\n var i, result = {}, args = items;\n result.visuals = [];\n result.shapes = [];\n result.cons = [];\n if (!items) {\n args = this._selectedItems.slice();\n } else if (!isArray(items)) {\n args = [items];\n }\n for (i = 0; i < args.length; i++) {\n var item = args[i];\n if (item instanceof Shape) {\n result.shapes.push(item);\n result.visuals.push(item.visual);\n } else if (item instanceof Connection) {\n result.cons.push(item);\n result.visuals.push(item.visual);\n }\n }\n return result;\n },\n _removeItem: function (item, undoable, removedConnections) {\n item.select(false);\n if (item instanceof Shape) {\n this._removeShapeDataItem(item);\n this._removeShape(item, undoable, removedConnections);\n } else if (item instanceof Connection) {\n this._removeConnectionDataItem(item);\n this._removeConnection(item, undoable);\n }\n this.mainLayer.remove(item.visual);\n },\n _removeShape: function (shape, undoable, removedConnections) {\n var i, connection, connector, sources = [], targets = [];\n this.toolService._removeHover();\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteShapeUnit(shape));\n }\n Utils.remove(this.shapes, shape);\n this._shapesQuadTree.remove(shape);\n for (i = 0; i < shape.connectors.length; i++) {\n connector = shape.connectors[i];\n for (var j = 0; j < connector.connections.length; j++) {\n connection = connector.connections[j];\n if (!removedConnections || !dataviz.inArray(connection, removedConnections)) {\n if (connection.sourceConnector == connector) {\n sources.push(connection);\n } else if (connection.targetConnector == connector) {\n targets.push(connection);\n }\n }\n }\n }\n for (i = 0; i < sources.length; i++) {\n sources[i].source(null, undoable);\n sources[i].updateModel();\n }\n for (i = 0; i < targets.length; i++) {\n targets[i].target(null, undoable);\n targets[i].updateModel();\n }\n },\n _removeConnection: function (connection, undoable) {\n if (connection.sourceConnector) {\n Utils.remove(connection.sourceConnector.connections, connection);\n }\n if (connection.targetConnector) {\n Utils.remove(connection.targetConnector.connections, connection);\n }\n if (undoable) {\n this.undoRedoService.addCompositeItem(new DeleteConnectionUnit(connection));\n }\n Utils.remove(this.connections, connection);\n },\n _removeDataItems: function (items, recursive) {\n var item, children, shape, idx;\n items = isArray(items) ? items : [items];\n while (items.length) {\n item = items.shift();\n shape = this._dataMap[item.uid];\n if (shape) {\n this._removeShapeConnections(shape);\n this._removeItem(shape, false);\n delete this._dataMap[item.uid];\n if (recursive && item.hasChildren && item.loaded()) {\n children = item.children.data();\n for (idx = 0; idx < children.length; idx++) {\n items.push(children[idx]);\n }\n }\n }\n }\n },\n _removeShapeConnections: function (shape) {\n var connections = shape.connections();\n var idx;\n if (connections) {\n for (idx = 0; idx < connections.length; idx++) {\n this._removeItem(connections[idx], false);\n }\n }\n },\n _addDataItem: function (dataItem, undoable) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape, undoable !== false);\n this._dataMap[dataItem.id] = shape;\n return shape;\n },\n _addDataItemByUid: function (dataItem) {\n if (!defined(dataItem)) {\n return;\n }\n var shape = this._dataMap[dataItem.uid];\n if (shape) {\n return shape;\n }\n var options = deepExtend({}, this.options.shapeDefaults);\n options.dataItem = dataItem;\n shape = new Shape(options, this);\n this.addShape(shape);\n this._dataMap[dataItem.uid] = shape;\n return shape;\n },\n _addDataItems: function (items, parent) {\n var item, idx, shape, parentShape, connection;\n for (idx = 0; idx < items.length; idx++) {\n item = items[idx];\n shape = this._addDataItemByUid(item);\n parentShape = this._addDataItemByUid(parent);\n if (parentShape && !this.connected(parentShape, shape)) {\n connection = this.connect(parentShape, shape);\n }\n }\n },\n _refreshSource: function (e) {\n var that = this, node = e.node, action = e.action, items = e.items, options = that.options, idx, dataBound;\n if (e.field) {\n for (idx = 0; idx < items.length; idx++) {\n if (this._dataMap[items[idx].uid]) {\n this._dataMap[items[idx].uid].redrawVisual();\n }\n }\n return;\n }\n if (action == 'remove') {\n this._removeDataItems(e.items, true);\n } else {\n if ((!action || action === 'itemloaded') && !this._bindingRoots) {\n this._bindingRoots = true;\n dataBound = true;\n }\n if (!action && !node) {\n that.clear();\n }\n this._addDataItems(items, node);\n for (idx = 0; idx < items.length; idx++) {\n items[idx].load();\n }\n }\n if (options.layout && (dataBound || action == 'remove' || action == 'add')) {\n that.layout(options.layout);\n }\n if (dataBound) {\n this.trigger('dataBound');\n this._bindingRoots = false;\n }\n },\n _addItem: function (item) {\n if (item instanceof Shape) {\n this.addShape(item);\n } else if (item instanceof Connection) {\n this.addConnection(item);\n }\n },\n _createToolBar: function (preventClosing) {\n var diagram = this.toolService.diagram;\n if (!this.singleToolBar && diagram.select().length === 1) {\n var element = diagram.select()[0];\n if (element && element.options.editable !== false) {\n var editable = element.options.editable;\n var tools = editable.tools;\n if (this._isEditable && tools.length === 0) {\n if (element instanceof Shape) {\n tools = [\n 'edit',\n 'rotateClockwise',\n 'rotateAnticlockwise'\n ];\n } else if (element instanceof Connection) {\n tools = ['edit'];\n }\n if (editable && editable.remove !== false) {\n tools.push('delete');\n }\n }\n if (tools && tools.length) {\n var padding = 20;\n var point;\n this.singleToolBar = new DiagramToolBar(diagram, {\n tools: tools,\n click: proxy(this._toolBarClick, this),\n modal: true,\n popupZIndex: parseInt(diagram.element.closest('.k-window').css('zIndex'), 10) + 10\n });\n var popupWidth = outerWidth(this.singleToolBar._popup.element);\n var popupHeight = outerHeight(this.singleToolBar._popup.element);\n if (element instanceof Shape) {\n var shapeBounds = this.modelToView(element.bounds(ROTATED));\n point = new Point(shapeBounds.x, shapeBounds.y).minus(new Point((popupWidth - shapeBounds.width) / 2, popupHeight + padding));\n } else if (element instanceof Connection) {\n var connectionBounds = this.modelToView(element.bounds());\n point = new Point(connectionBounds.x, connectionBounds.y).minus(new Point((popupWidth - connectionBounds.width - 20) / 2, popupHeight + padding));\n }\n if (point) {\n if (!this.canvas.translate) {\n point = point.minus(new Point(this.scroller.scrollLeft, this.scroller.scrollTop));\n }\n point = this.viewToDocument(point);\n point = new Point(math.max(point.x, 0), math.max(point.y, 0));\n this.singleToolBar.showAt(point);\n if (preventClosing) {\n this.singleToolBar._popup.one('close', preventDefault);\n }\n } else {\n this._destroyToolBar();\n }\n }\n }\n }\n },\n _toolBarClick: function (e) {\n this.trigger('toolBarClick', e);\n this._destroyToolBar();\n },\n _normalizePointZoom: function (point) {\n return point.times(1 / this.zoom());\n },\n _initialize: function () {\n this.shapes = [];\n this._selectedItems = [];\n this.connections = [];\n this._dataMap = {};\n this._connectionsDataMap = {};\n this._inactiveShapeItems = new InactiveItemsCollection();\n this._deferredConnectionUpdates = [];\n this.undoRedoService = new UndoRedoService({\n undone: this._syncHandler,\n redone: this._syncHandler\n });\n this.id = diagram.randomId();\n },\n _fetchFreshData: function () {\n var that = this;\n that._dataSource();\n if (that._isEditable) {\n that._connectionDataSource();\n }\n if (that.options.autoBind) {\n if (that._isEditable) {\n this._loadingShapes = true;\n this._loadingConnections = true;\n that.dataSource.fetch();\n that.connectionsDataSource.fetch();\n } else {\n that.dataSource.fetch();\n }\n }\n },\n _dataSource: function () {\n if (defined(this.options.connectionsDataSource)) {\n this._isEditable = true;\n var dsOptions = this.options.dataSource || {};\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.dataSource && this._shapesRefreshHandler) {\n this.dataSource.unbind('change', this._shapesRefreshHandler).unbind('requestStart', this._shapesRequestStartHandler).unbind('error', this._shapesErrorHandler);\n } else {\n this._shapesRefreshHandler = proxy(this._refreshShapes, this);\n this._shapesRequestStartHandler = proxy(this._shapesRequestStart, this);\n this._shapesErrorHandler = proxy(this._error, this);\n }\n this.dataSource = kendo.data.DataSource.create(ds).bind('change', this._shapesRefreshHandler).bind('requestStart', this._shapesRequestStartHandler).bind('error', this._shapesErrorHandler);\n } else {\n this._treeDataSource();\n this._isEditable = false;\n }\n },\n _connectionDataSource: function () {\n var dsOptions = this.options.connectionsDataSource;\n if (dsOptions) {\n var ds = isArray(dsOptions) ? { data: dsOptions } : dsOptions;\n if (this.connectionsDataSource && this._connectionsRefreshHandler) {\n this.connectionsDataSource.unbind('change', this._connectionsRefreshHandler).unbind('requestStart', this._connectionsRequestStartHandler).unbind('error', this._connectionsErrorHandler);\n } else {\n this._connectionsRefreshHandler = proxy(this._refreshConnections, this);\n this._connectionsRequestStartHandler = proxy(this._connectionsRequestStart, this);\n this._connectionsErrorHandler = proxy(this._connectionsError, this);\n }\n this.connectionsDataSource = kendo.data.DataSource.create(ds).bind('change', this._connectionsRefreshHandler).bind('requestStart', this._connectionsRequestStartHandler).bind('error', this._connectionsErrorHandler);\n }\n },\n _shapesRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingShapes = true;\n }\n },\n _connectionsRequestStart: function (e) {\n if (e.type == 'read') {\n this._loadingConnections = true;\n }\n },\n _error: function () {\n this._loadingShapes = false;\n },\n _connectionsError: function () {\n this._loadingConnections = false;\n },\n _refreshShapes: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeShapes(e.items);\n }\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateShapes(e.items, e.field);\n }\n } else if (e.action === 'add') {\n this._inactiveShapeItems.add(e.items);\n } else if (e.action === 'sync') {\n this._syncShapes(e.items);\n } else {\n this.refresh();\n }\n },\n _shouldRefresh: function () {\n return !this._suspended;\n },\n _suspendModelRefresh: function () {\n this._suspended = (this._suspended || 0) + 1;\n },\n _resumeModelRefresh: function () {\n this._suspended = math.max((this._suspended || 0) - 1, 0);\n },\n refresh: function () {\n this._loadingShapes = false;\n if (!this._loadingConnections) {\n this._rebindShapesAndConnections();\n }\n },\n _rebindShapesAndConnections: function () {\n this.clear();\n this._addShapes(this.dataSource.view());\n if (this.connectionsDataSource) {\n this._addConnections(this.connectionsDataSource.view(), false);\n }\n if (this.options.layout) {\n this.layout(this.options.layout);\n } else {\n this._redrawConnections();\n }\n this.trigger('dataBound');\n },\n refreshConnections: function () {\n this._loadingConnections = false;\n if (!this._loadingShapes) {\n this._rebindShapesAndConnections();\n }\n },\n _redrawConnections: function () {\n var connections = this.connections;\n for (var idx = 0; idx < connections.length; idx++) {\n connections[idx].refresh();\n }\n },\n _removeShapes: function (items) {\n var dataMap = this._dataMap;\n var item, i;\n for (i = 0; i < items.length; i++) {\n item = items[i];\n if (dataMap[item.id]) {\n this.remove(dataMap[item.id], false);\n dataMap[item.id] = null;\n }\n }\n },\n _syncShapes: function () {\n var diagram = this;\n var inactiveItems = diagram._inactiveShapeItems;\n inactiveItems.forEach(function (inactiveItem) {\n var dataItem = inactiveItem.dataItem;\n var shape = inactiveItem.element;\n if (!dataItem.isNew()) {\n if (shape) {\n shape._setOptionsFromModel();\n diagram.addShape(shape, inactiveItem.undoable);\n diagram._dataMap[dataItem.id] = shape;\n } else {\n diagram._addDataItem(dataItem);\n }\n inactiveItem.activate();\n inactiveItems.remove(dataItem);\n }\n });\n },\n _updateShapes: function (items, field) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var shape = this._dataMap[dataItem.id];\n if (shape) {\n shape.updateOptionsFromModel(dataItem, field);\n }\n }\n },\n _addShapes: function (dataItems) {\n for (var i = 0; i < dataItems.length; i++) {\n this._addDataItem(dataItems[i], false);\n }\n },\n _refreshConnections: function (e) {\n if (e.action === 'remove') {\n if (this._shouldRefresh()) {\n this._removeConnections(e.items);\n }\n } else if (e.action === 'add') {\n this._addConnections(e.items);\n } else if (e.action === 'sync') {\n } else if (e.action === 'itemchange') {\n if (this._shouldRefresh()) {\n this._updateConnections(e.items);\n }\n } else {\n this.refreshConnections();\n }\n },\n _removeConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n this.remove(this._connectionsDataMap[items[i].uid], false);\n this._connectionsDataMap[items[i].uid] = null;\n }\n },\n _updateConnections: function (items) {\n for (var i = 0; i < items.length; i++) {\n var dataItem = items[i];\n var connection = this._connectionsDataMap[dataItem.uid];\n connection.updateOptionsFromModel(dataItem);\n }\n },\n _addConnections: function (connections, undoable) {\n var length = connections.length;\n for (var i = 0; i < length; i++) {\n var dataItem = connections[i];\n this._addConnectionDataItem(dataItem, undoable);\n }\n },\n _addConnectionDataItem: function (dataItem, undoable) {\n if (!this._connectionsDataMap[dataItem.uid]) {\n var from = this._validateConnector(dataItem.from);\n if (!defined(from) || from === null) {\n from = new Point(dataItem.fromX, dataItem.fromY);\n }\n var to = this._validateConnector(dataItem.to);\n if (!defined(to) || to === null) {\n to = new Point(dataItem.toX, dataItem.toY);\n }\n if (defined(from) && defined(to)) {\n var options = deepExtend({}, this.options.connectionDefaults);\n options.dataItem = dataItem;\n var connection = new Connection(from, to, options);\n this._connectionsDataMap[dataItem.uid] = connection;\n this.addConnection(connection, undoable);\n }\n }\n },\n _validateConnector: function (value) {\n var connector;\n if (defined(value) && value !== null) {\n connector = this._dataMap[value];\n }\n return connector;\n },\n _treeDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n dataSource = isArray(dataSource) ? { data: dataSource } : dataSource;\n if (dataSource instanceof kendo.data.DataSource && !(dataSource instanceof kendo.data.HierarchicalDataSource)) {\n throw new Error('Incorrect DataSource type. If a single dataSource instance is set to the diagram then it should be a HierarchicalDataSource. You should set only the options instead of an instance or a HierarchicalDataSource instance or supply connectionsDataSource as well.');\n }\n if (!dataSource.fields) {\n dataSource.fields = [\n { field: 'text' },\n { field: 'url' },\n { field: 'spriteCssClass' },\n { field: 'imageUrl' }\n ];\n }\n if (that.dataSource && that._refreshHandler) {\n that._unbindDataSource();\n }\n that._refreshHandler = proxy(that._refreshSource, that);\n that._errorHandler = proxy(that._error, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._refreshHandler).bind(ERROR, that._errorHandler);\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(CHANGE, that._refreshHandler).unbind(ERROR, that._errorHandler);\n },\n _adorn: function (adorner, isActive) {\n if (isActive !== undefined && adorner) {\n if (isActive) {\n this._adorners.push(adorner);\n this.adornerLayer.append(adorner.visual);\n } else {\n Utils.remove(this._adorners, adorner);\n this.adornerLayer.remove(adorner.visual);\n }\n }\n },\n _showConnectors: function (shape, value) {\n if (value) {\n this._connectorsAdorner.show(shape);\n } else {\n this._connectorsAdorner.destroy();\n }\n },\n _updateAdorners: function () {\n var adorners = this._adorners;\n for (var i = 0; i < adorners.length; i++) {\n var adorner = adorners[i];\n if (adorner.refreshBounds) {\n adorner.refreshBounds();\n }\n adorner.refresh();\n }\n },\n _refresh: function () {\n for (var i = 0; i < this.connections.length; i++) {\n this.connections[i].refresh();\n }\n },\n _destroyToolBar: function () {\n if (this.singleToolBar) {\n this.singleToolBar.hide();\n this.singleToolBar.destroy();\n this.singleToolBar = null;\n }\n },\n _destroyGlobalToolBar: function () {\n if (this.toolBar) {\n this.toolBar.hide();\n this.toolBar.destroy();\n this.toolBar = null;\n }\n },\n exportDOMVisual: function () {\n var viewBox = this.canvas._viewBox;\n var scrollOffset = geom.transform().translate(-viewBox.x, -viewBox.y);\n var viewRect = new geom.Rect([\n 0,\n 0\n ], [\n viewBox.width,\n viewBox.height\n ]);\n var clipPath = draw.Path.fromRect(viewRect);\n var wrap = new draw.Group({ transform: scrollOffset });\n var clipWrap = new draw.Group({ clip: clipPath });\n var root = this.canvas.drawingElement.children[0];\n clipWrap.append(wrap);\n wrap.children.push(root);\n return clipWrap;\n },\n exportVisual: function () {\n var scale = geom.transform().scale(1 / this._zoom);\n var wrap = new draw.Group({ transform: scale });\n var root = this.mainLayer.drawingElement;\n wrap.children.push(root);\n return wrap;\n },\n _syncChanges: function () {\n this._syncShapeChanges();\n this._syncConnectionChanges();\n },\n _syncShapeChanges: function () {\n if (this.dataSource && this._isEditable) {\n this.dataSource.sync();\n }\n },\n _syncConnectionChanges: function () {\n var that = this;\n if (that.connectionsDataSource && that._isEditable) {\n $.when.apply($, that._deferredConnectionUpdates).then(function () {\n that.connectionsDataSource.sync();\n });\n that.deferredConnectionUpdates = [];\n }\n }\n });\n dataviz.ExportMixin.extend(Diagram.fn, true);\n if (kendo.PDFMixin) {\n kendo.PDFMixin.extend(Diagram.fn);\n }\n function filterShapeDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.text = dataItem.text;\n }\n if (defined(dataItem.x) && dataItem.x !== null) {\n result.x = dataItem.x;\n }\n if (defined(dataItem.y) && dataItem.y !== null) {\n result.y = dataItem.y;\n }\n if (defined(dataItem.width) && dataItem.width !== null) {\n result.width = dataItem.width;\n }\n if (defined(dataItem.height) && dataItem.height !== null) {\n result.height = dataItem.height;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n return result;\n }\n function filterConnectionDataItem(dataItem) {\n var result = {};\n dataItem = dataItem || {};\n if (defined(dataItem.text) && dataItem.text !== null) {\n result.content = dataItem.text;\n }\n if (defined(dataItem.type) && dataItem.type !== null) {\n result.type = dataItem.type;\n }\n if (defined(dataItem.from) && dataItem.from !== null) {\n result.from = dataItem.from;\n }\n if (defined(dataItem.fromConnector) && dataItem.fromConnector !== null) {\n result.fromConnector = dataItem.fromConnector;\n }\n if (defined(dataItem.fromX) && dataItem.fromX !== null) {\n result.fromX = dataItem.fromX;\n }\n if (defined(dataItem.fromY) && dataItem.fromY !== null) {\n result.fromY = dataItem.fromY;\n }\n if (defined(dataItem.to) && dataItem.to !== null) {\n result.to = dataItem.to;\n }\n if (defined(dataItem.toConnector) && dataItem.toConnector !== null) {\n result.toConnector = dataItem.toConnector;\n }\n if (defined(dataItem.toX) && dataItem.toX !== null) {\n result.toX = dataItem.toX;\n }\n if (defined(dataItem.toY) && dataItem.toY !== null) {\n result.toY = dataItem.toY;\n }\n return result;\n }\n var DiagramToolBar = kendo.Observable.extend({\n init: function (diagram, options) {\n kendo.Observable.fn.init.call(this);\n this.diagram = diagram;\n this.options = deepExtend({}, this.options, options);\n this._tools = [];\n this.createToolBar();\n this.createTools();\n this.appendTools();\n if (this.options.modal) {\n this.createPopup();\n }\n this.bind(this.events, options);\n },\n events: ['click'],\n createPopup: function () {\n this.container = $('
        ').append(this.element);\n this._popup = this.container.kendoPopup({}).getKendoPopup();\n },\n appendTools: function () {\n for (var i = 0; i < this._tools.length; i++) {\n var tool = this._tools[i];\n if (tool.buttons && tool.buttons.length || !defined(tool.buttons)) {\n this._toolBar.add(tool);\n }\n }\n },\n createToolBar: function () {\n this.element = $('
        ');\n this._toolBar = this.element.kendoToolBar({\n click: proxy(this.click, this),\n resizable: false\n }).getKendoToolBar();\n this.element.css('border', 'none');\n },\n createTools: function () {\n for (var i = 0; i < this.options.tools.length; i++) {\n this.createTool(this.options.tools[i]);\n }\n },\n createTool: function (tool) {\n if (!isPlainObject(tool)) {\n tool = { name: tool };\n }\n var toolName = tool.name + 'Tool';\n if (this[toolName]) {\n this[toolName](tool);\n } else {\n this._tools.push(deepExtend({}, tool, { attributes: this._setAttributes({ action: tool.name }) }));\n }\n },\n showAt: function (point) {\n var popupZIndex = parseInt(this.options.popupZIndex, 10);\n if (this._popup) {\n this._popup.open(point.x, point.y);\n if (popupZIndex) {\n this._popup.wrapper.css('zIndex', popupZIndex);\n }\n }\n },\n hide: function () {\n if (this._popup) {\n this._popup.close();\n }\n },\n newGroup: function () {\n return {\n type: 'buttonGroup',\n buttons: []\n };\n },\n editTool: function () {\n this._tools.push({\n icon: 'edit',\n showText: 'overflow',\n type: 'button',\n text: 'Edit',\n attributes: this._setAttributes({ action: 'edit' })\n });\n },\n deleteTool: function () {\n this._tools.push({\n icon: 'close',\n showText: 'overflow',\n type: 'button',\n text: 'Delete',\n attributes: this._setAttributes({ action: 'delete' })\n });\n },\n rotateAnticlockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-left',\n showText: 'overflow',\n text: 'RotateAnticlockwise',\n group: 'rotate',\n attributes: this._setAttributes({\n action: 'rotateAnticlockwise',\n step: options.step\n })\n });\n },\n rotateClockwiseTool: function (options) {\n this._appendGroup('rotate');\n this._rotateGroup.buttons.push({\n icon: 'rotate-right',\n attributes: this._setAttributes({\n action: 'rotateClockwise',\n step: options.step\n }),\n showText: 'overflow',\n text: 'RotateClockwise',\n group: 'rotate'\n });\n },\n createShapeTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'shape',\n showText: 'overflow',\n text: 'CreateShape',\n group: 'create',\n attributes: this._setAttributes({ action: 'createShape' })\n });\n },\n createConnectionTool: function () {\n this._appendGroup('create');\n this._createGroup.buttons.push({\n icon: 'connector',\n showText: 'overflow',\n text: 'CreateConnection',\n group: 'create',\n attributes: this._setAttributes({ action: 'createConnection' })\n });\n },\n undoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'undo',\n showText: 'overflow',\n text: 'Undo',\n group: 'history',\n attributes: this._setAttributes({ action: 'undo' })\n });\n },\n redoTool: function () {\n this._appendGroup('history');\n this._historyGroup.buttons.push({\n icon: 'redo',\n showText: 'overflow',\n text: 'Redo',\n group: 'history',\n attributes: this._setAttributes({ action: 'redo' })\n });\n },\n _appendGroup: function (name) {\n var prop = '_' + name + 'Group';\n if (!this[prop]) {\n this[prop] = this.newGroup();\n this._tools.push(this[prop]);\n }\n },\n _setAttributes: function (attributes) {\n var attr = {};\n if (attributes.action) {\n attr[kendo.attr('action')] = attributes.action;\n }\n if (attributes.step) {\n attr[kendo.attr('step')] = attributes.step;\n }\n return attr;\n },\n _getAttributes: function (element) {\n var attr = {};\n var action = element.attr(kendo.attr('action'));\n if (action) {\n attr.action = action;\n }\n var step = element.attr(kendo.attr('step'));\n if (step) {\n attr.step = step;\n }\n return attr;\n },\n click: function (e) {\n var attributes = this._getAttributes($(e.target));\n var action = attributes.action;\n if (action && this[action]) {\n this[action](attributes);\n }\n this.trigger('click', this.eventData(action, e.target));\n },\n eventData: function (action, target) {\n var elements = this.selectedElements(), length = elements.length, shapes = [], connections = [], element;\n for (var idx = 0; idx < length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections,\n action: action,\n target: target\n };\n },\n 'delete': function () {\n var diagram = this.diagram;\n var toRemove = diagram._triggerRemove(this.selectedElements());\n if (toRemove.length) {\n this.diagram.remove(toRemove, true);\n this.diagram._syncChanges();\n }\n },\n edit: function () {\n var selectedElemens = this.selectedElements();\n if (selectedElemens.length === 1) {\n this.diagram.edit(selectedElemens[0]);\n }\n },\n rotateClockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(angle);\n },\n rotateAnticlockwise: function (options) {\n var angle = parseFloat(options.step || 90);\n this._rotate(-angle);\n },\n _rotate: function (angle) {\n var adorner = this.diagram._resizingAdorner;\n adorner.angle(adorner.angle() + angle);\n adorner.rotate();\n },\n selectedElements: function () {\n return this.diagram.select();\n },\n createShape: function () {\n this.diagram.createShape();\n },\n createConnection: function () {\n this.diagram.createConnection();\n },\n undo: function () {\n this.diagram.undo();\n },\n redo: function () {\n this.diagram.redo();\n },\n destroy: function () {\n this.diagram = null;\n this.element = null;\n this.options = null;\n if (this._toolBar) {\n this._toolBar.destroy();\n }\n if (this._popup) {\n this._popup.destroy();\n }\n }\n });\n var Editor = kendo.Observable.extend({\n init: function (element, options) {\n kendo.Observable.fn.init.call(this);\n this.options = extend(true, {}, this.options, options);\n this.element = element;\n this.model = this.options.model;\n this.fields = this._getFields();\n this._initContainer();\n this.createEditable();\n },\n options: { editors: {} },\n _initContainer: function () {\n this.wrapper = this.element;\n },\n createEditable: function () {\n var options = this.options;\n this.editable = new kendo.ui.Editable(this.wrapper, {\n fields: this.fields,\n target: options.target,\n clearContainer: false,\n model: this.model\n });\n },\n _isEditable: function (field) {\n return this.model.editable && this.model.editable(field);\n },\n _getFields: function () {\n var fields = [];\n var modelFields = this.model.fields;\n for (var field in modelFields) {\n var result = {};\n if (this._isEditable(field)) {\n var editor = this.options.editors[field];\n if (editor) {\n result.editor = editor;\n }\n result.field = field;\n fields.push(result);\n }\n }\n return fields;\n },\n end: function () {\n return this.editable.end();\n },\n destroy: function () {\n this.editable.destroy();\n this.editable.element.find('[' + kendo.attr('container-for') + ']').empty();\n this.model = this.wrapper = this.element = this.columns = this.editable = null;\n }\n });\n var PopupEditor = Editor.extend({\n init: function (element, options) {\n Editor.fn.init.call(this, element, options);\n this.bind(this.events, this.options);\n this.open();\n },\n events: [\n 'update',\n 'cancel'\n ],\n options: {\n window: {\n modal: true,\n resizable: false,\n draggable: true,\n title: 'Edit',\n visible: false\n }\n },\n _initContainer: function () {\n var that = this;\n this.wrapper = $('
        ').attr(kendo.attr('uid'), this.model.uid);\n var formContent = '';\n if (this.options.template) {\n formContent += this._renderTemplate();\n this.fields = [];\n } else {\n formContent += this._renderFields();\n }\n formContent += this._renderButtons();\n this.wrapper.append($('
        ').append(formContent));\n this.window = new kendo.ui.Window(this.wrapper.appendTo(this.element), this.options.window);\n this.window.bind('close', function (e) {\n if (e.userTriggered) {\n e.sender.element.focus();\n that._cancelClick(e);\n }\n });\n this._attachButtonEvents();\n },\n _renderTemplate: function () {\n var template = this.options.template;\n if (typeof template === 'string') {\n template = window.unescape(template);\n }\n template = kendo.template(template)(this.model);\n return template;\n },\n _renderFields: function () {\n var form = '';\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i];\n form += '
        ';\n if (this._isEditable(field.field)) {\n form += '
        ';\n }\n }\n return form;\n },\n _renderButtons: function () {\n var form = '
        ';\n form += this._createButton('update');\n form += this._createButton('cancel');\n form += '
        ';\n return form;\n },\n _createButton: function (name) {\n return kendo.template(BUTTON_TEMPLATE)(defaultButtons[name]);\n },\n _attachButtonEvents: function () {\n this._cancelClickHandler = proxy(this._cancelClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this._updateClickHandler = proxy(this._updateClick, this);\n this.window.element.on(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n },\n _updateClick: function (e) {\n e.preventDefault();\n this.trigger('update');\n },\n _cancelClick: function (e) {\n e.preventDefault();\n this.trigger('cancel');\n },\n open: function () {\n this.window.center().open();\n },\n close: function () {\n this.window.bind('deactivate', proxy(this.destroy, this)).close();\n },\n destroy: function () {\n this.window.close().destroy();\n this.window.element.off(CLICK + NS, 'a.k-diagram-cancel', this._cancelClickHandler);\n this.window.element.off(CLICK + NS, 'a.k-diagram-update', this._updateClickHandler);\n this._cancelClickHandler = null;\n this._editUpdateClickHandler = null;\n this.window = null;\n Editor.fn.destroy.call(this);\n }\n });\n function connectionSelector(container, options) {\n var model = this.dataSource.reader.model;\n if (model) {\n var textField = model.fn.fields.text ? 'text' : model.idField;\n $('').appendTo(container).kendoDropDownList({\n dataValueField: model.idField,\n dataTextField: textField,\n dataSource: this.dataSource.data().toJSON(),\n optionLabel: ' ',\n valuePrimitive: true\n });\n }\n }\n function InactiveItem(dataItem) {\n this.dataItem = dataItem;\n this.callbacks = [];\n }\n InactiveItem.fn = InactiveItem.prototype = {\n onActivate: function (callback) {\n var deffered = $.Deferred();\n this.callbacks.push({\n callback: callback,\n deferred: deffered\n });\n return deffered;\n },\n activate: function () {\n var callbacks = this.callbacks;\n var item;\n for (var idx = 0; idx < callbacks.length; idx++) {\n item = this.callbacks[idx];\n item.callback(this.dataItem);\n item.deferred.resolve();\n }\n this.callbacks = [];\n }\n };\n function InactiveItemsCollection() {\n this.items = {};\n }\n InactiveItemsCollection.fn = InactiveItemsCollection.prototype = {\n add: function (items) {\n for (var idx = 0; idx < items.length; idx++) {\n this.items[items[idx].uid] = new InactiveItem(items[idx]);\n }\n },\n forEach: function (callback) {\n for (var uid in this.items) {\n callback(this.items[uid]);\n }\n },\n getByUid: function (uid) {\n return this.items[uid];\n },\n remove: function (item) {\n delete this.items[item.uid];\n }\n };\n var QuadRoot = Class.extend({\n init: function () {\n this.shapes = [];\n },\n _add: function (shape, bounds) {\n this.shapes.push({\n bounds: bounds,\n shape: shape\n });\n shape._quadNode = this;\n },\n insert: function (shape, bounds) {\n this._add(shape, bounds);\n },\n remove: function (shape) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var idx = 0; idx < length; idx++) {\n if (shapes[idx].shape === shape) {\n shapes.splice(idx, 1);\n break;\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var shapes = this.shapes;\n var length = shapes.length;\n for (var i = 0; i < length; i++) {\n if (this._testRect(shapes[i].shape, rect) && !dataviz.inArray(shapes[i].shape, exclude)) {\n return true;\n }\n }\n },\n _testRect: function (shape, rect) {\n var angle = shape.rotate().angle;\n var bounds = shape.bounds();\n var hit;\n if (!angle) {\n hit = bounds.overlaps(rect);\n } else {\n hit = Intersect.rects(rect, bounds, -angle);\n }\n return hit;\n }\n });\n var QuadNode = QuadRoot.extend({\n init: function (rect) {\n QuadRoot.fn.init.call(this);\n this.children = [];\n this.rect = rect;\n },\n inBounds: function (rect) {\n var nodeRect = this.rect;\n var nodeBottomRight = nodeRect.bottomRight();\n var bottomRight = rect.bottomRight();\n var inBounds = nodeRect.x <= rect.x && nodeRect.y <= rect.y && bottomRight.x <= nodeBottomRight.x && bottomRight.y <= nodeBottomRight.y;\n return inBounds;\n },\n overlapsBounds: function (rect) {\n return this.rect.overlaps(rect);\n },\n insert: function (shape, bounds) {\n var inserted = false;\n var children = this.children;\n var length = children.length;\n if (this.inBounds(bounds)) {\n if (!length && this.shapes.length < 4) {\n this._add(shape, bounds);\n } else {\n if (!length) {\n this._initChildren();\n }\n for (var idx = 0; idx < children.length; idx++) {\n if (children[idx].insert(shape, bounds)) {\n inserted = true;\n break;\n }\n }\n if (!inserted) {\n this._add(shape, bounds);\n }\n }\n inserted = true;\n }\n return inserted;\n },\n _initChildren: function () {\n var rect = this.rect, children = this.children, shapes = this.shapes, center = rect.center(), halfWidth = rect.width / 2, halfHeight = rect.height / 2, childIdx, shapeIdx;\n children.push(new QuadNode(new Rect(rect.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, rect.y, halfWidth, halfHeight)), new QuadNode(new Rect(rect.x, center.y, halfWidth, halfHeight)), new QuadNode(new Rect(center.x, center.y, halfWidth, halfHeight)));\n for (shapeIdx = shapes.length - 1; shapeIdx >= 0; shapeIdx--) {\n for (childIdx = 0; childIdx < children.length; childIdx++) {\n if (children[childIdx].insert(shapes[shapeIdx].shape, shapes[shapeIdx].bounds)) {\n shapes.splice(shapeIdx, 1);\n break;\n }\n }\n }\n },\n hitTestRect: function (rect, exclude) {\n var idx;\n var children = this.children;\n var length = children.length;\n var hit = false;\n if (this.overlapsBounds(rect)) {\n if (QuadRoot.fn.hitTestRect.call(this, rect, exclude)) {\n hit = true;\n } else {\n for (idx = 0; idx < length; idx++) {\n if (children[idx].hitTestRect(rect, exclude)) {\n hit = true;\n break;\n }\n }\n }\n }\n return hit;\n }\n });\n var ShapesQuadTree = Class.extend({\n ROOT_SIZE: 1000,\n init: function (diagram) {\n var boundsChangeHandler = proxy(this._boundsChange, this);\n diagram.bind(ITEMBOUNDSCHANGE, boundsChangeHandler);\n diagram.bind(ITEMROTATE, boundsChangeHandler);\n this.initRoots();\n },\n initRoots: function () {\n this.rootMap = {};\n this.root = new QuadRoot();\n },\n clear: function () {\n this.initRoots();\n },\n _boundsChange: function (e) {\n if (e.item._quadNode) {\n e.item._quadNode.remove(e.item);\n }\n this.insert(e.item);\n },\n insert: function (shape) {\n var bounds = shape.bounds(ROTATED);\n var rootSize = this.ROOT_SIZE;\n var sectors = this.getSectors(bounds);\n var x = sectors[0][0];\n var y = sectors[1][0];\n if (this.inRoot(sectors)) {\n this.root.insert(shape, bounds);\n } else {\n if (!this.rootMap[x]) {\n this.rootMap[x] = {};\n }\n if (!this.rootMap[x][y]) {\n this.rootMap[x][y] = new QuadNode(new Rect(x * rootSize, y * rootSize, rootSize, rootSize));\n }\n this.rootMap[x][y].insert(shape, bounds);\n }\n },\n remove: function (shape) {\n if (shape._quadNode) {\n shape._quadNode.remove(shape);\n }\n },\n inRoot: function (sectors) {\n return sectors[0].length > 1 || sectors[1].length > 1;\n },\n getSectors: function (rect) {\n var rootSize = this.ROOT_SIZE;\n var bottomRight = rect.bottomRight();\n var bottomX = math.floor(bottomRight.x / rootSize);\n var bottomY = math.floor(bottomRight.y / rootSize);\n var sectors = [\n [],\n []\n ];\n for (var x = math.floor(rect.x / rootSize); x <= bottomX; x++) {\n sectors[0].push(x);\n }\n for (var y = math.floor(rect.y / rootSize); y <= bottomY; y++) {\n sectors[1].push(y);\n }\n return sectors;\n },\n hitTestRect: function (rect, exclude) {\n var sectors = this.getSectors(rect);\n var xIdx, yIdx, x, y;\n var root;\n if (this.root.hitTestRect(rect, exclude)) {\n return true;\n }\n for (xIdx = 0; xIdx < sectors[0].length; xIdx++) {\n x = sectors[0][xIdx];\n for (yIdx = 0; yIdx < sectors[1].length; yIdx++) {\n y = sectors[1][yIdx];\n root = (this.rootMap[x] || {})[y];\n if (root && root.hitTestRect(rect, exclude)) {\n return true;\n }\n }\n }\n return false;\n }\n });\n function cloneDataItem(dataItem) {\n var result = dataItem;\n if (dataItem instanceof kendo.data.Model) {\n result = dataItem.toJSON();\n result[dataItem.idField] = dataItem._defaultId;\n }\n return result;\n }\n function splitDiagramElements(elements) {\n var connections = [];\n var shapes = [];\n var element, idx;\n for (idx = 0; idx < elements.length; idx++) {\n element = elements[idx];\n if (element instanceof Shape) {\n shapes.push(element);\n } else {\n connections.push(element);\n }\n }\n return {\n shapes: shapes,\n connections: connections\n };\n }\n function createModel(dataSource, model) {\n if (dataSource.reader.model) {\n return new dataSource.reader.model(model);\n }\n return new kendo.data.ObservableObject(model);\n }\n function clearField(field, model) {\n if (defined(model[field])) {\n model.set(field, null);\n }\n }\n function copyDefaultOptions(mainOptions, elementOptions, fields) {\n var field;\n for (var idx = 0; idx < fields.length; idx++) {\n field = fields[idx];\n if (elementOptions && !defined(elementOptions[field])) {\n elementOptions[field] = mainOptions[field];\n }\n }\n }\n function translateToOrigin(visual) {\n var bbox = visual.drawingContainer().clippedBBox(null);\n if (bbox.origin.x !== 0 || bbox.origin.y !== 0) {\n visual.position(-bbox.origin.x, -bbox.origin.y);\n }\n }\n function preventDefault(e) {\n e.preventDefault();\n }\n dataviz.ui.plugin(Diagram);\n deepExtend(diagram, {\n Shape: Shape,\n Connection: Connection,\n Connector: Connector,\n DiagramToolBar: DiagramToolBar,\n QuadNode: QuadNode,\n QuadRoot: QuadRoot,\n ShapesQuadTree: ShapesQuadTree,\n PopupEditor: PopupEditor\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.diagram', [\n 'kendo.data',\n 'kendo.draganddrop',\n 'kendo.userevents',\n 'kendo.mobile.scroller',\n 'kendo.drawing',\n 'dataviz/diagram/utils',\n 'dataviz/diagram/math',\n 'dataviz/diagram/svg',\n 'dataviz/diagram/services',\n 'dataviz/diagram/layout',\n 'dataviz/diagram/dom'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.diagram',\n name: 'Diagram',\n category: 'dataviz',\n description: 'The Kendo DataViz Diagram ',\n depends: [\n 'data',\n 'userevents',\n 'mobile.scroller',\n 'draganddrop',\n 'drawing',\n 'dataviz.core',\n 'dataviz.themes',\n 'toolbar'\n ],\n features: [\n {\n id: 'dataviz.diagram-pdf-export',\n name: 'PDF export',\n description: 'Export Diagram as PDF',\n depends: ['pdf']\n },\n {\n id: 'dataviz.diagram-editing',\n name: 'Editing',\n description: 'Support for model editing',\n depends: [\n 'editable',\n 'window',\n 'dropdownlist'\n ]\n }\n ]\n };\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz.treemap', [\n 'kendo.data',\n 'kendo.userevents',\n 'kendo.dataviz.themes'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dataviz.treeMap',\n name: 'TreeMap',\n category: 'dataviz',\n description: 'The Kendo DataViz TreeMap',\n depends: [\n 'data',\n 'userevents',\n 'dataviz.themes'\n ]\n };\n (function ($, undefined) {\n var math = Math, proxy = $.proxy, isArray = $.isArray, kendo = window.kendo, outerHeight = kendo._outerHeight, outerWidth = kendo._outerWidth, Class = kendo.Class, Widget = kendo.ui.Widget, template = kendo.template, deepExtend = kendo.deepExtend, HierarchicalDataSource = kendo.data.HierarchicalDataSource, getter = kendo.getter, dataviz = kendo.dataviz;\n var NS = '.kendoTreeMap', CHANGE = 'change', DATA_BOUND = 'dataBound', ITEM_CREATED = 'itemCreated', MAX_VALUE = Number.MAX_VALUE, MOUSEOVER_NS = 'mouseover' + NS, MOUSELEAVE_NS = 'mouseleave' + NS, UNDEFINED = 'undefined';\n var TreeMap = Widget.extend({\n init: function (element, options) {\n kendo.destroy(element);\n $(element).empty();\n Widget.fn.init.call(this, element, options);\n this.wrapper = this.element;\n this._initTheme(this.options);\n this.element.addClass('k-widget k-treemap');\n this._setLayout();\n this._originalOptions = deepExtend({}, this.options);\n this._initDataSource();\n this._attachEvents();\n kendo.notify(this, dataviz.ui);\n },\n options: {\n name: 'TreeMap',\n theme: 'default',\n autoBind: true,\n textField: 'text',\n valueField: 'value',\n colorField: 'color'\n },\n events: [\n DATA_BOUND,\n ITEM_CREATED\n ],\n _initTheme: function (options) {\n var that = this, themes = dataviz.ui.themes || {}, themeName = ((options || {}).theme || '').toLowerCase(), themeOptions = (themes[themeName] || {}).treeMap;\n that.options = deepExtend({}, themeOptions, options);\n },\n _attachEvents: function () {\n this.element.on(MOUSEOVER_NS, proxy(this._mouseover, this)).on(MOUSELEAVE_NS, proxy(this._mouseleave, this));\n this._resizeHandler = proxy(this.resize, this, false);\n kendo.onResize(this._resizeHandler);\n },\n _setLayout: function () {\n if (this.options.type === 'horizontal') {\n this._layout = new SliceAndDice(false);\n this._view = new SliceAndDiceView(this, this.options);\n } else if (this.options.type === 'vertical') {\n this._layout = new SliceAndDice(true);\n this._view = new SliceAndDiceView(this, this.options);\n } else {\n this._layout = new Squarified();\n this._view = new SquarifiedView(this, this.options);\n }\n },\n _initDataSource: function () {\n var that = this, options = that.options, dataSource = options.dataSource;\n that._dataChangeHandler = proxy(that._onDataChange, that);\n that.dataSource = HierarchicalDataSource.create(dataSource).bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n setDataSource: function (dataSource) {\n var that = this;\n that.dataSource.unbind(CHANGE, that._dataChangeHandler);\n that.dataSource = dataSource.bind(CHANGE, that._dataChangeHandler);\n if (dataSource) {\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n }\n },\n _onDataChange: function (e) {\n var node = e.node;\n var items = e.items;\n var options = this.options;\n var item, i;\n if (!node) {\n this._cleanItems();\n this.element.empty();\n item = this._wrapItem(items[0]);\n this._layout.createRoot(item, outerWidth(this.element), outerHeight(this.element), this.options.type === 'vertical');\n this._view.createRoot(item);\n this._root = item;\n this._colorIdx = 0;\n } else {\n if (items.length) {\n var root = this._getByUid(node.uid);\n root.children = [];\n items = new kendo.data.Query(items)._sortForGrouping(options.valueField, 'desc');\n for (i = 0; i < items.length; i++) {\n item = items[i];\n root.children.push(this._wrapItem(item));\n }\n var htmlSize = this._view.htmlSize(root);\n this._layout.compute(root.children, root.coord, htmlSize);\n this._setColors(root.children);\n this._view.render(root);\n }\n }\n for (i = 0; i < items.length; i++) {\n items[i].load();\n }\n if (node) {\n this.trigger(DATA_BOUND, { node: node });\n }\n },\n _cleanItems: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element.find('.k-leaf div,.k-treemap-title,.k-treemap-title-vertical') };\n });\n },\n _setColors: function (items) {\n var colors = this.options.colors;\n var colorIdx = this._colorIdx;\n var color = colors[colorIdx % colors.length];\n var colorRange, item;\n if (isArray(color)) {\n colorRange = colorsByLength(color[0], color[1], items.length);\n }\n var leafNodes = false;\n for (var i = 0; i < items.length; i++) {\n item = items[i];\n if (!defined(item.color)) {\n if (colorRange) {\n item.color = colorRange[i];\n } else {\n item.color = color;\n }\n }\n if (!item.dataItem.hasChildren) {\n leafNodes = true;\n }\n }\n if (leafNodes) {\n this._colorIdx++;\n }\n },\n _contentSize: function (root) {\n this.view.renderHeight(root);\n },\n _wrapItem: function (item) {\n var wrap = {};\n if (defined(this.options.valueField)) {\n wrap.value = getField(this.options.valueField, item);\n }\n if (defined(this.options.colorField)) {\n wrap.color = getField(this.options.colorField, item);\n }\n if (defined(this.options.textField)) {\n wrap.text = getField(this.options.textField, item);\n }\n wrap.level = item.level();\n wrap.dataItem = item;\n return wrap;\n },\n _getByUid: function (uid) {\n var items = [this._root];\n var item;\n while (items.length) {\n item = items.pop();\n if (item.dataItem.uid === uid) {\n return item;\n }\n if (item.children) {\n items = items.concat(item.children);\n }\n }\n },\n dataItem: function (node) {\n var uid = $(node).attr(kendo.attr('uid')), dataSource = this.dataSource;\n return dataSource && dataSource.getByUid(uid);\n },\n findByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n _mouseover: function (e) {\n var target = $(e.target);\n if (target.hasClass('k-leaf')) {\n this._removeActiveState();\n target.removeClass('k-state-hover').addClass('k-state-hover');\n }\n },\n _removeActiveState: function () {\n this.element.find('.k-state-hover').removeClass('k-state-hover');\n },\n _mouseleave: function () {\n this._removeActiveState();\n },\n destroy: function () {\n Widget.fn.destroy.call(this);\n this.element.off(NS);\n if (this.dataSource) {\n this.dataSource.unbind(CHANGE, this._dataChangeHandler);\n }\n this._root = null;\n kendo.unbindResize(this._resizeHandler);\n kendo.destroy(this.element);\n },\n items: function () {\n return $();\n },\n getSize: function () {\n return kendo.dimensions(this.element);\n },\n _resize: function () {\n var root = this._root;\n if (root) {\n var element = this.element;\n var rootElement = element.children();\n root.coord.width = outerWidth(element);\n root.coord.height = outerHeight(element);\n rootElement.css({\n width: root.coord.width,\n height: root.coord.height\n });\n this._resizeItems(root, rootElement);\n }\n },\n _resizeItems: function (root, element) {\n if (root.children && root.children.length) {\n var elements = element.children('.k-treemap-wrap').children();\n var child, childElement;\n this._layout.compute(root.children, root.coord, { text: this._view.titleSize(root, element) });\n for (var idx = 0; idx < root.children.length; idx++) {\n child = root.children[idx];\n childElement = elements.filter('[' + kendo.attr('uid') + '=\\'' + child.dataItem.uid + '\\']');\n this._view.setItemSize(child, childElement);\n this._resizeItems(child, childElement);\n }\n }\n },\n setOptions: function (options) {\n var dataSource = options.dataSource;\n options.dataSource = undefined;\n this._originalOptions = deepExtend(this._originalOptions, options);\n this.options = deepExtend({}, this._originalOptions);\n this._setLayout();\n this._initTheme(this.options);\n Widget.fn._setEvents.call(this, options);\n if (dataSource) {\n this.setDataSource(HierarchicalDataSource.create(dataSource));\n }\n if (this.options.autoBind) {\n this.dataSource.fetch();\n }\n }\n });\n var Squarified = Class.extend({\n createRoot: function (root, width, height) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n },\n leaf: function (tree) {\n return !tree.children;\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0, itemsArea = [], i;\n for (i = 0; i < items.length; i++) {\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n var minimumSideValue = this.layoutHorizontal() ? coord.height : coord.width;\n var firstElement = [items[0]];\n var tail = items.slice(1);\n this.squarify(tail, firstElement, minimumSideValue, coord);\n },\n squarify: function (tail, initElement, width, coord) {\n this.computeDim(tail, initElement, width, coord);\n },\n computeDim: function (tail, initElement, width, coord) {\n if (tail.length + initElement.length == 1) {\n var element = tail.length == 1 ? tail : initElement;\n this.layoutLast(element, width, coord);\n return;\n }\n if (tail.length >= 2 && initElement.length === 0) {\n initElement = [tail[0]];\n tail = tail.slice(1);\n }\n if (tail.length === 0) {\n if (initElement.length > 0) {\n this.layoutRow(initElement, width, coord);\n }\n return;\n }\n var firstElement = tail[0];\n if (this.worstAspectRatio(initElement, width) >= this.worstAspectRatio([firstElement].concat(initElement), width)) {\n this.computeDim(tail.slice(1), initElement.concat([firstElement]), width, coord);\n } else {\n var newCoords = this.layoutRow(initElement, width, coord);\n this.computeDim(tail, [], newCoords.dim, newCoords);\n }\n },\n layoutLast: function (items, w, coord) {\n items[0].coord = coord;\n },\n layoutRow: function (items, width, coord) {\n if (this.layoutHorizontal()) {\n return this.layoutV(items, width, coord);\n } else {\n return this.layoutH(items, width, coord);\n }\n },\n orientation: 'h',\n layoutVertical: function () {\n return this.orientation === 'v';\n },\n layoutHorizontal: function () {\n return this.orientation === 'h';\n },\n layoutChange: function () {\n this.orientation = this.layoutVertical() ? 'h' : 'v';\n },\n worstAspectRatio: function (items, width) {\n if (!items || items.length === 0) {\n return MAX_VALUE;\n }\n var areaSum = 0, maxArea = 0, minArea = MAX_VALUE;\n for (var i = 0; i < items.length; i++) {\n var area = items[i].area;\n areaSum += area;\n minArea = minArea < area ? minArea : area;\n maxArea = maxArea > area ? maxArea : area;\n }\n return math.max(width * width * maxArea / (areaSum * areaSum), areaSum * areaSum / (width * width * minArea));\n },\n compute: function (children, rootCoord, htmlSize) {\n if (!(rootCoord.width >= rootCoord.height && this.layoutHorizontal())) {\n this.layoutChange();\n }\n if (children && children.length > 0) {\n var newRootCoord = {\n width: rootCoord.width,\n height: rootCoord.height - htmlSize.text,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutV: function (items, width, coord) {\n var totalArea = this._totalArea(items), top = 0;\n width = round(totalArea / width);\n for (var i = 0; i < items.length; i++) {\n var height = round(items[i].area / width);\n items[i].coord = {\n height: height,\n width: width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n var ans = {\n height: coord.height,\n width: coord.width - width,\n top: coord.top,\n left: coord.left + width\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.height) {\n this.layoutChange();\n }\n return ans;\n },\n layoutH: function (items, width, coord) {\n var totalArea = this._totalArea(items);\n var height = round(totalArea / width), top = coord.top, left = 0;\n for (var i = 0; i < items.length; i++) {\n items[i].coord = {\n height: height,\n width: round(items[i].area / height),\n top: top,\n left: coord.left + left\n };\n left += items[i].coord.width;\n }\n var ans = {\n height: coord.height - height,\n width: coord.width,\n top: coord.top + height,\n left: coord.left\n };\n ans.dim = math.min(ans.width, ans.height);\n if (ans.dim != ans.width) {\n this.layoutChange();\n }\n return ans;\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SquarifiedView = Class.extend({\n init: function (treeMap, options) {\n this.options = deepExtend({}, this.options, options);\n this.treeMap = treeMap;\n this.element = $(treeMap.element);\n this.offset = 0;\n },\n titleSize: function (item, element) {\n var text = element.children('.k-treemap-title');\n return text.height() || 0;\n },\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = { text: 0 };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n htmlSize.text = title.height();\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n _compile: function (element, dataItem) {\n this.treeMap.angular('compile', function () {\n return {\n elements: element,\n data: [{ dataItem: dataItem }]\n };\n });\n },\n _getByUid: function (uid) {\n return this.element.find('.k-treemap-tile[' + kendo.attr('uid') + '=\\'' + uid + '\\']');\n },\n render: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var children = root.children;\n if (children) {\n var rootWrap = rootElement.find('.k-treemap-wrap');\n for (var i = 0; i < children.length; i++) {\n var leaf = children[i];\n var htmlElement = this._createLeaf(leaf);\n rootWrap.append(htmlElement);\n this._compile(htmlElement.children(), leaf.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n }\n }\n },\n createRoot: function (root) {\n var htmlElement = this._createLeaf(root);\n this.element.append(htmlElement);\n this._compile(htmlElement.children(), root.dataItem);\n this.treeMap.trigger(ITEM_CREATED, { element: htmlElement });\n },\n _clean: function (root) {\n this.treeMap.angular('cleanup', function () {\n return { elements: root.children(':not(.k-treemap-wrap)') };\n });\n root.css('background-color', '');\n root.removeClass('k-leaf');\n root.removeClass('k-inverse');\n root.empty();\n },\n _createLeaf: function (item) {\n return this._createTile(item).css('background-color', item.color).addClass('k-leaf').toggleClass('k-inverse', this._tileColorBrightness(item) > 180).toggle(item.value !== 0).append($('
        ').html(this._getText(item)));\n },\n _createTile: function (item) {\n var tile = $('
        ');\n this.setItemSize(item, tile);\n if (defined(item.dataItem) && defined(item.dataItem.uid)) {\n tile.attr(kendo.attr('uid'), item.dataItem.uid);\n }\n return tile;\n },\n _itemCoordinates: function (item) {\n var coordinates = {\n width: item.coord.width,\n height: item.coord.height,\n left: item.coord.left,\n top: item.coord.top\n };\n if (coordinates.left && this.offset) {\n coordinates.width += this.offset * 2;\n } else {\n coordinates.width += this.offset;\n }\n if (coordinates.top) {\n coordinates.height += this.offset * 2;\n } else {\n coordinates.height += this.offset;\n }\n return coordinates;\n },\n setItemSize: function (item, element) {\n var coordinates = this._itemCoordinates(item);\n element.css({\n width: coordinates.width,\n height: coordinates.height,\n left: coordinates.left,\n top: coordinates.top\n });\n },\n _getText: function (item) {\n var text = item.text;\n if (this.options.template) {\n text = this._renderTemplate(item);\n }\n return text;\n },\n _renderTemplate: function (item) {\n var titleTemplate = template(this.options.template);\n return titleTemplate({\n dataItem: item.dataItem,\n text: item.text\n });\n },\n _createTitle: function (item) {\n return $('
        ').append($('
        ').html(this._getText(item)));\n },\n _createWrap: function () {\n return $('
        ');\n },\n _tileColorBrightness: function (item) {\n return colorBrightness(item.color);\n }\n });\n var SliceAndDice = Class.extend({\n createRoot: function (root, width, height, vertical) {\n root.coord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n root.vertical = vertical;\n },\n init: function (vertical) {\n this.vertical = vertical;\n this.quotient = vertical ? 1 : 0;\n },\n compute: function (children, rootCoord, htmlSize) {\n if (children.length > 0) {\n var width = rootCoord.width;\n var height = rootCoord.height;\n if (this.vertical) {\n height -= htmlSize.text;\n } else {\n width -= htmlSize.text;\n }\n var newRootCoord = {\n width: width,\n height: height,\n top: 0,\n left: 0\n };\n this.layoutChildren(children, newRootCoord);\n }\n },\n layoutChildren: function (items, coord) {\n var parentArea = coord.width * coord.height;\n var totalArea = 0;\n var itemsArea = [];\n var i;\n for (i = 0; i < items.length; i++) {\n var item = items[i];\n itemsArea[i] = parseFloat(items[i].value);\n totalArea += itemsArea[i];\n item.vertical = this.vertical;\n }\n for (i = 0; i < itemsArea.length; i++) {\n items[i].area = parentArea * itemsArea[i] / totalArea;\n }\n this.sliceAndDice(items, coord);\n },\n sliceAndDice: function (items, coord) {\n var totalArea = this._totalArea(items);\n if (items[0].level % 2 === this.quotient) {\n this.layoutHorizontal(items, coord, totalArea);\n } else {\n this.layoutVertical(items, coord, totalArea);\n }\n },\n layoutHorizontal: function (items, coord, totalArea) {\n var left = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var width = item.area / (totalArea / coord.width);\n item.coord = {\n height: coord.height,\n width: width,\n top: coord.top,\n left: coord.left + left\n };\n left += width;\n }\n },\n layoutVertical: function (items, coord, totalArea) {\n var top = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var height = item.area / (totalArea / coord.height);\n item.coord = {\n height: height,\n width: coord.width,\n top: coord.top + top,\n left: coord.left\n };\n top += height;\n }\n },\n _totalArea: function (items) {\n var total = 0;\n for (var i = 0; i < items.length; i++) {\n total += items[i].area;\n }\n return total;\n }\n });\n var SliceAndDiceView = SquarifiedView.extend({\n htmlSize: function (root) {\n var rootElement = this._getByUid(root.dataItem.uid);\n var htmlSize = {\n text: 0,\n offset: 0\n };\n if (root.children) {\n this._clean(rootElement);\n var text = this._getText(root);\n if (text) {\n var title = this._createTitle(root);\n rootElement.append(title);\n this._compile(title, root.dataItem);\n if (root.vertical) {\n htmlSize.text = title.height();\n } else {\n htmlSize.text = title.width();\n }\n }\n rootElement.append(this._createWrap());\n this.offset = (outerWidth(rootElement) - rootElement.innerWidth()) / 2;\n }\n return htmlSize;\n },\n titleSize: function (item, element) {\n var size;\n if (item.vertical) {\n size = element.children('.k-treemap-title').height();\n } else {\n size = element.children('.k-treemap-title-vertical').width();\n }\n return size || 0;\n },\n _createTitle: function (item) {\n var title;\n if (item.vertical) {\n title = $('
        ');\n } else {\n title = $('
        ');\n }\n return title.append($('
        ').html(this._getText(item)));\n }\n });\n function getField(field, row) {\n if (row === null) {\n return row;\n }\n var get = getter(field, true);\n return get(row);\n }\n function defined(value) {\n return typeof value !== UNDEFINED;\n }\n function colorsByLength(min, max, length) {\n var minRGBtoDecimal = rgbToDecimal(min);\n var maxRGBtoDecimal = rgbToDecimal(max);\n var isDarker = colorBrightness(min) - colorBrightness(max) < 0;\n var colors = [];\n colors.push(min);\n for (var i = 0; i < length; i++) {\n var rgbColor = {\n r: colorByIndex(minRGBtoDecimal.r, maxRGBtoDecimal.r, i, length, isDarker),\n g: colorByIndex(minRGBtoDecimal.g, maxRGBtoDecimal.g, i, length, isDarker),\n b: colorByIndex(minRGBtoDecimal.b, maxRGBtoDecimal.b, i, length, isDarker)\n };\n colors.push(buildColorFromRGB(rgbColor));\n }\n colors.push(max);\n return colors;\n }\n function colorByIndex(min, max, index, length, isDarker) {\n var minColor = math.min(math.abs(min), math.abs(max));\n var maxColor = math.max(math.abs(min), math.abs(max));\n var step = (maxColor - minColor) / (length + 1);\n var currentStep = step * (index + 1);\n var color;\n if (isDarker) {\n color = minColor + currentStep;\n } else {\n color = maxColor - currentStep;\n }\n return color;\n }\n function buildColorFromRGB(color) {\n return '#' + decimalToRgb(color.r) + decimalToRgb(color.g) + decimalToRgb(color.b);\n }\n function rgbToDecimal(color) {\n color = color.replace('#', '');\n var rgbColor = colorToRGB(color);\n return {\n r: rgbToHex(rgbColor.r),\n g: rgbToHex(rgbColor.g),\n b: rgbToHex(rgbColor.b)\n };\n }\n function decimalToRgb(number) {\n var result = math.round(number).toString(16).toUpperCase();\n if (result.length === 1) {\n result = '0' + result;\n }\n return result;\n }\n function colorToRGB(color) {\n var colorLength = color.length;\n var rgbColor = {};\n if (colorLength === 3) {\n rgbColor.r = color[0];\n rgbColor.g = color[1];\n rgbColor.b = color[2];\n } else {\n rgbColor.r = color.substring(0, 2);\n rgbColor.g = color.substring(2, 4);\n rgbColor.b = color.substring(4, 6);\n }\n return rgbColor;\n }\n function rgbToHex(rgb) {\n return parseInt(rgb.toString(16), 16);\n }\n function colorBrightness(color) {\n var brightness = 0;\n if (color) {\n color = rgbToDecimal(color);\n brightness = math.sqrt(0.241 * color.r * color.r + 0.691 * color.g * color.g + 0.068 * color.b * color.b);\n }\n return brightness;\n }\n function round(value) {\n var power = math.pow(10, 4);\n return math.round(value * power) / power;\n }\n dataviz.ui.plugin(TreeMap);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.angular', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'angular',\n name: 'AngularJS Directives',\n category: 'framework',\n description: 'Adds Kendo UI for AngularJS directives',\n depends: ['core'],\n defer: true\n };\n (function ($, angular, undefined) {\n 'use strict';\n if (!angular || !angular.injector) {\n return;\n }\n var module = angular.module('kendo.directives', []), $injector = angular.injector(['ng']), $parse = $injector.get('$parse'), $timeout = $injector.get('$timeout'), $defaultCompile, $log = $injector.get('$log');\n function withoutTimeout(f) {\n var save = $timeout;\n try {\n $timeout = function (f) {\n return f();\n };\n return f();\n } finally {\n $timeout = save;\n }\n }\n var OPTIONS_NOW;\n var createDataSource = function () {\n var types = {\n TreeList: 'TreeListDataSource',\n TreeView: 'HierarchicalDataSource',\n Scheduler: 'SchedulerDataSource',\n PivotGrid: 'PivotDataSource',\n PivotConfigurator: 'PivotDataSource',\n PanelBar: 'HierarchicalDataSource',\n Menu: '$PLAIN',\n ContextMenu: '$PLAIN'\n };\n var toDataSource = function (dataSource, type) {\n if (type == '$PLAIN') {\n return dataSource;\n }\n return kendo.data[type].create(dataSource);\n };\n return function (scope, element, role, source) {\n var type = types[role] || 'DataSource';\n var current = scope.$eval(source);\n var ds = toDataSource(current, type);\n scope.$watch(source, function (mew) {\n var widget = kendoWidgetInstance(element);\n if (widget && typeof widget.setDataSource == 'function') {\n if (mew !== current && mew !== widget.dataSource) {\n var ds = toDataSource(mew, type);\n widget.setDataSource(ds);\n current = mew;\n }\n }\n });\n return ds;\n };\n }();\n var ignoredAttributes = {\n kDataSource: true,\n kOptions: true,\n kRebind: true,\n kNgModel: true,\n kNgDelay: true\n };\n var ignoredOwnProperties = {\n name: true,\n title: true,\n style: true\n };\n function createWidget(scope, element, attrs, widget, origAttr, controllers) {\n if (!(element instanceof jQuery)) {\n throw new Error('The Kendo UI directives require jQuery to be available before AngularJS. Please include jquery before angular in the document.');\n }\n var kNgDelay = attrs.kNgDelay, delayValue = scope.$eval(kNgDelay);\n controllers = controllers || [];\n var ngModel = controllers[0], ngForm = controllers[1];\n var ctor = $(element)[widget];\n if (!ctor) {\n window.console.error('Could not find: ' + widget);\n return null;\n }\n var parsed = parseOptions(scope, element, attrs, widget, ctor);\n var options = parsed.options;\n if (parsed.unresolved.length) {\n var promises = [];\n for (var i = 0, len = parsed.unresolved.length; i < len; i++) {\n var unresolved = parsed.unresolved[i];\n var promise = $.Deferred(function (d) {\n var unwatch = scope.$watch(unresolved.path, function (newValue) {\n if (newValue !== undefined) {\n unwatch();\n d.resolve();\n }\n });\n }).promise();\n promises.push(promise);\n }\n $.when.apply(null, promises).then(createIt);\n return;\n }\n if (kNgDelay && !delayValue) {\n var root = scope.$root || scope;\n var register = function () {\n var unregister = scope.$watch(kNgDelay, function (newValue) {\n if (newValue !== undefined) {\n unregister();\n element.removeAttr(attrs.$attr.kNgDelay);\n kNgDelay = null;\n $timeout(createIt);\n }\n });\n };\n if (/^\\$(digest|apply)$/.test(root.$$phase)) {\n register();\n } else {\n scope.$apply(register);\n }\n return;\n } else {\n return createIt();\n }\n function createIt() {\n var originalElement;\n if (attrs.kRebind) {\n originalElement = $($(element)[0].cloneNode(true));\n }\n options = parseOptions(scope, element, attrs, widget, ctor).options;\n if (element.is('select')) {\n (function (options) {\n if (options.length > 0) {\n var first = $(options[0]);\n if (!/\\S/.test(first.text()) && /^\\?/.test(first.val())) {\n first.remove();\n }\n for (var i = 0; i < options.length; i++) {\n $(options[i]).off('$destroy');\n }\n }\n }(element[0].options));\n }\n var object = ctor.call(element, OPTIONS_NOW = options).data(widget);\n exposeWidget(object, scope, attrs, widget, origAttr);\n scope.$emit('kendoWidgetCreated', object);\n var destroyRegister = destroyWidgetOnScopeDestroy(scope, object);\n if (attrs.kRebind) {\n setupRebind(object, scope, element, originalElement, attrs.kRebind, destroyRegister, attrs);\n }\n if (attrs.kNgDisabled) {\n var kNgDisabled = attrs.kNgDisabled;\n var isDisabled = scope.$eval(kNgDisabled);\n if (isDisabled) {\n object.enable(!isDisabled);\n }\n bindToKNgDisabled(object, scope, element, kNgDisabled);\n }\n if (attrs.kNgReadonly) {\n var kNgReadonly = attrs.kNgReadonly;\n var isReadonly = scope.$eval(kNgReadonly);\n if (isReadonly) {\n object.readonly(isReadonly);\n }\n bindToKNgReadonly(object, scope, element, kNgReadonly);\n }\n if (attrs.kNgModel) {\n bindToKNgModel(object, scope, attrs.kNgModel);\n }\n if (ngModel) {\n bindToNgModel(object, scope, element, ngModel, ngForm);\n }\n if (object) {\n propagateClassToWidgetWrapper(object, element);\n }\n return object;\n }\n }\n function parseOptions(scope, element, attrs, widget, ctor) {\n var role = widget.replace(/^kendo/, '');\n var unresolved = [];\n var optionsPath = attrs.kOptions || attrs.options;\n var optionsValue = scope.$eval(optionsPath);\n if (optionsPath && optionsValue === undefined) {\n unresolved.push({\n option: 'options',\n path: optionsPath\n });\n }\n var options = angular.extend({}, attrs.defaultOptions, optionsValue);\n function addOption(name, value) {\n var scopeValue = angular.copy(scope.$eval(value));\n if (scopeValue === undefined) {\n unresolved.push({\n option: name,\n path: value\n });\n } else {\n options[name] = scopeValue;\n }\n }\n var widgetOptions = ctor.widget.prototype.options;\n var widgetEvents = ctor.widget.prototype.events;\n $.each(attrs, function (name, value) {\n if (name === 'source' || name === 'kDataSource' || name === 'kScopeField' || name === 'scopeField') {\n return;\n }\n var dataName = 'data' + name.charAt(0).toUpperCase() + name.slice(1);\n if (name.indexOf('on') === 0) {\n var eventKey = name.replace(/^on./, function (prefix) {\n return prefix.charAt(2).toLowerCase();\n });\n if (widgetEvents.indexOf(eventKey) > -1) {\n options[eventKey] = value;\n }\n }\n if (widgetOptions.hasOwnProperty(dataName)) {\n addOption(dataName, value);\n } else if (widgetOptions.hasOwnProperty(name) && !ignoredOwnProperties[name]) {\n addOption(name, value);\n } else if (!ignoredAttributes[name]) {\n var match = name.match(/^k(On)?([A-Z].*)/);\n if (match) {\n var optionName = match[2].charAt(0).toLowerCase() + match[2].slice(1);\n if (match[1] && name != 'kOnLabel') {\n options[optionName] = value;\n } else {\n if (name == 'kOnLabel') {\n optionName = 'onLabel';\n }\n addOption(optionName, value);\n }\n }\n }\n });\n var dataSource = attrs.kDataSource || attrs.source;\n if (dataSource) {\n options.dataSource = createDataSource(scope, element, role, dataSource);\n }\n options.$angular = [scope];\n return {\n options: options,\n unresolved: unresolved\n };\n }\n function bindToKNgDisabled(widget, scope, element, kNgDisabled) {\n if (kendo.ui.PanelBar && widget instanceof kendo.ui.PanelBar || kendo.ui.Menu && widget instanceof kendo.ui.Menu) {\n $log.warn('k-ng-disabled specified on a widget that does not have the enable() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgDisabled, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.enable(!newValue);\n }\n });\n }\n function bindToKNgReadonly(widget, scope, element, kNgReadonly) {\n if (typeof widget.readonly != 'function') {\n $log.warn('k-ng-readonly specified on a widget that does not have the readonly() method: ' + widget.options.name);\n return;\n }\n scope.$watch(kNgReadonly, function (newValue, oldValue) {\n if (newValue != oldValue) {\n widget.readonly(newValue);\n }\n });\n }\n function exposeWidget(widget, scope, attrs, kendoWidget, origAttr) {\n if (attrs[origAttr]) {\n var set = $parse(attrs[origAttr]).assign;\n if (set) {\n set(scope, widget);\n } else {\n throw new Error(origAttr + ' attribute used but expression in it is not assignable: ' + attrs[kendoWidget]);\n }\n }\n }\n function formValue(element) {\n if (/checkbox|radio/i.test(element.attr('type'))) {\n return element.prop('checked');\n }\n return element.val();\n }\n var formRegExp = /^(input|select|textarea)$/i;\n function isForm(element) {\n return formRegExp.test(element[0].tagName);\n }\n function bindToNgModel(widget, scope, element, ngModel, ngForm) {\n if (!widget.value) {\n return;\n }\n var value;\n var haveChangeOnElement = false;\n if (isForm(element)) {\n value = function () {\n return formValue(element);\n };\n } else {\n value = function () {\n return widget.value();\n };\n }\n var viewRender = function () {\n var val = ngModel.$viewValue;\n if (val === undefined) {\n val = ngModel.$modelValue;\n }\n if (val === undefined) {\n val = null;\n }\n haveChangeOnElement = true;\n setTimeout(function () {\n haveChangeOnElement = false;\n if (widget) {\n var kNgModel = scope[widget.element.attr('k-ng-model')];\n if (kNgModel) {\n val = kNgModel;\n }\n if (widget.options.autoBind === false && !widget.listView.bound()) {\n if (val) {\n widget.value(val);\n }\n } else {\n widget.value(val);\n }\n }\n }, 0);\n };\n ngModel.$render = viewRender;\n setTimeout(function () {\n if (ngModel.$render !== viewRender) {\n ngModel.$render = viewRender;\n ngModel.$render();\n }\n });\n if (isForm(element)) {\n element.on('change', function () {\n haveChangeOnElement = true;\n });\n }\n var onChange = function (pristine) {\n return function () {\n var formPristine;\n if (haveChangeOnElement && !element.is('select')) {\n return;\n }\n if (pristine && ngForm) {\n formPristine = ngForm.$pristine;\n }\n ngModel.$setViewValue(value());\n if (pristine) {\n ngModel.$setPristine();\n if (formPristine) {\n ngForm.$setPristine();\n }\n }\n digest(scope);\n };\n };\n widget.first('change', onChange(false));\n widget.first('spin', onChange(false));\n if (!(kendo.ui.AutoComplete && widget instanceof kendo.ui.AutoComplete)) {\n widget.first('dataBound', onChange(true));\n }\n var currentVal = value();\n if (!isNaN(ngModel.$viewValue) && currentVal != ngModel.$viewValue) {\n if (!ngModel.$isEmpty(ngModel.$viewValue)) {\n widget.value(ngModel.$viewValue);\n } else if (currentVal != null && currentVal !== '' && currentVal != ngModel.$viewValue) {\n ngModel.$setViewValue(currentVal);\n }\n }\n ngModel.$setPristine();\n }\n function bindToKNgModel(widget, scope, kNgModel) {\n if (kendo.ui.DateRangePicker && widget instanceof kendo.ui.DateRangePicker) {\n var rangePickerModels = kNgModel.split(',');\n var rangePickerStartModel = rangePickerModels[0].trim();\n var rangePickerEndModel;\n bindToKNgModel(widget._startDateInput, scope, rangePickerStartModel);\n if (rangePickerModels[1]) {\n rangePickerEndModel = rangePickerModels[1].trim();\n bindToKNgModel(widget._endDateInput, scope, rangePickerEndModel);\n widget.range({\n start: scope[rangePickerStartModel],\n end: scope[rangePickerEndModel]\n });\n } else {\n widget.range({\n start: scope[rangePickerStartModel],\n end: null\n });\n }\n return;\n }\n if (typeof widget.value != 'function') {\n $log.warn('k-ng-model specified on a widget that does not have the value() method: ' + widget.options.name);\n return;\n }\n var form = $(widget.element).parents('ng-form, form').first();\n var ngForm = kendo.getter(form.attr('name'), true)(scope);\n var getter = $parse(kNgModel);\n var setter = getter.assign;\n var updating = false;\n var valueIsCollection = kendo.ui.MultiSelect && widget instanceof kendo.ui.MultiSelect || kendo.ui.RangeSlider && widget instanceof kendo.ui.RangeSlider;\n var length = function (value) {\n return value && valueIsCollection ? value.length : 0;\n };\n var currentValueLength = length(getter(scope));\n widget.$angular_setLogicValue(getter(scope));\n var watchHandler = function (newValue, oldValue) {\n if (newValue === undefined) {\n newValue = null;\n }\n if (updating || newValue == oldValue && length(newValue) == currentValueLength) {\n return;\n }\n currentValueLength = length(newValue);\n widget.$angular_setLogicValue(newValue);\n };\n if (valueIsCollection) {\n scope.$watchCollection(kNgModel, watchHandler);\n } else {\n scope.$watch(kNgModel, watchHandler);\n }\n var changeHandler = function () {\n updating = true;\n if (ngForm && ngForm.$pristine) {\n ngForm.$setDirty();\n }\n digest(scope, function () {\n setter(scope, widget.$angular_getLogicValue());\n currentValueLength = length(getter(scope));\n });\n updating = false;\n };\n widget.first('change', changeHandler);\n widget.first('spin', changeHandler);\n }\n function destroyWidgetOnScopeDestroy(scope, widget) {\n var deregister = scope.$on('$destroy', function () {\n deregister();\n if (widget) {\n kendo.destroy(widget.element);\n widget = null;\n }\n });\n return deregister;\n }\n function propagateClassToWidgetWrapper(widget, element) {\n if (!(window.MutationObserver && widget.wrapper)) {\n return;\n }\n var prevClassList = [].slice.call($(element)[0].classList);\n var mo = new MutationObserver(function (changes) {\n suspend();\n if (!widget) {\n return;\n }\n changes.forEach(function (chg) {\n var w = $(widget.wrapper)[0];\n switch (chg.attributeName) {\n case 'class':\n var currClassList = [].slice.call(chg.target.classList);\n currClassList.forEach(function (cls) {\n if (prevClassList.indexOf(cls) < 0) {\n w.classList.add(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.add(cls);\n }\n }\n });\n prevClassList.forEach(function (cls) {\n if (currClassList.indexOf(cls) < 0) {\n w.classList.remove(cls);\n if (kendo.ui.ComboBox && widget instanceof kendo.ui.ComboBox) {\n widget.input[0].classList.remove(cls);\n }\n }\n });\n prevClassList = currClassList;\n break;\n case 'disabled':\n if (typeof widget.enable == 'function' && !widget.element.attr('readonly')) {\n widget.enable(!$(chg.target).attr('disabled'));\n }\n break;\n case 'readonly':\n if (typeof widget.readonly == 'function' && !widget.element.attr('disabled')) {\n widget.readonly(!!$(chg.target).attr('readonly'));\n }\n break;\n }\n });\n resume();\n });\n function suspend() {\n mo.disconnect();\n }\n function resume() {\n mo.observe($(element)[0], { attributes: true });\n }\n resume();\n widget.first('destroy', suspend);\n }\n function setupRebind(widget, scope, element, originalElement, rebindAttr, destroyRegister, attrs) {\n var unregister = scope.$watch(rebindAttr, function (newValue, oldValue) {\n if (!widget._muteRebind && newValue !== oldValue) {\n unregister();\n if (attrs._cleanUp) {\n attrs._cleanUp();\n }\n var templateOptions = WIDGET_TEMPLATE_OPTIONS[widget.options.name];\n if (templateOptions) {\n templateOptions.forEach(function (name) {\n var templateContents = scope.$eval(attrs['k' + name]);\n if (templateContents) {\n originalElement.append($(templateContents).attr(kendo.toHyphens('k' + name), ''));\n }\n });\n }\n var _wrapper = $(widget.wrapper)[0];\n var _element = $(widget.element)[0];\n var isUpload = widget.options.name === 'Upload';\n if (isUpload) {\n element = $(_element);\n }\n var compile = element.injector().get('$compile');\n widget._destroy();\n if (destroyRegister) {\n destroyRegister();\n }\n widget = null;\n if (_element) {\n if (_wrapper) {\n _wrapper.parentNode.replaceChild(_element, _wrapper);\n }\n $(element).replaceWith(originalElement);\n }\n compile(originalElement)(scope);\n }\n }, true);\n digest(scope);\n }\n function bind(f, obj) {\n return function (a, b) {\n return f.call(obj, a, b);\n };\n }\n function setTemplate(key, value) {\n this[key] = kendo.stringify(value);\n }\n module.factory('directiveFactory', [\n '$compile',\n function (compile) {\n var kendoRenderedTimeout;\n var RENDERED = false;\n $defaultCompile = compile;\n var create = function (role, origAttr) {\n return {\n restrict: 'AC',\n require: [\n '?ngModel',\n '^?form'\n ],\n scope: false,\n controller: [\n '$scope',\n '$attrs',\n '$element',\n function ($scope, $attrs) {\n this.template = bind(setTemplate, $attrs);\n $attrs._cleanUp = bind(function () {\n this.template = null;\n $attrs._cleanUp = null;\n }, this);\n }\n ],\n link: function (scope, element, attrs, controllers) {\n var $element = $(element);\n var roleattr = role.replace(/([A-Z])/g, '-$1');\n $element.attr(roleattr, $element.attr('data-' + roleattr));\n $element[0].removeAttribute('data-' + roleattr);\n var widget = createWidget(scope, element, attrs, role, origAttr, controllers);\n if (!widget) {\n return;\n }\n if (kendoRenderedTimeout) {\n clearTimeout(kendoRenderedTimeout);\n }\n kendoRenderedTimeout = setTimeout(function () {\n scope.$emit('kendoRendered');\n if (!RENDERED) {\n RENDERED = true;\n $('form').each(function () {\n var form = $(this).controller('form');\n if (form) {\n form.$setPristine();\n }\n });\n }\n });\n }\n };\n };\n return { create: create };\n }\n ]);\n var TAGNAMES = {\n Editor: 'textarea',\n NumericTextBox: 'input',\n DatePicker: 'input',\n DateTimePicker: 'input',\n TimePicker: 'input',\n AutoComplete: 'input',\n ColorPicker: 'input',\n MaskedTextBox: 'input',\n MultiSelect: 'input',\n Upload: 'input',\n Validator: 'form',\n Button: 'button',\n MobileButton: 'a',\n MobileBackButton: 'a',\n MobileDetailButton: 'a',\n ListView: 'ul',\n MobileListView: 'ul',\n ScrollView: 'div',\n PanelBar: 'ul',\n TreeView: 'ul',\n Menu: 'ul',\n ContextMenu: 'ul',\n ActionSheet: 'ul',\n Switch: 'input'\n };\n var SKIP_SHORTCUTS = [\n 'MobileView',\n 'MobileDrawer',\n 'MobileLayout',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileModalView'\n ];\n var MANUAL_DIRECTIVES = [\n 'MobileApplication',\n 'MobileView',\n 'MobileModalView',\n 'MobileLayout',\n 'MobileActionSheet',\n 'MobileDrawer',\n 'MobileSplitView',\n 'MobilePane',\n 'MobileScrollView',\n 'MobilePopOver'\n ];\n angular.forEach([\n 'MobileNavBar',\n 'MobileButton',\n 'MobileBackButton',\n 'MobileDetailButton',\n 'MobileTabStrip',\n 'MobileScrollView',\n 'MobileScroller'\n ], function (widget) {\n MANUAL_DIRECTIVES.push(widget);\n widget = 'kendo' + widget;\n module.directive(widget, function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, widget, widget);\n }\n };\n });\n });\n function createDirectives(klass, isMobile) {\n function make(directiveName, widgetName) {\n module.directive(directiveName, [\n 'directiveFactory',\n function (directiveFactory) {\n return directiveFactory.create(widgetName, directiveName);\n }\n ]);\n }\n var name = isMobile ? 'Mobile' : '';\n name += klass.fn.options.name;\n var className = name;\n var shortcut = 'kendo' + name.charAt(0) + name.substr(1).toLowerCase();\n name = 'kendo' + name;\n var dashed = name.replace(/([A-Z])/g, '-$1');\n if (SKIP_SHORTCUTS.indexOf(name.replace('kendo', '')) == -1) {\n var names = name === shortcut ? [name] : [\n name,\n shortcut\n ];\n angular.forEach(names, function (directiveName) {\n module.directive(directiveName, function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element, attributes) {\n var tag = TAGNAMES[className] || 'div';\n var scopeField = attributes.kScopeField || attributes.scopeField;\n return '<' + tag + ' ' + dashed + (scopeField ? '=\"' + scopeField + '\"' : '') + '>' + element.html() + '';\n }\n };\n });\n });\n }\n if (MANUAL_DIRECTIVES.indexOf(name.replace('kendo', '')) > -1) {\n return;\n }\n make(name, name);\n if (shortcut != name) {\n make(shortcut, name);\n }\n }\n function kendoWidgetInstance(el) {\n el = $(el);\n return kendo.widgetInstance(el, kendo.ui) || kendo.widgetInstance(el, kendo.mobile.ui) || kendo.widgetInstance(el, kendo.dataviz.ui);\n }\n function digest(scope, func) {\n var root = scope.$root || scope;\n var isDigesting = /^\\$(digest|apply)$/.test(root.$$phase);\n if (func) {\n if (isDigesting) {\n func();\n } else {\n root.$apply(func);\n }\n } else if (!isDigesting) {\n root.$digest();\n }\n }\n function destroyScope(scope, el) {\n scope.$destroy();\n if (el) {\n $(el).removeData('$scope').removeData('$$kendoScope').removeData('$isolateScope').removeData('$isolateScopeNoTemplate').removeClass('ng-scope');\n }\n }\n var encode = kendo.htmlEncode;\n var open = /{{/g;\n var close = /}}/g;\n var encOpen = '{​{';\n var encClose = '}​}';\n kendo.htmlEncode = function (str) {\n return encode(str).replace(open, encOpen).replace(close, encClose);\n };\n var pendingPatches = [];\n function defadvice(klass, methodName, func) {\n if ($.isArray(klass)) {\n return angular.forEach(klass, function (klass) {\n defadvice(klass, methodName, func);\n });\n }\n if (typeof klass == 'string') {\n var a = klass.split('.');\n var x = kendo;\n while (x && a.length > 0) {\n x = x[a.shift()];\n }\n if (!x) {\n pendingPatches.push([\n klass,\n methodName,\n func\n ]);\n return false;\n }\n klass = x.prototype;\n }\n var origMethod = klass[methodName];\n klass[methodName] = function () {\n var self = this, args = arguments;\n return func.apply({\n self: self,\n next: function () {\n return origMethod.apply(self, arguments.length > 0 ? arguments : args);\n }\n }, args);\n };\n return true;\n }\n kendo.onWidgetRegistered(function (entry) {\n pendingPatches = $.grep(pendingPatches, function (args) {\n return !defadvice.apply(null, args);\n });\n createDirectives(entry.widget, entry.prefix == 'Mobile');\n });\n defadvice([\n 'ui.Widget',\n 'mobile.ui.Widget'\n ], 'angular', function (cmd, arg) {\n var self = this.self;\n if (cmd == 'init') {\n if (!arg && OPTIONS_NOW) {\n arg = OPTIONS_NOW;\n }\n OPTIONS_NOW = null;\n if (arg && arg.$angular) {\n self.$angular_scope = arg.$angular[0];\n self.$angular_init(self.element, arg);\n }\n return;\n }\n var scope = self.$angular_scope;\n if (scope) {\n withoutTimeout(function () {\n var x = arg(), elements = x.elements, data = x.data;\n if (elements.length > 0) {\n switch (cmd) {\n case 'cleanup':\n angular.forEach(elements, function (el) {\n var itemScope = $(el).data('$$kendoScope');\n if (itemScope && itemScope !== scope && itemScope.$$kendoScope) {\n destroyScope(itemScope, el);\n }\n });\n break;\n case 'compile':\n var injector = self.element.injector();\n var compile = injector ? injector.get('$compile') : $defaultCompile;\n angular.forEach(elements, function (el, i) {\n var itemScope;\n if (x.scopeFrom) {\n itemScope = x.scopeFrom;\n } else {\n var vars = data && data[i];\n if (vars !== undefined) {\n itemScope = $.extend(scope.$new(), vars);\n itemScope.$$kendoScope = true;\n } else {\n itemScope = scope;\n }\n }\n $(el).data('$$kendoScope', itemScope);\n compile(el)(itemScope);\n });\n digest(scope);\n break;\n }\n }\n });\n }\n });\n defadvice('ui.Widget', '$angular_getLogicValue', function () {\n return this.self.value();\n });\n defadvice('ui.Widget', '$angular_setLogicValue', function (val) {\n this.self.value(val);\n });\n defadvice('ui.Select', '$angular_getLogicValue', function () {\n var item = this.self.dataItem(), valueField = this.self.options.dataValueField;\n if (item) {\n if (this.self.options.valuePrimitive) {\n if (!!valueField) {\n return item[valueField];\n } else {\n return item;\n }\n } else {\n return item.toJSON();\n }\n } else {\n return null;\n }\n });\n defadvice('ui.Select', '$angular_setLogicValue', function (val) {\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var text = options.text || '';\n if (val === undefined) {\n val = '';\n }\n if (valueField && !options.valuePrimitive && val) {\n text = val[options.dataTextField] || '';\n val = val[valueField || options.dataTextField];\n }\n if (self.options.autoBind === false && !self.listView.bound()) {\n if (!text && val && options.valuePrimitive) {\n self.value(val);\n } else {\n self._preselect(val, text);\n }\n } else {\n self.value(val);\n }\n });\n defadvice('ui.MultiSelect', '$angular_getLogicValue', function () {\n var value = this.self.dataItems().slice(0);\n var valueField = this.self.options.dataValueField;\n if (valueField && this.self.options.valuePrimitive) {\n value = $.map(value, function (item) {\n return item[valueField];\n });\n }\n return value;\n });\n defadvice('ui.MultiSelect', '$angular_setLogicValue', function (val) {\n if (val == null) {\n val = [];\n }\n var self = this.self;\n var options = self.options;\n var valueField = options.dataValueField;\n var data = val;\n if (valueField && !options.valuePrimitive) {\n val = $.map(val, function (item) {\n return item[valueField];\n });\n }\n if (options.autoBind === false && !options.valuePrimitive && !self.listView.bound()) {\n self._preselect(data, val);\n } else {\n self.value(val);\n }\n });\n defadvice('ui.Widget', '$angular_init', function (element, options) {\n var self = this.self;\n if (options && !$.isArray(options)) {\n var scope = self.$angular_scope;\n for (var i = self.events.length; --i >= 0;) {\n var event = self.events[i];\n var handler = options[event];\n if (handler && typeof handler == 'string') {\n options[event] = self.$angular_makeEventHandler(event, scope, handler);\n }\n }\n }\n });\n defadvice('ui.Widget', '$angular_makeEventHandler', function (event, scope, handler) {\n handler = $parse(handler);\n return function (e) {\n digest(scope, function () {\n handler(scope, { kendoEvent: e });\n });\n };\n });\n defadvice([\n 'ui.Grid',\n 'ui.ListView',\n 'ui.TreeView',\n 'ui.PanelBar'\n ], '$angular_makeEventHandler', function (event, scope, handler) {\n if (event != 'change') {\n return this.next();\n }\n handler = $parse(handler);\n return function (ev) {\n var widget = ev.sender;\n var options = widget.options;\n var cell, multiple, locals = { kendoEvent: ev }, elems, items, columns, colIdx;\n if (angular.isString(options.selectable)) {\n cell = options.selectable.indexOf('cell') !== -1;\n multiple = options.selectable.indexOf('multiple') !== -1;\n }\n if (widget._checkBoxSelection) {\n multiple = true;\n }\n elems = locals.selected = this.select();\n items = locals.data = [];\n columns = locals.columns = [];\n for (var i = 0; i < elems.length; i++) {\n var item = cell ? elems[i].parentNode : elems[i];\n var dataItem = widget.dataItem(item);\n if (cell) {\n if (angular.element.inArray(dataItem, items) < 0) {\n items.push(dataItem);\n }\n colIdx = angular.element(elems[i]).index();\n if (angular.element.inArray(colIdx, columns) < 0) {\n columns.push(colIdx);\n }\n } else {\n items.push(dataItem);\n }\n }\n if (!multiple) {\n locals.dataItem = locals.data = items[0];\n locals.angularDataItem = kendo.proxyModelSetters(locals.dataItem);\n locals.selected = elems[0];\n }\n digest(scope, function () {\n handler(scope, locals);\n });\n };\n });\n defadvice('ui.Grid', '$angular_init', function (element, options) {\n this.next();\n if (options.columns) {\n var settings = $.extend({}, kendo.Template, options.templateSettings);\n angular.forEach(options.columns, function (col) {\n if (col.field && !col.template && !col.format && !col.values && (col.encoded === undefined || col.encoded)) {\n col.template = '#: ' + kendo.expr(col.field, settings.paramName) + '#';\n }\n });\n }\n });\n {\n defadvice('mobile.ui.ButtonGroup', 'value', function (mew) {\n var self = this.self;\n if (mew != null) {\n self.select(self.element.children('li.km-button').eq(mew));\n self.trigger('change');\n self.trigger('select', { index: self.selectedIndex });\n }\n return self.selectedIndex;\n });\n defadvice('mobile.ui.ButtonGroup', '_select', function () {\n this.next();\n this.self.trigger('change');\n });\n }\n module.directive('kendoMobileApplication', function () {\n return {\n terminal: true,\n link: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileApplication', 'kendoMobileApplication');\n }\n };\n }).directive('kendoMobileView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileView', 'kendoMobileView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileDrawer', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileDrawer', 'kendoMobileDrawer');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileModalView', function () {\n return {\n scope: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileModalView', 'kendoMobileModalView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n attrs._instance._scroller();\n }\n }\n };\n }).directive('kendoMobileSplitView', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n attrs._instance = createWidget(scope, element, attrs, 'kendoMobileSplitView', 'kendoMobileSplitView');\n },\n post: function (scope, element, attrs) {\n attrs._instance._layout();\n }\n }\n };\n }).directive('kendoMobilePane', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePane', 'kendoMobilePane');\n }\n }\n };\n }).directive('kendoMobileLayout', function () {\n return {\n link: {\n pre: function (scope, element, attrs) {\n createWidget(scope, element, attrs, 'kendoMobileLayout', 'kendoMobileLayout');\n }\n }\n };\n }).directive('kendoMobileActionSheet', function () {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.find('a[k-action]').each(function () {\n $(this).attr('data-' + kendo.ns + 'action', $(this).attr('k-action'));\n });\n createWidget(scope, element, attrs, 'kendoMobileActionSheet', 'kendoMobileActionSheet');\n }\n };\n }).directive('kendoMobilePopOver', function () {\n return {\n terminal: true,\n link: {\n pre: function (scope, element, attrs) {\n attrs.defaultOptions = scope.viewOptions;\n createWidget(scope, element, attrs, 'kendoMobilePopOver', 'kendoMobilePopOver');\n }\n }\n };\n }).directive('kendoViewTitle', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '' + element.html() + '';\n }\n };\n }).directive('kendoMobileHeader', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-header').attr('data-role', 'header');\n }\n };\n }).directive('kendoMobileFooter', function () {\n return {\n restrict: 'E',\n link: function (scope, element) {\n element.addClass('km-footer').attr('data-role', 'footer');\n }\n };\n }).directive('kendoMobileScrollViewPage', function () {\n return {\n restrict: 'E',\n replace: true,\n template: function (element) {\n return '
        ' + element.html() + '
        ';\n }\n };\n });\n angular.forEach([\n 'align',\n 'icon',\n 'rel',\n 'transition',\n 'actionsheetContext'\n ], function (attr) {\n var kAttr = 'k' + attr.slice(0, 1).toUpperCase() + attr.slice(1);\n module.directive(kAttr, function () {\n return {\n restrict: 'A',\n priority: 2,\n link: function (scope, element, attrs) {\n element.attr(kendo.attr(kendo.toHyphens(attr)), scope.$eval(attrs[kAttr]));\n }\n };\n });\n });\n var WIDGET_TEMPLATE_OPTIONS = {\n 'TreeMap': ['Template'],\n 'MobileListView': [\n 'HeaderTemplate',\n 'Template'\n ],\n 'MobileScrollView': [\n 'EmptyTemplate',\n 'Template'\n ],\n 'Grid': [\n 'AltRowTemplate',\n 'DetailTemplate',\n 'RowTemplate'\n ],\n 'ListView': [\n 'EditTemplate',\n 'Template',\n 'AltTemplate'\n ],\n 'Pager': [\n 'SelectTemplate',\n 'LinkTemplate'\n ],\n 'PivotGrid': [\n 'ColumnHeaderTemplate',\n 'DataCellTemplate',\n 'RowHeaderTemplate'\n ],\n 'Scheduler': [\n 'AllDayEventTemplate',\n 'DateHeaderTemplate',\n 'EventTemplate',\n 'MajorTimeHeaderTemplate',\n 'MinorTimeHeaderTemplate'\n ],\n 'ScrollView': ['Template'],\n 'PanelBar': ['Template'],\n 'TreeView': ['Template'],\n 'Validator': ['ErrorTemplate']\n };\n (function () {\n var templateDirectives = {};\n angular.forEach(WIDGET_TEMPLATE_OPTIONS, function (templates, widget) {\n angular.forEach(templates, function (template) {\n if (!templateDirectives[template]) {\n templateDirectives[template] = [];\n }\n templateDirectives[template].push('?^^kendo' + widget);\n });\n });\n angular.forEach(templateDirectives, function (parents, directive) {\n var templateName = 'k' + directive;\n var attrName = kendo.toHyphens(templateName);\n module.directive(templateName, function () {\n return {\n restrict: 'A',\n require: parents,\n terminal: true,\n compile: function ($element, $attrs) {\n if ($attrs[templateName] !== '') {\n return;\n }\n $element.removeAttr(attrName);\n var template = $element[0].outerHTML;\n return function (scope, element, attrs, controllers) {\n var controller;\n while (!controller && controllers.length) {\n controller = controllers.shift();\n }\n if (!controller) {\n $log.warn(attrName + ' without a matching parent widget found. It can be one of the following: ' + parents.join(', '));\n } else {\n controller.template(templateName, template);\n element.remove();\n }\n };\n }\n };\n });\n });\n }());\n }(window.kendo.jQuery, window.angular));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dataviz', [\n 'kendo.core',\n 'kendo.fx',\n 'kendo.router',\n 'kendo.view',\n 'kendo.data.odata',\n 'kendo.data.xml',\n 'kendo.data',\n 'kendo.data.signalr',\n 'kendo.binder',\n 'kendo.userevents',\n 'kendo.draganddrop',\n 'kendo.mobile.scroller',\n 'kendo.popup',\n 'kendo.tooltip',\n 'kendo.drawing',\n 'kendo.dataviz.core',\n 'kendo.dataviz.themes',\n 'kendo.dataviz.chart',\n 'kendo.dataviz.gauge',\n 'kendo.dataviz.barcode',\n 'kendo.dataviz.qrcode',\n 'kendo.dataviz.stock',\n 'kendo.dataviz.sparkline',\n 'kendo.dataviz.map',\n 'kendo.dataviz.diagram',\n 'kendo.dataviz.treemap',\n 'kendo.angular'\n ], f);\n}(function () {\n 'bundle all';\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}