{"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","unique","taskKeys","retainPosition","restore","run","jdx","childrenLength","effectName","deferred","Deferred","done","setReverse","addRestoreProperties","reset","setup","resolve","restoreCallback","effectSet","parsedEffects","useTransition","show","multiple","single","isFixed","originalPosition","dX","dY","currentValue","marginLeft","marginTop","_additionalEffects","play","additional","_duration","compositeRun","_complete","divisor","tmp","previous","previousDivisor","slideIn","margin","origin","setLength","oldLength","realLength","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","back","temp","reverseDirection","faceClone","backClone","staticPage","turningPage","transformStyle","_before","_after","transitionClass","_previous","_transitionClass","beforeTransition","afterTransition","_both","_element","_containerClass","containerClass","completeProxy","isAbsolute","originalOverflow","both","_tickProxy","_tick","_started","tick","onEnd","onCancel","timePassed","startDate","moveTo","movable","initial","_easeProxy","moveAxis","easeOutExpo","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","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","_isNavigatable","cellIndex","isDisabled","focusedDate","_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","AUTOCOMPLETEVALUE","addIdAttribute","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","_refreshScroll","enableYScroll","_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","uiSelectedIndices","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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ASm4H,MACL,KAAUh2H,OAAM,6DAEpB,QAAS6b,IAAIrT,EAAG8hB,GACZ,MAAOl1B,MAAKymB,IAAIrT,GAAKpT,KAAKymB,IAAIyO,GA0iBlC,QAAS8rG,IAAgB/8H,EAAGC,GACxB,MAAO,KAAMlE,KAAKC,IAAID,KAAKC,IAAIgE,EAAIC,GAAK,KAsQ5C,QAASsyF,IAAWx3F,GAChB,MAAOA,IAAS,KAAS,EA77LhC,GAEOwkB,IACA29D,GACAypB,GACAtN,GACA1lG,GACAugH,GACAvf,GACAsY,GACA+vB,GACA/rB,GACA3xF,GACAvnB,GACAsB,GACA4jI,GACAC,GACAC,GACAC,GACAtpD,GACAF,GACAypD,GACAvJ,GACAwJ,GACAC,GACA/rB,GACAgsB,GACAlJ,GACAmJ,GACAp9G,GACAq9G,GACA9iG,GACA+iG,GACAC,GACA39G,GACAy3F,GACAwc,GACAt7F,GACAilG,GACAC,GACAC,GACAhlI,GACAilI,GACA79G,GACAwgD,GACAhjE,GACAk2E,GACAoqD,GACAxpE,GACAypE,GACArjG,GACAsjG,GACA/uH,GACAgvH,GAmDAxL,GAuCAU,GAwCA+K,GAWA70H,GACA80H,GAaAC,GACAC,GAwCAC,GAkCAC,GACAC,GASAC,GAKAjL,GAOAkL,GAuCAC,GAoBAC,GACAC,GAyDA52C,GACAtlD,GACAqqD,GACA9B,GACAG,GACA7O,GACArM,GACAkc,GACAD,GACAj/D,GACAo/D,GACAjD,GACAsD,GACAx/E,GACAogF,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,GACA19F,GACAy8F,G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QAAS,WACLrlH,KAAK+sM,WAAW/sM,KAAK+yM,OAEzBhE,YAAa,WACT,GAAIznM,GAAOtH,IACXsH,GAAKmzH,SAAWnzH,EAAK1O,OAAS0O,EAAK+0H,WAAa/0H,EAAK4iM,kBAEzD6C,WAAY,SAAUt8J,GAAV,GACuD7yC,GACtD9C,EADLwM,EAAOtH,KAAMgO,EAAU1G,GAAAA,EAAK2jM,aAAax6J,EAC7C,KAAS31C,EAAI,EAAGA,EAAIkT,EAAQzW,OAAQuD,IAChC8C,EAAQoV,SAAShF,EAAQhX,OAAO8D,GAAI,IACpCwM,EAAK0G,QAAQxF,KAAK5K,GAClB0J,EAAK+0H,YAAcz+H,CAEvB0J,GAAKurM,UAAYpiK,EAAOnpC,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,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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.619'.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($('<div/>').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 = '<tr><td></td></tr>';\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, quoteRegExp = /\"/g, aposRegExp = /'/g, gtRegExp = />/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('<div class=\\'{0}\\'><span class=\\'k-loading-text\\'>{1}</span><div class=\\'k-loading-image\\'/><div class=\\'k-loading-color\\'/></div>', 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 = $('<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 $('<input>').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 if ($.hasOwnProperty('uniqueSort')) {\n element.data('keys', $.uniqueSort(oldKeys)).height();\n } else {\n element.data('keys', $.unique(oldKeys)).height();\n }\n element.css(TRANSITION, options.exclusive + ' ' + options.duration + 'ms ' + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n stopQueue: function (element, clearQueue, gotoEnd) {\n var cssValues, taskKeys = element.data('keys'), retainPosition = !gotoEnd && taskKeys, completeCallback = element.data(COMPLETE_CALLBACK);\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n if (completeCallback) {\n completeCallback();\n }\n if (retainPosition) {\n element.css(cssValues);\n }\n return element.removeData('keys').stop(clearQueue);\n }\n });\n }\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == 'scale' ? 1 : 0;\n }\n var match = transform.match(new RegExp(property + '\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)')), computed = 0;\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [\n 0,\n 0,\n 0,\n 0,\n 0\n ];\n property = property.toLowerCase();\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == 'translatey') {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == 'scale') {\n computed = parseFloat(match[2]);\n } else if (property == 'rotate') {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n var EffectSet = kendo.Class.extend({\n init: function (element, options) {\n var that = this;\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n run: function (effects) {\n var that = this, effect, idx, jdx, length = effects.length, element = that.element, options = that.options, deferred = $.Deferred(), start = {}, end = {}, target, children, childrenLength;\n that.effects = effects;\n deferred.done($.proxy(that, 'complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n effect = effects[idx];\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n that.addRestoreProperties(effect.restore);\n effect.prepare(start, end);\n children = effect.children();\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx++) {\n children[jdx].duration(options.duration).run();\n }\n }\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms && !options.reset) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n for (idx = 0; idx < length; idx++) {\n effects[idx].setup();\n }\n if (options.init) {\n options.init();\n }\n element.data('targetTransform', end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n return deferred.promise();\n },\n stop: function () {\n $(this.element).kendoStop(true, true);\n },\n addRestoreProperties: function (restore) {\n var element = this.element, value, i = 0, length = restore.length;\n for (; i < length; i++) {\n value = restore[i];\n this.restore.push(value);\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n complete: function () {\n var that = this, idx = 0, element = that.element, options = that.options, effects = that.effects, length = effects.length;\n element.removeData('animating').dequeue();\n if (options.hide) {\n element.data('olddisplay', element.css('display')).hide();\n }\n this.restoreCallback();\n if (hasZoom && !transforms) {\n setTimeout($.proxy(this, 'restoreCallback'), 0);\n }\n for (; idx < length; idx++) {\n effects[idx].teardown();\n }\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n fx.promise = function (element, options) {\n var effects = [], effectClass, effectSet = new EffectSet(element, options), parsedEffects = kendo.parseEffects(options.effects), effect;\n options.effects = parsedEffects;\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n if (effects[0]) {\n effectSet.run(effects);\n } else {\n if (!element.is(':visible')) {\n element.css({ display: element.data('olddisplay') || 'block' }).css('display');\n }\n if (options.init) {\n options.init();\n }\n element.dequeue();\n effectSet.complete();\n }\n };\n extend(fx, {\n animate: function (elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n if (transitions && 'transition' in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n } else {\n elements.each(function () {\n var element = $(this), multiple = {};\n each(transformProps, function (idx, value) {\n var params, currentValue = properties ? properties[value] + ' ' : null;\n if (currentValue) {\n var single = properties;\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION), isFixed = position == 'absolute' || position == 'fixed';\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'top') || 0,\n left: parseCSS(element, 'left') || 0,\n bottom: parseCSS(element, 'bottom'),\n right: parseCSS(element, 'right')\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, 'marginTop') || 0,\n left: parseCSS(element, 'marginLeft') || 0\n });\n }\n }\n var originalPosition = element.data(TRANSLATE);\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n var dX = value == TRANSLATE + 'y' ? +null : +params[1], dY = value == TRANSLATE + 'y' ? +params[1] : +params[2];\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) {\n extend(single, { right: originalPosition.right - dX });\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { left: originalPosition.left + dX });\n }\n }\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) {\n extend(single, { bottom: originalPosition.bottom - dY });\n }\n } else {\n if (!isNaN(dY)) {\n extend(single, { top: originalPosition.top + dY });\n }\n }\n } else {\n if (!isNaN(dX)) {\n extend(single, { marginLeft: originalPosition.left + dX });\n }\n if (!isNaN(dY)) {\n extend(single, { marginTop: originalPosition.top + dY });\n }\n }\n }\n }\n }\n if (!transforms && value != 'scale' && value in single) {\n delete single[value];\n }\n if (single) {\n extend(multiple, single);\n }\n }\n });\n if (browser.msie) {\n delete multiple.scale;\n }\n element.animate(multiple, {\n queue: false,\n show: false,\n hide: false,\n duration: options.duration,\n complete: options.complete\n });\n });\n }\n }\n }\n });\n fx.animatedPromise = fx.promise;\n var Effect = kendo.Class.extend({\n init: function (element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n if (!that.restore) {\n that.restore = [];\n }\n },\n reverse: function () {\n this._reverse = true;\n return this.run();\n },\n play: function () {\n this._reverse = false;\n return this.run();\n },\n add: function (additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n direction: function (value) {\n this._direction = value;\n return this;\n },\n duration: function (duration) {\n this._duration = duration;\n return this;\n },\n compositeRun: function () {\n var that = this, effectSet = new EffectSet(that.element, {\n reverse: that._reverse,\n duration: that._duration\n }), effects = that._additionalEffects.concat([that]);\n return effectSet.run(effects);\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, idx = 0, restore = that.restore, length = restore.length, value, deferred = $.Deferred(), start = {}, end = {}, target, children = that.children(), childrenLength = children.length;\n deferred.done($.proxy(that, '_complete'));\n element.data('animating', true);\n for (idx = 0; idx < length; idx++) {\n value = restore[idx];\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].duration(that._duration).run();\n }\n that.prepare(start, end);\n if (!element.is(':visible')) {\n extend(start, { display: element.data('olddisplay') || 'block' });\n }\n if (transforms) {\n target = element.data('targetTransform');\n if (target) {\n start = extend(target, start);\n }\n }\n start = normalizeCSS(element, start);\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n element.css(start).css(TRANSFORM);\n that.setup();\n element.data('targetTransform', end);\n fx.animate(element, end, {\n duration: that._duration,\n complete: deferred.resolve\n });\n return deferred.promise();\n },\n stop: function () {\n var idx = 0, children = this.children(), childrenLength = children.length;\n for (idx = 0; idx < childrenLength; idx++) {\n children[idx].stop();\n }\n $(this.element).kendoStop(true, true);\n return this;\n },\n restoreCallback: function () {\n var element = this.element;\n for (var i = 0, length = this.restore.length; i < length; i++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n _complete: function () {\n var that = this, element = that.element;\n element.removeData('animating').dequeue();\n that.restoreCallback();\n if (that.shouldHide()) {\n element.data('olddisplay', element.css('display')).hide();\n }\n if (hasZoom && !transforms) {\n setTimeout($.proxy(that, 'restoreCallback'), 0);\n }\n that.teardown();\n },\n setOptions: function (options) {\n extend(true, this.options, options);\n },\n children: function () {\n return [];\n },\n shouldHide: $.noop,\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n setReverse: function (reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition), directions = effectClass.prototype.directions;\n fx[capitalize(name)] = effectClass;\n fx.Element.prototype[name] = function (direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n each(directions, function (idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function (opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n var FOUR_DIRECTIONS = [\n 'left',\n 'right',\n 'up',\n 'down'\n ], IN_OUT = [\n 'in',\n 'out'\n ];\n createEffect('slideIn', {\n directions: FOUR_DIRECTIONS,\n divisor: function (value) {\n this.options.divisor = value;\n return this;\n },\n prepare: function (start, end) {\n var that = this, tmp, element = that.element, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, direction = directions[that._direction], offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)), startValue = offset / (that.options && that.options.divisor || 1) + PX, endValue = '0px';\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n createEffect('tile', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n previousDivisor: function (value) {\n this.options.previousDivisor = value;\n return this;\n },\n children: function () {\n var that = this, reverse = that._reverse, previous = that.options.previous, divisor = that.options.previousDivisor || 1, dir = that._direction;\n var children = [kendo.fx(that.element).slideIn(dir).setReverse(reverse)];\n if (previous) {\n children.push(kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse));\n }\n return children;\n }\n });\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n startValue: function (value) {\n this._startValue = value;\n return this;\n },\n endValue: function (value) {\n this._endValue = value;\n return this;\n },\n shouldHide: function () {\n return this._shouldHide;\n },\n prepare: function (start, end) {\n var that = this, startValue, endValue, out = this._direction === 'out', startDataValue = that.element.data(property), startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== 'undefined') {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n if (typeof this._endValue !== 'undefined') {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n createToggleEffect('fade', 'opacity', 1, 0);\n createToggleEffect('zoom', 'scale', 1, 0.01);\n createEffect('slideMargin', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, origin = element.data(ORIGIN), offset = options.offset, margin, reverse = that._reverse;\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css('margin-' + options.axis)));\n }\n margin = element.data(ORIGIN) || 0;\n end['margin-' + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n createEffect('slideTo', {\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, offset = options.offset.split(','), reverse = that._reverse;\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css('left');\n }\n });\n createEffect('expand', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n restore: [OVERFLOW],\n prepare: function (start, end) {\n var that = this, element = that.element, options = that.options, reverse = that._reverse, property = that._direction === 'vertical' ? HEIGHT : WIDTH, setLength = element[0].style[property], oldLength = element.data(property), length = parseFloat(oldLength || setLength), realLength = round(element.css(property, AUTO)[property]());\n start.overflow = HIDDEN;\n length = options && options.reset ? realLength || length : length || realLength;\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n shouldHide: function () {\n return this._reverse;\n },\n teardown: function () {\n var that = this, element = that.element, property = that._direction === 'vertical' ? HEIGHT : WIDTH, length = element.data(property);\n if (length == AUTO || length === BLANK) {\n setTimeout(function () {\n element.css(property, AUTO).css(property);\n }, 0);\n }\n }\n });\n var TRANSFER_START_STATE = {\n position: 'absolute',\n marginLeft: 0,\n marginTop: 0,\n scale: 1\n };\n createEffect('transfer', {\n init: function (element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n setup: function () {\n this.element.appendTo(document.body);\n },\n prepare: function (start, end) {\n var that = this, element = that.element, outerBox = fx.box(element), innerBox = fx.box(that.options.target), currentScale = animationProperty(element, 'scale'), scale = fx.fillScale(innerBox, outerBox), transformOrigin = fx.transformOrigin(innerBox, outerBox);\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n element.css(TRANSFORM, 'scale(1)').css(TRANSFORM);\n element.css(TRANSFORM, 'scale(' + currentScale + ')');\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + ' ' + transformOrigin.y + PX;\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n var CLIPS = {\n top: 'rect(auto auto $size auto)',\n bottom: 'rect($size auto auto auto)',\n left: 'rect(auto $size auto auto)',\n right: 'rect(auto auto auto $size)'\n };\n var ROTATIONS = {\n top: {\n start: 'rotatex(0deg)',\n end: 'rotatex(180deg)'\n },\n bottom: {\n start: 'rotatex(-180deg)',\n end: 'rotatex(0deg)'\n },\n left: {\n start: 'rotatey(0deg)',\n end: 'rotatey(-180deg)'\n },\n right: {\n start: 'rotatey(180deg)',\n end: 'rotatey(0deg)'\n }\n };\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical, size = container[vertical ? HEIGHT : WIDTH]() / 2 + 'px';\n return CLIPS[direction].replace('$size', size);\n }\n createEffect('turningPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n prepare: function (start, end) {\n var that = this, reverse = that._reverse, direction = reverse ? directions[that._direction].reverse : that._direction, rotation = ROTATIONS[direction];\n start.zIndex = 1;\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n start[BACKFACE] = HIDDEN;\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n setup: function () {\n this._container.append(this.element);\n },\n face: function (value) {\n this._face = value;\n return this;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n clipInHalf: function (value) {\n this._clipInHalf = value;\n return this;\n },\n temporary: function () {\n this.element.addClass('temp-page');\n return this;\n }\n });\n createEffect('staticPage', {\n directions: FOUR_DIRECTIONS,\n init: function (element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n restore: ['clip'],\n prepare: function (start, end) {\n var that = this, direction = that._reverse ? directions[that._direction].reverse : that._direction;\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n shouldHide: function () {\n var that = this, reverse = that._reverse, face = that._face;\n return reverse && !face || !reverse && face;\n },\n face: function (value) {\n this._face = value;\n return this;\n }\n });\n createEffect('pageturn', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, faceClone = options.face.clone(true).removeAttr('id'), backClone = options.back.clone(true).removeAttr('id'), element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n prepare: function (start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n start.opacity = 0.999;\n end.opacity = 1;\n },\n teardown: function () {\n this.element.find('.temp-page').remove();\n }\n });\n createEffect('flip', {\n directions: [\n 'horizontal',\n 'vertical'\n ],\n init: function (element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n children: function () {\n var that = this, options = that.options, direction = that._direction === 'horizontal' ? 'left' : 'top', reverseDirection = kendo.directions[direction].reverse, reverse = that._reverse, temp, element = that.element;\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n prepare: function (start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = 'preserve-3d';\n }\n });\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = '.km-touch-scrollbar, .km-actionsheet-wrapper';\n createEffect('replace', {\n _before: $.noop,\n _after: $.noop,\n init: function (element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n duration: function () {\n throw new Error('The replace effect does not support duration setting; the effect duration may be customized through the transition class rule');\n },\n beforeTransition: function (callback) {\n this._before = callback;\n return this;\n },\n afterTransition: function (callback) {\n this._after = callback;\n return this;\n },\n _both: function () {\n return $().add(this._element).add(this._previous);\n },\n _containerClass: function () {\n var direction = this._direction, containerClass = 'k-fx k-fx-start k-fx-' + this._transitionClass;\n if (direction) {\n containerClass += ' k-fx-' + direction;\n }\n if (this._reverse) {\n containerClass += ' k-fx-reverse';\n }\n return containerClass;\n },\n complete: function (e) {\n if (!this.deferred || e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR)) {\n return;\n }\n var container = this.container;\n container.removeClass('k-fx-end').removeClass(this._containerClass()).off(transitions.event, this.completeProxy);\n this._previous.hide().removeClass('k-fx-current');\n this.element.removeClass('k-fx-next');\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, '');\n }\n if (!this.isAbsolute) {\n this._both().css(POSITION, '');\n }\n this.deferred.resolve();\n delete this.deferred;\n },\n run: function () {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n var that = this, element = that.element, previous = that._previous, container = element.parents().filter(previous.parents()).first(), both = that._both(), deferred = $.Deferred(), originalPosition = element.css(POSITION), originalOverflow;\n if (!container.length) {\n container = element.parent();\n }\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == 'absolute';\n if (!this.isAbsolute) {\n both.css(POSITION, 'absolute');\n }\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, 'hidden');\n }\n if (!transitions) {\n this.complete();\n } else {\n element.addClass('k-fx-hidden');\n container.addClass(this._containerClass());\n this.completeProxy = $.proxy(this, 'complete');\n container.on(transitions.event, this.completeProxy);\n kendo.animationFrame(function () {\n element.removeClass('k-fx-hidden').addClass('k-fx-next');\n previous.css('display', '').addClass('k-fx-current');\n that._before(previous, element);\n kendo.animationFrame(function () {\n container.removeClass('k-fx-start').addClass('k-fx-end');\n that._after(previous, element);\n });\n });\n }\n return deferred.promise();\n },\n stop: function () {\n this.complete();\n }\n });\n var Animation = kendo.Class.extend({\n init: function () {\n var that = this;\n that._tickProxy = proxy(that._tick, that);\n that._started = false;\n },\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n start: function () {\n if (!this.enabled()) {\n return;\n }\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n enabled: function () {\n return true;\n },\n cancel: function () {\n this._started = false;\n this.onCancel();\n },\n _tick: function () {\n var that = this;\n if (!that._started) {\n return;\n }\n that.tick();\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n var Transition = Animation.extend({\n init: function (options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n done: function () {\n return this.timePassed() >= this.duration;\n },\n timePassed: function () {\n return Math.min(this.duration, new Date() - this.startDate);\n },\n moveTo: function (options) {\n var that = this, movable = that.movable;\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n that.duration = typeof options.duration == 'number' ? options.duration : 300;\n that.tick = that._easeProxy(options.ease);\n that.startDate = new Date();\n that.start();\n },\n _easeProxy: function (ease) {\n var that = this;\n return function () {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n extend(Transition, {\n easeOutExpo: function (t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n easeOutBack: function (t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n fx.box = function (element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n fx.transformOrigin = function (inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width), y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n fx.fillScale = function (inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n fx.fitScale = function (inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.router', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'router',\n name: 'Router',\n category: 'framework',\n description: 'The Router class is responsible for tracking the application state and navigating between the application states.',\n depends: ['core'],\n hidden: false\n };\n (function ($, undefined) {\n var kendo = window.kendo, CHANGE = 'change', BACK = 'back', SAME = 'same', support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document;\n function absoluteURL(path, pathPrefix) {\n if (!pathPrefix) {\n return path;\n }\n if (path + '/' === pathPrefix) {\n path = pathPrefix;\n }\n var regEx = new RegExp('^' + pathPrefix, 'i');\n if (!regEx.test(path)) {\n path = pathPrefix + '/' + path;\n }\n return location.protocol + '//' + (location.host + '/' + path).replace(/\\/\\/+/g, '/');\n }\n function hashDelimiter(bang) {\n return bang ? '#!' : '#';\n }\n function locationHash(hashDelimiter) {\n var href = location.href;\n if (hashDelimiter === '#!' && href.indexOf('#') > -1 && href.indexOf('#!') < 0) {\n return null;\n }\n return href.split(hashDelimiter)[1] || '';\n }\n function stripRoot(root, url) {\n if (url.indexOf(root) === 0) {\n return url.substr(root.length).replace(/\\/\\//g, '/');\n } else {\n return url;\n }\n }\n var HistoryAdapter = kendo.Class.extend({\n back: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.back();\n });\n } else {\n history.back();\n }\n },\n forward: function () {\n if (BROKEN_BACK_NAV) {\n setTimeout(function () {\n history.forward();\n });\n } else {\n history.forward();\n }\n },\n length: function () {\n return history.length;\n },\n replaceLocation: function (url) {\n location.replace(url);\n }\n });\n var PushStateAdapter = HistoryAdapter.extend({\n init: function (root) {\n this.root = root;\n },\n navigate: function (to) {\n history.pushState({}, document.title, absoluteURL(to, this.root));\n },\n replace: function (to) {\n history.replaceState({}, document.title, absoluteURL(to, this.root));\n },\n normalize: function (url) {\n return stripRoot(this.root, url);\n },\n current: function () {\n var current = location.pathname;\n if (location.search) {\n current += location.search;\n }\n return stripRoot(this.root, current);\n },\n change: function (callback) {\n $(window).bind('popstate.kendo', callback);\n },\n stop: function () {\n $(window).unbind('popstate.kendo');\n },\n normalizeCurrent: function (options) {\n var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang));\n if (root === pathname + '/') {\n fixedUrl = root;\n }\n if (root === pathname && hash) {\n fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root);\n }\n if (fixedUrl) {\n history.pushState({}, document.title, fixedUrl);\n }\n }\n });\n function fixHash(url) {\n return url.replace(/^(#)?/, '#');\n }\n function fixBang(url) {\n return url.replace(/^(#(!)?)?/, '#!');\n }\n var HashAdapter = HistoryAdapter.extend({\n init: function (bang) {\n this._id = kendo.guid();\n this.prefix = hashDelimiter(bang);\n this.fix = bang ? fixBang : fixHash;\n },\n navigate: function (to) {\n location.hash = this.fix(to);\n },\n replace: function (to) {\n this.replaceLocation(this.fix(to));\n },\n normalize: function (url) {\n if (url.indexOf(this.prefix) < 0) {\n return url;\n } else {\n return url.split(this.prefix)[1];\n }\n },\n change: function (callback) {\n if (support.hashChange) {\n $(window).on('hashchange.' + this._id, callback);\n } else {\n this._interval = setInterval(callback, CHECK_URL_INTERVAL);\n }\n },\n stop: function () {\n $(window).off('hashchange.' + this._id);\n clearInterval(this._interval);\n },\n current: function () {\n return locationHash(this.prefix);\n },\n normalizeCurrent: function (options) {\n var pathname = location.pathname, root = options.root;\n if (options.pushState && root !== pathname) {\n this.replaceLocation(root + this.prefix + stripRoot(root, pathname));\n return true;\n }\n return false;\n }\n });\n var History = kendo.Observable.extend({\n start: function (options) {\n options = options || {};\n this.bind([\n CHANGE,\n BACK,\n SAME\n ], options);\n if (this._started) {\n return;\n }\n this._started = true;\n options.root = options.root || '/';\n var adapter = this.createAdapter(options), current;\n if (adapter.normalizeCurrent(options)) {\n return;\n }\n current = adapter.current();\n $.extend(this, {\n adapter: adapter,\n root: options.root,\n historyLength: adapter.length(),\n current: current,\n locations: [current]\n });\n adapter.change($.proxy(this, '_checkUrl'));\n },\n createAdapter: function (options) {\n return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang);\n },\n stop: function () {\n if (!this._started) {\n return;\n }\n this.adapter.stop();\n this.unbind(CHANGE);\n this._started = false;\n },\n change: function (callback) {\n this.bind(CHANGE, callback);\n },\n replace: function (to, silent) {\n this._navigate(to, silent, function (adapter) {\n adapter.replace(to);\n this.locations[this.locations.length - 1] = this.current;\n });\n },\n navigate: function (to, silent) {\n if (to === '#:back') {\n this.backCalled = true;\n this.adapter.back();\n return;\n }\n this._navigate(to, silent, function (adapter) {\n adapter.navigate(to);\n this.locations.push(this.current);\n });\n },\n _navigate: function (to, silent, callback) {\n var adapter = this.adapter;\n to = adapter.normalize(to);\n if (this.current === to || this.current === decodeURIComponent(to)) {\n this.trigger(SAME);\n return;\n }\n if (!silent) {\n if (this.trigger(CHANGE, {\n url: to,\n decode: false\n })) {\n return;\n }\n }\n this.current = to;\n callback.call(this, adapter);\n this.historyLength = adapter.length();\n },\n _checkUrl: function () {\n var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current;\n if (current === null || this.current === current || this.current === decodeURIComponent(current)) {\n return true;\n }\n this.historyLength = newLength;\n this.backCalled = false;\n this.current = current;\n if (back && this.trigger('back', {\n url: prev,\n to: current\n })) {\n adapter.forward();\n this.current = prev;\n return;\n }\n if (this.trigger(CHANGE, {\n url: current,\n backButtonPressed: !backCalled\n })) {\n if (back) {\n adapter.forward();\n } else {\n adapter.back();\n this.historyLength--;\n }\n this.current = prev;\n return;\n }\n if (back) {\n this.locations.pop();\n } else {\n this.locations.push(current);\n }\n }\n });\n kendo.History = History;\n kendo.History.HistoryAdapter = HistoryAdapter;\n kendo.History.HashAdapter = HashAdapter;\n kendo.History.PushStateAdapter = PushStateAdapter;\n kendo.absoluteURL = absoluteURL;\n kendo.history = new History();\n }(window.kendo.jQuery));\n (function () {\n var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = 'init', ROUTE_MISSING = 'routeMissing', CHANGE = 'change', BACK = 'back', SAME = 'same', optionalParam = /\\((.*?)\\)/g, namedParam = /(\\(\\?)?:\\w+/g, splatParam = /\\*\\w+/g, escapeRegExp = /[\\-{}\\[\\]+?.,\\\\\\^$|#\\s]/g;\n function namedParamReplace(match, optional) {\n return optional ? match : '([^/]+)';\n }\n function routeToRegExp(route, ignoreCase) {\n return new RegExp('^' + route.replace(escapeRegExp, '\\\\$&').replace(optionalParam, '(?:$1)?').replace(namedParam, namedParamReplace).replace(splatParam, '(.*?)') + '$', ignoreCase ? 'i' : '');\n }\n function stripUrl(url) {\n return url.replace(/(\\?.*)|(#.*)/g, '');\n }\n var Route = kendo.Class.extend({\n init: function (route, callback, ignoreCase) {\n if (!(route instanceof RegExp)) {\n route = routeToRegExp(route, ignoreCase);\n }\n this.route = route;\n this._callback = callback;\n },\n callback: function (url, back, decode) {\n var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url);\n queryStringParams._back = back;\n url = stripUrl(url);\n params = this.route.exec(url).slice(1);\n length = params.length;\n if (decode) {\n for (; idx < length; idx++) {\n if (typeof params[idx] !== 'undefined') {\n params[idx] = decodeURIComponent(params[idx]);\n }\n }\n }\n params.push(queryStringParams);\n this._callback.apply(null, params);\n },\n worksWith: function (url, back, decode) {\n if (this.route.test(stripUrl(url))) {\n this.callback(url, back, decode);\n return true;\n } else {\n return false;\n }\n }\n });\n var Router = Observable.extend({\n init: function (options) {\n if (!options) {\n options = {};\n }\n Observable.fn.init.call(this);\n this.routes = [];\n this.pushState = options.pushState;\n this.hashBang = options.hashBang;\n this.root = options.root;\n this.ignoreCase = options.ignoreCase !== false;\n this.bind([\n INIT,\n ROUTE_MISSING,\n CHANGE,\n SAME,\n BACK\n ], options);\n },\n destroy: function () {\n history.unbind(CHANGE, this._urlChangedProxy);\n history.unbind(SAME, this._sameProxy);\n history.unbind(BACK, this._backProxy);\n this.unbind();\n },\n start: function () {\n var that = this, sameProxy = function () {\n that._same();\n }, backProxy = function (e) {\n that._back(e);\n }, urlChangedProxy = function (e) {\n that._urlChanged(e);\n };\n history.start({\n same: sameProxy,\n change: urlChangedProxy,\n back: backProxy,\n pushState: that.pushState,\n hashBang: that.hashBang,\n root: that.root\n });\n var initEventObject = {\n url: history.current || '/',\n preventDefault: $.noop\n };\n if (!that.trigger(INIT, initEventObject)) {\n that._urlChanged(initEventObject);\n }\n this._urlChangedProxy = urlChangedProxy;\n this._backProxy = backProxy;\n },\n route: function (route, callback) {\n this.routes.push(new Route(route, callback, this.ignoreCase));\n },\n navigate: function (url, silent) {\n kendo.history.navigate(url, silent);\n },\n replace: function (url, silent) {\n kendo.history.replace(url, silent);\n },\n _back: function (e) {\n if (this.trigger(BACK, {\n url: e.url,\n to: e.to\n })) {\n e.preventDefault();\n }\n },\n _same: function () {\n this.trigger(SAME);\n },\n _urlChanged: function (e) {\n var url = e.url;\n var decode = !!e.decode;\n var back = e.backButtonPressed;\n if (!url) {\n url = '/';\n }\n if (this.trigger(CHANGE, {\n url: e.url,\n params: kendo.parseQueryStringParams(e.url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n return;\n }\n var idx = 0, routes = this.routes, route, length = routes.length;\n for (; idx < length; idx++) {\n route = routes[idx];\n if (route.worksWith(url, back, decode)) {\n return;\n }\n }\n if (this.trigger(ROUTE_MISSING, {\n url: url,\n params: kendo.parseQueryStringParams(url),\n backButtonPressed: back\n })) {\n e.preventDefault();\n }\n }\n });\n kendo.Router = Router;\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.odata', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.odata',\n name: 'OData',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, extend = $.extend, NEWLINE = '\\r\\n', DOUBLELINE = '\\r\\n\\r\\n', isFunction = kendo.isFunction, odataFilters = {\n eq: 'eq',\n neq: 'ne',\n gt: 'gt',\n gte: 'ge',\n lt: 'lt',\n lte: 'le',\n contains: 'substringof',\n doesnotcontain: 'substringof',\n endswith: 'endswith',\n startswith: 'startswith',\n isnull: 'eq',\n isnotnull: 'ne',\n isnullorempty: 'eq',\n isnotnullorempty: 'ne',\n isempty: 'eq',\n isnotempty: 'ne'\n }, odataFiltersVersionFour = extend({}, odataFilters, { contains: 'contains' }), mappers = {\n pageSize: $.noop,\n page: $.noop,\n filter: function (params, filter, useVersionFour) {\n if (filter) {\n filter = toOdataFilter(filter, useVersionFour);\n if (filter) {\n params.$filter = filter;\n }\n }\n },\n sort: function (params, orderby) {\n var expr = $.map(orderby, function (value) {\n var order = value.field.replace(/\\./g, '/');\n if (value.dir === 'desc') {\n order += ' desc';\n }\n return order;\n }).join(',');\n if (expr) {\n params.$orderby = expr;\n }\n },\n skip: function (params, skip) {\n if (skip) {\n params.$skip = skip;\n }\n },\n take: function (params, take) {\n if (take) {\n params.$top = take;\n }\n }\n }, defaultDataType = { read: { dataType: 'jsonp' } };\n function toOdataFilter(filter, useOdataFour) {\n var result = [], logic = filter.logic || 'and', idx, length, field, type, format, operator, value, ignoreCase, filters = filter.filters;\n for (idx = 0, length = filters.length; idx < length; idx++) {\n filter = filters[idx];\n field = filter.field;\n value = filter.value;\n operator = filter.operator;\n if (filter.filters) {\n filter = toOdataFilter(filter, useOdataFour);\n } else {\n ignoreCase = filter.ignoreCase;\n field = field.replace(/\\./g, '/');\n filter = odataFilters[operator];\n if (useOdataFour) {\n filter = odataFiltersVersionFour[operator];\n }\n if (operator === 'isnullorempty') {\n filter = kendo.format('{0} {1} null or {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnotnullorempty') {\n filter = kendo.format('{0} {1} null and {0} {1} \\'\\'', field, filter);\n } else if (operator === 'isnull' || operator === 'isnotnull') {\n filter = kendo.format('{0} {1} null', field, filter);\n } else if (operator === 'isempty' || operator === 'isnotempty') {\n filter = kendo.format('{0} {1} \\'\\'', field, filter);\n } else if (filter && value !== undefined) {\n type = $.type(value);\n if (type === 'string') {\n format = '\\'{1}\\'';\n value = value.replace(/'/g, '\\'\\'');\n if (ignoreCase === true) {\n field = 'tolower(' + field + ')';\n }\n } else if (type === 'date') {\n if (useOdataFour) {\n format = '{1:yyyy-MM-ddTHH:mm:ss+00:00}';\n value = kendo.timezone.apply(value, 'Etc/UTC');\n } else {\n format = 'datetime\\'{1:yyyy-MM-ddTHH:mm:ss}\\'';\n }\n } else {\n format = '{1}';\n }\n if (filter.length > 3) {\n if (filter !== 'substringof') {\n format = '{0}({2},' + format + ')';\n } else {\n format = '{0}(' + format + ',{2})';\n if (operator === 'doesnotcontain') {\n if (useOdataFour) {\n format = '{0}({2},\\'{1}\\') eq -1';\n filter = 'indexof';\n } else {\n format += ' eq false';\n }\n }\n }\n } else {\n format = '{2} {0} ' + format;\n }\n filter = kendo.format(format, filter, value, field);\n }\n }\n result.push(filter);\n }\n filter = result.join(' ' + logic + ' ');\n if (result.length > 1) {\n filter = '(' + filter + ')';\n }\n return filter;\n }\n function stripMetadata(obj) {\n for (var name in obj) {\n if (name.indexOf('@odata') === 0) {\n delete obj[name];\n }\n }\n }\n function hex16() {\n return Math.floor((1 + Math.random()) * 65536).toString(16).substr(1);\n }\n function createBoundary(prefix) {\n return prefix + hex16() + '-' + hex16() + '-' + hex16();\n }\n function createDelimeter(boundary, close) {\n var result = NEWLINE + '--' + boundary;\n if (close) {\n result += '--';\n }\n return result;\n }\n function createCommand(transport, item, httpVerb, command) {\n var transportUrl = transport.options[command].url;\n var commandPrefix = kendo.format('{0} ', httpVerb);\n if (isFunction(transportUrl)) {\n return commandPrefix + transportUrl(item);\n } else {\n return commandPrefix + transportUrl;\n }\n }\n function getOperationHeader(changeset, changeId) {\n var header = '';\n header += createDelimeter(changeset, false);\n header += NEWLINE + 'Content-Type: application/http';\n header += NEWLINE + 'Content-Transfer-Encoding: binary';\n header += NEWLINE + 'Content-ID: ' + changeId;\n return header;\n }\n function getOperationContent(item) {\n var content = '';\n content += NEWLINE + 'Content-Type: application/json;odata=minimalmetadata';\n content += NEWLINE + 'Prefer: return=representation';\n content += DOUBLELINE + kendo.stringify(item);\n return content;\n }\n function getOperations(collection, changeset, changeId, command, transport, skipContent) {\n var requestBody = '';\n for (var i = 0; i < collection.length; i++) {\n requestBody += getOperationHeader(changeset, changeId);\n requestBody += DOUBLELINE + createCommand(transport, collection[i], transport.options[command].type, command) + ' HTTP/1.1';\n if (!skipContent) {\n requestBody += getOperationContent(collection[i]);\n }\n requestBody += NEWLINE;\n changeId++;\n }\n return requestBody;\n }\n function processCollection(colection, boundary, changeset, changeId, transport, command, skipContent) {\n var requestBody = '';\n requestBody += getBoundary(boundary, changeset);\n requestBody += getOperations(colection, changeset, changeId, command, transport, skipContent);\n requestBody += createDelimeter(changeset, true);\n requestBody += NEWLINE;\n return requestBody;\n }\n function getBoundary(boundary, changeset) {\n var requestBody = '';\n requestBody += '--' + boundary + NEWLINE;\n requestBody += 'Content-Type: multipart/mixed; boundary=' + changeset + NEWLINE;\n return requestBody;\n }\n function createBatchRequest(transport, colections) {\n var options = {};\n var boundary = createBoundary('sf_batch_');\n var requestBody = '';\n var changeId = 0;\n var batchURL = transport.options.batch.url;\n var changeset = createBoundary('sf_changeset_');\n options.type = transport.options.batch.type;\n options.url = isFunction(batchURL) ? batchURL() : batchURL;\n options.headers = { 'Content-Type': 'multipart/mixed; boundary=' + boundary };\n if (colections.updated.length) {\n requestBody += processCollection(colections.updated, boundary, changeset, changeId, transport, 'update', false);\n changeId += colections.updated.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.destroyed.length) {\n requestBody += processCollection(colections.destroyed, boundary, changeset, changeId, transport, 'destroy', true);\n changeId += colections.destroyed.length;\n changeset = createBoundary('sf_changeset_');\n }\n if (colections.created.length) {\n requestBody += processCollection(colections.created, boundary, changeset, changeId, transport, 'create', false);\n }\n requestBody += createDelimeter(boundary, true);\n options.data = requestBody;\n return options;\n }\n function parseBatchResponse(responseText) {\n var responseMarkers = responseText.match(/--changesetresponse_[a-z0-9-]+$/gm);\n var markerIndex = 0;\n var collections = [];\n var changeBody;\n var status;\n var code;\n var marker;\n var jsonModel;\n collections.push({\n models: [],\n passed: true\n });\n for (var i = 0; i < responseMarkers.length; i++) {\n marker = responseMarkers[i];\n if (marker.lastIndexOf('--', marker.length - 1)) {\n if (i < responseMarkers.length - 1) {\n collections.push({\n models: [],\n passed: true\n });\n }\n continue;\n }\n if (!markerIndex) {\n markerIndex = responseText.indexOf(marker);\n } else {\n markerIndex = responseText.indexOf(marker, markerIndex + marker.length);\n }\n changeBody = responseText.substring(markerIndex, responseText.indexOf('--', markerIndex + 1));\n status = changeBody.match(/^HTTP\\/1\\.\\d (\\d{3}) (.*)$/gm).pop();\n code = kendo.parseFloat(status.match(/\\d{3}/g).pop());\n if (code >= 200 && code <= 299) {\n jsonModel = changeBody.match(/\\{.*\\}/gm);\n if (jsonModel) {\n collections[collections.length - 1].models.push(JSON.parse(jsonModel[0]));\n }\n } else {\n collections[collections.length - 1].passed = false;\n }\n }\n return collections;\n }\n extend(true, kendo.data, {\n schemas: {\n odata: {\n type: 'json',\n data: function (data) {\n return data.d.results || [data.d];\n },\n total: 'd.__count'\n }\n },\n transports: {\n odata: {\n read: {\n cache: true,\n dataType: 'jsonp',\n jsonp: '$callback'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type, useVersionFour) {\n var params, value, option, dataType;\n options = options || {};\n type = type || 'read';\n dataType = (this.options || defaultDataType)[type];\n dataType = dataType ? dataType.dataType : 'json';\n if (type === 'read') {\n params = { $inlinecount: 'allpages' };\n if (dataType != 'json') {\n params.$format = 'json';\n }\n for (option in options) {\n if (mappers[option]) {\n mappers[option](params, options[option], useVersionFour);\n } else {\n params[option] = options[option];\n }\n }\n } else {\n if (dataType !== 'json') {\n throw new Error('Only json dataType can be used for ' + type + ' operation.');\n }\n if (type !== 'destroy') {\n for (option in options) {\n value = options[option];\n if (typeof value === 'number') {\n options[option] = value + '';\n }\n }\n params = kendo.stringify(options);\n }\n }\n return params;\n }\n }\n }\n });\n extend(true, kendo.data, {\n schemas: {\n 'odata-v4': {\n type: 'json',\n data: function (data) {\n if ($.isArray(data)) {\n for (var i = 0; i < data.length; i++) {\n stripMetadata(data[i]);\n }\n return data;\n } else {\n data = $.extend({}, data);\n stripMetadata(data);\n if (data.value) {\n return data.value;\n }\n return [data];\n }\n },\n total: function (data) {\n return data['@odata.count'];\n }\n }\n },\n transports: {\n 'odata-v4': {\n batch: { type: 'POST' },\n read: {\n cache: true,\n dataType: 'json'\n },\n update: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'PUT'\n },\n create: {\n cache: true,\n dataType: 'json',\n contentType: 'application/json;IEEE754Compatible=true',\n type: 'POST'\n },\n destroy: {\n cache: true,\n dataType: 'json',\n type: 'DELETE'\n },\n parameterMap: function (options, type) {\n var result = kendo.data.transports.odata.parameterMap(options, type, true);\n if (type == 'read') {\n result.$count = true;\n delete result.$inlinecount;\n }\n return result;\n },\n submit: function (e) {\n var that = this;\n var options = createBatchRequest(that, e.data);\n var collections = e.data;\n if (!collections.updated.length && !collections.destroyed.length && !collections.created.length) {\n return;\n }\n $.ajax(extend(true, {}, {\n success: function (response) {\n var responses = parseBatchResponse(response);\n var index = 0;\n var current;\n if (collections.updated.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models.length ? current.models : [], 'update');\n }\n index++;\n }\n if (collections.destroyed.length) {\n current = responses[index];\n if (current.passed) {\n e.success([], 'destroy');\n }\n index++;\n }\n if (collections.created.length) {\n current = responses[index];\n if (current.passed) {\n e.success(current.models, 'create');\n }\n }\n },\n error: function (response, status, error) {\n e.error(response, status, error);\n }\n }, options));\n }\n }\n }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data.xml', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'data.xml',\n name: 'XML',\n category: 'framework',\n depends: ['core'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, isArray = $.isArray, isPlainObject = $.isPlainObject, map = $.map, each = $.each, extend = $.extend, getter = kendo.getter, Class = kendo.Class;\n var XmlDataReader = Class.extend({\n init: function (options) {\n var that = this, total = options.total, model = options.model, parse = options.parse, errors = options.errors, serialize = options.serialize, data = options.data;\n if (model) {\n if (isPlainObject(model)) {\n var base = options.modelBase || kendo.data.Model;\n if (model.fields) {\n each(model.fields, function (field, value) {\n if (isPlainObject(value) && value.field) {\n if (!$.isFunction(value.field)) {\n value = extend(value, { field: that.getter(value.field) });\n }\n } else {\n value = { field: that.getter(value) };\n }\n model.fields[field] = value;\n });\n }\n var id = model.id;\n if (id) {\n var idField = {};\n idField[that.xpathToMember(id, true)] = { field: that.getter(id) };\n model.fields = extend(idField, model.fields);\n model.id = that.xpathToMember(id);\n }\n model = base.define(model);\n }\n that.model = model;\n }\n if (total) {\n if (typeof total == 'string') {\n total = that.getter(total);\n that.total = function (data) {\n return parseInt(total(data), 10);\n };\n } else if (typeof total == 'function') {\n that.total = total;\n }\n }\n if (errors) {\n if (typeof errors == 'string') {\n errors = that.getter(errors);\n that.errors = function (data) {\n return errors(data) || null;\n };\n } else if (typeof errors == 'function') {\n that.errors = errors;\n }\n }\n if (data) {\n if (typeof data == 'string') {\n data = that.xpathToMember(data);\n that.data = function (value) {\n var result = that.evaluate(value, data), modelInstance;\n result = isArray(result) ? result : [result];\n if (that.model && model.fields) {\n modelInstance = new that.model();\n return map(result, function (value) {\n if (value) {\n var record = {}, field;\n for (field in model.fields) {\n record[field] = modelInstance._parse(field, model.fields[field].field(value));\n }\n return record;\n }\n });\n }\n return result;\n };\n } else if (typeof data == 'function') {\n that.data = data;\n }\n }\n if (typeof parse == 'function') {\n var xmlParse = that.parse;\n that.parse = function (data) {\n var xml = parse.call(that, data);\n return xmlParse.call(that, xml);\n };\n }\n if (typeof serialize == 'function') {\n that.serialize = serialize;\n }\n },\n total: function (result) {\n return this.data(result).length;\n },\n errors: function (data) {\n return data ? data.errors : null;\n },\n serialize: function (data) {\n return data;\n },\n parseDOM: function (element) {\n var result = {}, parsedNode, node, nodeType, nodeName, member, attribute, attributes = element.attributes, attributeCount = attributes.length, idx;\n for (idx = 0; idx < attributeCount; idx++) {\n attribute = attributes[idx];\n result['@' + attribute.nodeName] = attribute.nodeValue;\n }\n for (node = element.firstChild; node; node = node.nextSibling) {\n nodeType = node.nodeType;\n if (nodeType === 3 || nodeType === 4) {\n result['#text'] = node.nodeValue;\n } else if (nodeType === 1) {\n parsedNode = this.parseDOM(node);\n nodeName = node.nodeName;\n member = result[nodeName];\n if (isArray(member)) {\n member.push(parsedNode);\n } else if (member !== undefined) {\n member = [\n member,\n parsedNode\n ];\n } else {\n member = parsedNode;\n }\n result[nodeName] = member;\n }\n }\n return result;\n },\n evaluate: function (value, expression) {\n var members = expression.split('.'), member, result, length, intermediateResult, idx;\n while (member = members.shift()) {\n value = value[member];\n if (isArray(value)) {\n result = [];\n expression = members.join('.');\n for (idx = 0, length = value.length; idx < length; idx++) {\n intermediateResult = this.evaluate(value[idx], expression);\n intermediateResult = isArray(intermediateResult) ? intermediateResult : [intermediateResult];\n result.push.apply(result, intermediateResult);\n }\n return result;\n }\n }\n return value;\n },\n parse: function (xml) {\n var documentElement, tree, result = {};\n documentElement = xml.documentElement || $.parseXML(xml).documentElement;\n tree = this.parseDOM(documentElement);\n result[documentElement.nodeName] = tree;\n return result;\n },\n xpathToMember: function (member, raw) {\n if (!member) {\n return '';\n }\n member = member.replace(/^\\//, '').replace(/\\//g, '.');\n if (member.indexOf('@') >= 0) {\n return member.replace(/\\.?(@.*)/, raw ? '$1' : '[\"$1\"]');\n }\n if (member.indexOf('text()') >= 0) {\n return member.replace(/(\\.?text\\(\\))/, raw ? '#text' : '[\"#text\"]');\n }\n return member;\n },\n getter: function (member) {\n return getter(this.xpathToMember(member), true);\n }\n });\n $.extend(true, kendo.data, {\n XmlDataReader: XmlDataReader,\n readers: { xml: XmlDataReader }\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.data', [\n 'kendo.core',\n 'kendo.data.odata',\n 'kendo.data.xml'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'data',\n name: 'Data source',\n category: 'framework',\n description: 'Powerful component for using local and remote data.Fully supports CRUD, Sorting, Paging, Filtering, Grouping, and Aggregates.',\n depends: ['core'],\n features: [\n {\n id: 'data-odata',\n name: 'OData',\n description: 'Support for accessing Open Data Protocol (OData) services.',\n depends: ['data.odata']\n },\n {\n id: 'data-signalr',\n name: 'SignalR',\n description: 'Support for binding to SignalR hubs.',\n depends: ['data.signalr']\n },\n {\n id: 'data-XML',\n name: 'XML',\n description: 'Support for binding to XML.',\n depends: ['data.xml']\n }\n ]\n };\n (function ($, undefined) {\n var extend = $.extend, proxy = $.proxy, isPlainObject = $.isPlainObject, isEmptyObject = $.isEmptyObject, isArray = $.isArray, grep = $.grep, ajax = $.ajax, map, each = $.each, noop = $.noop, kendo = window.kendo, isFunction = kendo.isFunction, Observable = kendo.Observable, Class = kendo.Class, STRING = 'string', FUNCTION = 'function', ASCENDING = 'asc', CREATE = 'create', READ = 'read', UPDATE = 'update', DESTROY = 'destroy', CHANGE = 'change', SYNC = 'sync', GET = 'get', ERROR = 'error', REQUESTSTART = 'requestStart', PROGRESS = 'progress', REQUESTEND = 'requestEnd', crud = [\n CREATE,\n READ,\n UPDATE,\n DESTROY\n ], identity = function (o) {\n return o;\n }, getter = kendo.getter, stringify = kendo.stringify, math = Math, push = [].push, join = [].join, pop = [].pop, splice = [].splice, shift = [].shift, slice = [].slice, unshift = [].unshift, toString = {}.toString, stableSort = kendo.support.stableSort, dateRegExp = /^\\/Date\\((.*?)\\)\\/$/;\n var ObservableArray = Observable.extend({\n init: function (array, type) {\n var that = this;\n that.type = type || ObservableObject;\n Observable.fn.init.call(that);\n that.length = array.length;\n that.wrapAll(array, that);\n },\n at: function (index) {\n return this[index];\n },\n toJSON: function () {\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('<option value=\"#:{0}#\">#:{1}#</option>', options.valueField || options.textField, options.textField || options.valueField);\n } else {\n template = '<option>#:data#</option>';\n }\n } else if (nodeName == 'tbody') {\n template = '<tr><td>#:data#</td></tr>';\n } else if (nodeName == 'ul' || nodeName == 'ol') {\n template = '<li>#:data#</li>';\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 = /<body[^>]*>(([\\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($('<div />').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('<div data-' + kendo.ns + 'stretch=\"true\" data-' + kendo.ns + 'role=\"view\" data-' + kendo.ns + 'init-widgets=\"false\"></div>').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('<div ' + attr('role') + '=\"content\"></div>');\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 = $('<div />');\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('<div data-role=view />').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 = $('<div class=\"km-touch-scrollbar km-' + (horizontal ? 'horizontal' : 'vertical') + '-scrollbar\" />');\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('<div class=\"km-scroll-header\"/>');\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('<div class=\"km-scroll-container\"/>').prepend('<div class=\"km-scroll-header\"/>');\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('<span class=\"km-scroller-pull\"><span class=\"km-icon\"></span><span class=\"km-loading-left\"></span><span class=\"km-loading-right\"></span><span class=\"km-template\">' + that.pullTemplate({}) + '</span></span>');\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 = '<div role=\"tooltip\" class=\"k-widget k-tooltip#if (!autoHide) {# k-tooltip-closable#}#\">#if (!autoHide) {# <div class=\"k-tooltip-button\"><a href=\"\\\\#\" class=\"k-icon k-i-close\" title=\"Close\"></a></div> #}#' + '<div class=\"k-tooltip-content\"></div>' + '#if (callout){ #<div class=\"k-callout k-callout-#=dir#\"></div>#}#' + '</div>', IFRAMETEMPLATE = kendo.template('<iframe frameborder=\\'0\\' class=\\'' + KCONTENTFRAME + '\\' ' + 'src=\\'#= content.url #\\'>' + 'This page requires frames in order to show content' + '</iframe>'), 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._hovered = true;\n that.popup.open();\n },\n _initPopup: function () {\n var that = this, options = that.options, wrapper = $(kendo.template(TEMPLATE)({\n callout: options.callout && options.position !== 'center',\n dir: DIRCLASSES[options.position],\n autoHide: options.autoHide\n }));\n that.popup = new Popup(wrapper, extend({\n autosize: true,\n activate: function () {\n var anchor = this.options.anchor, ariaId = anchor[0].id || that.element[0].id;\n if (ariaId) {\n anchor.attr(DESCRIBEDBY, ariaId + ARIAIDSUFFIX);\n this.element.attr('id', ariaId + ARIAIDSUFFIX);\n }\n if (options.callout) {\n that._positionCallout();\n } else {\n that._offset(that.options.position, that.options.offset);\n }\n this.element.removeAttr('aria-hidden');\n DOCUMENT.on('keydown' + NS, that._documentKeyDownHandler);\n that.trigger(SHOW);\n that.popup._hovered = undefined;\n },\n close: function () {\n that.trigger(HIDE);\n },\n copyAnchorStyles: false,\n animation: options.animation\n }, POSITIONS[options.position]));\n wrapper.css({\n width: options.width,\n height: options.height\n });\n that.content = wrapper.find('.k-tooltip-content');\n that.arrow = wrapper.find('.k-callout');\n if (options.autoHide && this._isShownOnMouseEnter()) {\n wrapper.on('mouseleave' + NS, proxy(that._mouseleave, that));\n } else {\n wrapper.on('click' + NS, '.k-tooltip-button', proxy(that._closeButtonClick, that));\n }\n },\n _closeButtonClick: function (e) {\n e.preventDefault();\n this.hide();\n },\n _mouseleave: function (e) {\n var that = this;\n clearTimeout(that.timeout);\n that.timeout = setTimeout(function () {\n that._closePopup(e.currentTarget);\n }, that.options.hideAfter);\n },\n _blur: function (e) {\n this._closePopup(e.currentTarget);\n },\n _closePopup: function (target) {\n if (this.popup && !this.popup._hovered) {\n this.popup.close();\n } else {\n restoreTitle($(target));\n }\n },\n target: function () {\n if (this.popup) {\n return this.popup.options.anchor;\n }\n return null;\n },\n _positionCallout: function () {\n var that = this, position = that.options.position, dimensions = that.dimensions, offset = dimensions.offset, popup = that.popup, anchor = popup.options.anchor, anchorOffset = $(anchor).offset(), elementOffset = $(popup.element).offset(), cssClass = DIRCLASSES[popup.flipped ? REVERSE[position] : position], offsetAmount = anchorOffset[offset] - elementOffset[offset] + $(anchor)[dimensions.size]() / 2;\n that._offset(position, that.options.offset);\n that.arrow.removeClass('k-callout-n k-callout-s k-callout-w k-callout-e').addClass('k-callout-' + cssClass).css(offset, offsetAmount);\n },\n destroy: function () {\n var popup = this.popup;\n if (popup) {\n popup.element.off(NS);\n popup.destroy();\n }\n clearTimeout(this.timeout);\n this.element.off(NS);\n DOCUMENT.off('keydown' + NS, this._documentKeyDownHandler);\n Widget.fn.destroy.call(this);\n },\n _offset: function (position, offsetAmount) {\n var that = this, isTopLeft = position == 'top' || position == 'left', isFlipped = that.popup.flipped, direction = isTopLeft && isFlipped || !isTopLeft && !isFlipped ? 1 : -1, marginRule = isTopLeft ? 'margin-' + position : 'margin-' + REVERSE[position], offset = kendo._outerWidth(that.arrow) / 2 + offsetAmount;\n that.popup.wrapper.css(marginRule, offset * direction + 'px');\n }\n });\n kendo.ui.plugin(Tooltip);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('drawing/util', ['kendo.core'], f);\n}(function () {\n (function ($) {\n function createPromise() {\n return $.Deferred();\n }\n function promiseAll(promises) {\n return $.when.apply($, promises);\n }\n kendo.drawing.util = kendo.drawing.util || {};\n kendo.deepExtend(kendo.drawing.util, {\n createPromise: createPromise,\n promiseAll: promiseAll\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.color', ['kendo.core'], f);\n}(function () {\n var __meta__ = {\n id: 'color',\n name: 'Color utils',\n category: 'framework',\n advanced: true,\n description: 'Color utilities used across components',\n depends: ['core']\n };\n window.kendo = window.kendo || {};\n var Class = kendo.Class;\n var support = kendo.support;\n var namedColors = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgrey: 'a9a9a9',\n darkgreen: '006400',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n grey: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgrey: 'd3d3d3',\n lightgreen: '90ee90',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '778899',\n lightslategrey: '778899',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '00ff00',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'ff00ff',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370d8',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'd87093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n red: 'ff0000',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'ffffff',\n whitesmoke: 'f5f5f5',\n yellow: 'ffff00',\n yellowgreen: '9acd32'\n };\n var browser = support.browser;\n var matchNamedColor = function (color) {\n var colorNames = Object.keys(namedColors);\n colorNames.push('transparent');\n var regexp = new RegExp('^(' + colorNames.join('|') + ')(\\\\W|$)', 'i');\n matchNamedColor = function (color) {\n return regexp.exec(color);\n };\n return regexp.exec(color);\n };\n var BaseColor = Class.extend({\n init: function () {\n },\n toHSV: function () {\n return this;\n },\n toRGB: function () {\n return this;\n },\n toHex: function () {\n return this.toBytes().toHex();\n },\n toBytes: function () {\n return this;\n },\n toCss: function () {\n return '#' + this.toHex();\n },\n toCssRgba: function () {\n var rgb = this.toBytes();\n return 'rgba(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ', ' + parseFloat(Number(this.a).toFixed(3)) + ')';\n },\n toDisplay: function () {\n if (browser.msie && browser.version < 9) {\n return this.toCss();\n }\n return this.toCssRgba();\n },\n equals: function (c) {\n return c === this || c !== null && this.toCssRgba() === parseColor(c).toCssRgba();\n },\n diff: function (other) {\n if (other === null) {\n return NaN;\n }\n var c1 = this.toBytes();\n var c2 = other.toBytes();\n return Math.sqrt(Math.pow((c1.r - c2.r) * 0.3, 2) + Math.pow((c1.g - c2.g) * 0.59, 2) + Math.pow((c1.b - c2.b) * 0.11, 2));\n },\n clone: function () {\n var c = this.toBytes();\n if (c === this) {\n c = new Bytes(c.r, c.g, c.b, c.a);\n }\n return c;\n }\n });\n var RGB = BaseColor.extend({\n init: function (r, g, b, a) {\n BaseColor.fn.init.call(this);\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n },\n toHSV: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var v = max;\n var h, s;\n if (delta === 0) {\n return new HSV(0, 0, v, this.a);\n }\n if (max !== 0) {\n s = delta / max;\n if (r === max) {\n h = (g - b) / delta;\n } else if (g === max) {\n h = 2 + (b - r) / delta;\n } else {\n h = 4 + (r - g) / delta;\n }\n h *= 60;\n if (h < 0) {\n h += 360;\n }\n } else {\n s = 0;\n h = -1;\n }\n return new HSV(h, s, v, this.a);\n },\n toHSL: function () {\n var ref = this;\n var r = ref.r;\n var g = ref.g;\n var b = ref.b;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n default:\n break;\n }\n }\n return new HSL(h * 60, s * 100, l * 100, this.a);\n },\n toBytes: function () {\n return new Bytes(this.r * 255, this.g * 255, this.b * 255, this.a);\n }\n });\n var Bytes = RGB.extend({\n init: function (r, g, b, a) {\n RGB.fn.init.call(this, Math.round(r), Math.round(g), Math.round(b), a);\n },\n toRGB: function () {\n return new RGB(this.r / 255, this.g / 255, this.b / 255, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toHex: function () {\n return hex(this.r, 2) + hex(this.g, 2) + hex(this.b, 2);\n },\n toBytes: function () {\n return this;\n }\n });\n function hex(n, width, pad) {\n if (pad === void 0) {\n pad = '0';\n }\n var result = n.toString(16);\n while (width > result.length) {\n result = pad + result;\n }\n return result;\n }\n var HSV = BaseColor.extend({\n init: function (h, s, v, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.v = v;\n this.a = a;\n },\n toRGB: function () {\n var ref = this;\n var h = ref.h;\n var s = ref.s;\n var v = ref.v;\n var r, g, b;\n if (s === 0) {\n r = g = b = v;\n } else {\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n break;\n }\n }\n return new RGB(r, g, b, this.a);\n },\n toHSL: function () {\n return this.toRGB().toHSL();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n var HSL = BaseColor.extend({\n init: function (h, s, l, a) {\n BaseColor.fn.init.call(this);\n this.h = h;\n this.s = s;\n this.l = l;\n this.a = a;\n },\n toRGB: function () {\n var h = this.h / 360;\n var s = this.s / 100;\n var l = this.l / 100;\n var r, g, b;\n if (s === 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return new RGB(r, g, b, this.a);\n },\n toHSV: function () {\n return this.toRGB().toHSV();\n },\n toBytes: function () {\n return this.toRGB().toBytes();\n }\n });\n function hue2rgb(p, q, s) {\n var t = s;\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n function parseColor(value, safe) {\n var m, ret;\n if (value == null || value === 'none') {\n return null;\n }\n if (value instanceof BaseColor) {\n return value;\n }\n var color = value.toLowerCase();\n if (m = matchNamedColor(color)) {\n if (m[1] === 'transparent') {\n color = new RGB(1, 1, 1, 0);\n } else {\n color = parseColor(namedColors[m[1]], safe);\n }\n color.match = [m[1]];\n return color;\n }\n if (m = /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1);\n } else if (m = /^#?([0-9a-f])([0-9a-f])([0-9a-f])\\b/i.exec(color)) {\n ret = new Bytes(parseInt(m[1] + m[1], 16), parseInt(m[2] + m[2], 16), parseInt(m[3] + m[3], 16), 1);\n } else if (m = /^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1);\n } else if (m = /^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new Bytes(parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4]));\n } else if (m = /^rgb\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, 1);\n } else if (m = /^rgba\\(\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9]*\\.?[0-9]+)%\\s*,\\s*([0-9.]+)\\s*\\)/.exec(color)) {\n ret = new RGB(parseFloat(m[1]) / 100, parseFloat(m[2]) / 100, parseFloat(m[3]) / 100, parseFloat(m[4]));\n }\n if (ret) {\n ret.match = m;\n } else if (!safe) {\n throw new Error('Cannot parse color: ' + color);\n }\n return ret;\n }\n var 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 = '<svg xmlns=\\'' + SVG_NS + '\\'></svg>';\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, '<svg xmlns=\\'' + SVG_NS + '\\' version=\\'1.1\\'>' + this.render() + '</svg>');\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 '<stop ' + this.renderOffset() + ' ' + this.renderStyle() + ' />';\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 '<linearGradient id=\\'' + this.id + '\\' ' + this.renderCoordinates() + '>' + this.renderChildren() + '</linearGradient>';\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 '<radialGradient id=\\'' + this.id + '\\' ' + this.renderCoordinates() + '>' + this.renderChildren() + '</radialGradient>';\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 '<clipPath id=\\'' + this.id + '\\'>' + this.renderChildren() + '</clipPath>';\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 '<defs>' + this.renderChildren() + '</defs>';\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 '<?xml version=\\'1.0\\' ?>' + 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 '<svg style=\\'width: 100%; height: 100%; overflow: hidden;\\' xmlns=\\'' + SVG_NS + '\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\' version=\\'1.1\\'>' + this._root.render() + '</svg>';\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 '<g' + (this.renderId() + this.renderTransform() + this.renderStyle() + this.renderOpacity() + this.renderDefinitions()) + '>' + this.renderChildren() + '</g>';\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 '<path ' + this.renderId() + ' ' + this.renderStyle() + ' ' + this.renderOpacity() + ' ' + renderAttr('d', this.renderData()) + '' + this.renderStroke() + this.renderFill() + this.renderDefinitions() + this.renderTransform() + '></path>';\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 '<circle ' + this.renderId() + ' ' + this.renderStyle() + ' ' + this.renderOpacity() + 'cx=\\'' + this.center().x + '\\' cy=\\'' + this.center().y + '\\' r=\\'' + this.radius() + '\\'' + this.renderStroke() + ' ' + this.renderFill() + ' ' + this.renderDefinitions() + this.renderTransform() + ' ></circle>';\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 '<rect ' + this.renderId() + ' ' + this.renderStyle() + ' ' + this.renderOpacity() + ' x=\\'' + this.origin().x + '\\' y=\\'' + this.origin().y + '\\' ' + 'width=\\'' + this.size().width + '\\' height=\\'' + this.size().height + '\\' ' + this.renderStroke() + ' ' + this.renderFill() + ' ' + this.renderDefinitions() + ' ' + this.renderTransform() + ' />';\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 '<image preserveAspectRatio=\\'none\\' ' + this.renderId() + ' ' + this.renderStyle() + ' ' + this.renderTransform() + ' ' + this.renderOpacity() + this.renderPosition() + ' ' + this.renderSource() + ' ' + this.renderDefinitions() + '>' + '</image>';\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 '<text ' + this.renderId() + ' ' + this.renderTextAnchor() + ' ' + this.renderStyle() + ' ' + this.renderOpacity() + 'x=\\'' + this.pos().x + '\\' y=\\'' + this.pos().y + '\\' ' + this.renderStroke() + ' ' + this.renderTransform() + ' ' + this.renderDefinitions() + this.renderFill() + '>' + this.renderContent() + '</text>';\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 = '<?xml version=\\'1.0\\' ?><svg xmlns=\\'' + SVG_NS + '\\' xmlns:xlink=\\'http://www.w3.org/1999/xlink\\' version=\\'1.1\\'>' + root.render() + '</svg>';\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 '<canvas style=\\'width: 100%; height: 100%;\\'></canvas>';\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 = '<div class=\"k-tooltip\">' + '<div class=\"k-tooltip-content\"></div>' + '</div>';\n var TOOLTIP_CLOSE_TEMPLATE = '<div class=\"k-tooltip-button\"><a href=\"\\\\#\" class=\"k-icon k-i-close\">close</a></div>';\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 = $('<div />').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 = $('<div style=\"display: none\">' + ' <div class=\"k-var--accent\"></div>' + ' <div class=\"k-var--accent-contrast\"></div>' + ' <div class=\"k-var--base\"></div>' + ' <div class=\"k-var--background\"></div>' + ' <div class=\"k-var--normal-background\"></div>' + ' <div class=\"k-var--normal-text-color\"></div>' + ' <div class=\"k-var--hover-background\"></div>' + ' <div class=\"k-var--hover-text-color\"></div>' + ' <div class=\"k-var--selected-background\"></div>' + ' <div class=\"k-var--selected-text-color\"></div>' + ' <div class=\"k-var--chart-error-bars-background\"></div>' + ' <div class=\"k-var--chart-notes-background\"></div>' + ' <div class=\"k-var--chart-notes-border\"></div>' + ' <div class=\"k-var--chart-notes-lines\"></div>' + ' <div class=\"k-var--chart-crosshair-background\"></div>' + ' <div class=\"k-var--chart-inactive\"></div>' + ' <div class=\"k-var--chart-major-lines\"></div>' + ' <div class=\"k-var--chart-minor-lines\"></div>' + ' <div class=\"k-var--chart-area-opacity\"></div>' + ' <div class=\"k-widget\">' + ' <div class=\"k-var--chart-font\"></div>' + ' <div class=\"k-var--chart-title-font\"></div>' + ' <div class=\"k-var--chart-label-font\"></div>' + ' </div>' + ' <div class=\"k-var--series\">' + ' <div class=\"k-var--series-a\"></div>' + ' <div class=\"k-var--series-b\"></div>' + ' <div class=\"k-var--series-c\"></div>' + ' <div class=\"k-var--series-d\"></div>' + ' <div class=\"k-var--series-e\"></div>' + ' <div class=\"k-var--series-f\"></div>' + ' </div>' + ' <div class=\"k-var--gauge-pointer\"></div>' + ' <div class=\"k-var--gauge-track\"></div>' + '</div>').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: '<table>' + '<tr><th colspan=\\'2\\'>{4:d}</th></tr>' + '<tr><td>Open:</td><td>{0:C}</td></tr>' + '<tr><td>High:</td><td>{1:C}</td></tr>' + '<tr><td>Low:</td><td>{2:C}</td></tr>' + '<tr><td>Close:</td><td>{3:C}</td></tr>' + '</table>' },\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: '<table>' + '<tr><th colspan=\\'2\\'>{6:d}</th></tr>' + '<tr><td>Lower:</td><td>{0:C}</td></tr>' + '<tr><td>Q1:</td><td>{1:C}</td></tr>' + '<tr><td>Median:</td><td>{2:C}</td></tr>' + '<tr><td>Mean:</td><td>{5:C}</td></tr>' + '<tr><td>Q3:</td><td>{3:C}</td></tr>' + '<tr><td>Upper:</td><td>{4:C}</td></tr>' + '</table>' },\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}<br />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('<div class=\\'k-tooltip k-chart-tooltip#= d.rtl ? \" k-rtl\" : \"\"#\\' ' + 'style=\\'display:none; position: absolute; font: #= d.font #;' + '#if (d.border) {# border: #= d.border.width #px solid; #}#' + 'opacity: #= d.opacity #; filter: alpha(opacity=#= d.opacity * 100 #);\\'>' + '</div>', {\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: '<table>' + '<th colspan=\\'#= colspan #\\'>#= categoryText #</th>' + '# for(var i = 0; i < points.length; i++) { #' + '# var point = points[i]; #' + '<tr>' + '# if(colorMarker) { # ' + '<td><span class=\\'k-chart-shared-tooltip-marker\\' style=\\'background-color:#:point.series.color#\\'></span></td>' + '# } #' + '# if(nameColumn) { # ' + '<td> #if (point.series.name) {# #: point.series.name #: #} else {# #}#</td>' + '# } #' + '<td>#= content(point) #</td>' + '</tr>' + '# } #' + '</table>',\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 = $('<div></div>').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 = $('<div />').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 = $('<div />').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('<button class=\"k-button k-navigator-{0}\" aria-label=\"move {0}\">' + '<span class=\"k-icon k-i-arrow-60-{0}\"/>' + '</button>', 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('<button class=\"k-button k-zoom-{0}\" title=\"zoom-{0}\" aria-label=\"zoom-{0}\"><span class=\"k-icon {1}\"></span></button>', 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 = $('<div class=\\'k-layer\\'></div>').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 = $('<img style=\\'position: absolute; display: block;\\' alt=\\'\\' />').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 = $('<div>').addClass('k-map-controls ' + renderPos(pos)).appendTo(this.element);\n }\n return $('<div>').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: '<div tabindex=\"0\" class=\"k-overflow-anchor k-button\"></div>',\n overflowContainer: '<ul class=\"k-overflow-container k-list-container\"></ul>'\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 ? $('<button tabindex=\"0\"></button>') : $('<a href tabindex=\"0\"></a>');\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 = $('<span class=\"' + ICON + '\"></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 = $('<span class=\"k-sprite ' + ICON + '\"></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 = $('<img alt=\"icon\" class=\"k-image\" />').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('<span class=\"km-text\">' + options.text + '</span>');\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('<span class=\"km-text\">' + options.text + '</span>');\n } else {\n element.html('<span class=\"k-text\">' + options.text + '</span>');\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('<li></li>').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 = $('<div></div>');\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 = $('<li></li>');\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 = $('<div class=\"' + SPLIT_BUTTON + '\" tabindex=\"0\"></div>');\n this.options = options;\n this.toolbar = toolbar;\n this.mainButton = new ToolBarButton($.extend({}, options, { hidden: false }), toolbar);\n this.arrowButton = $('<a class=\"' + BUTTON + ' ' + SPLIT_BUTTON_ARROW + '\"><span class=\"' + (options.mobile ? 'km-icon km-arrowdown' : 'k-icon k-i-arrow-60-down') + '\"></span></a>');\n this.popupElement = $('<ul class=\"' + LIST_CONTAINER + '\"></ul>');\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('<li></li>').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 = $('<li class=\"' + SPLIT_BUTTON + '\"></li>'), 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 = $('<div> </div>');\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 = $('<li> </li>');\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 = $('<div> </div>');\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 = $('<div></div>').html(element);\n } else {\n element = element.wrap('<div></div>').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 = $('<li></li>').html(element);\n } else {\n element = element.wrap('<li></li>').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('<div class=\"km-actionsheet-wrapper km-actionsheet-tablet km-widget km-popup\"></div>').parent().wrap('<div class=\"km-popup-wrapper k-popup\"></div>').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('<span class=\"km-icon km-more\"></span>');\n overflowContainer = actionSheetWrap(overflowContainer);\n } else {\n that.overflowAnchor.append('<span class=\"k-icon k-i-more-vertical\"></span>');\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 $('<div class=\"parent\"><span /></div>').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 = $('<div class=\\'k-marquee\\'><div class=\\'k-marquee-color\\'></div></div>');\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('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link\" href=\"\\\\#\" data-#=data.ns#value=\"#=data.dateString#\">#=data.value#</a></td>', { useWithBlock: false }), emptyCellTemplate = template('<td role=\"gridcell\" class=\"k-out-of-range\"><a class=\"k-link\"></a></td>', { useWithBlock: false }), otherMonthCellTemplate = template('<td role=\"gridcell\" class=\"k-out-of-range\"> </td>', { useWithBlock: false }), weekNumberTemplate = template('<td class=\"k-alt\">#= data.weekNumber #</td>', { 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(CELLSELECTORVALID + ':first').find('a')), lastDateInView = toDateObject(that._cellsBySelector(CELLSELECTORVALID + ':last').find('a'));\n return +date <= +lastDateInView && +date >= +firstDateInView;\n },\n _isNavigatable: function (currentValue, cellIndex) {\n var that = this;\n var isDisabled = that.options.disableDates;\n var cell;\n var index;\n if (that._view.name == 'month') {\n return !isDisabled(currentValue);\n } else {\n index = that.wrapper.find('.' + FOCUSED).index();\n cell = that.wrapper.find('.k-content td:eq(' + (index + cellIndex) + ')');\n return cell.is(CELLSELECTORVALID) || !isDisabled(currentValue);\n }\n },\n _move: function (e) {\n var that = this, options = that.options, key = e.keyCode, view = that._view, index = that._index, min = that.options.min, max = that.options.max, currentValue = new DATE(+that._current), isRtl = kendo.support.isRtl(that.wrapper), isDisabled = that.options.disableDates, value, prevent, method, temp;\n if (e.target === that._table[0]) {\n that._active = true;\n }\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n value = 1;\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n value = -1;\n prevent = true;\n } else if (key == keys.UP) {\n value = index === 0 ? -7 : -4;\n prevent = true;\n } else if (key == keys.DOWN) {\n value = index === 0 ? 7 : 4;\n prevent = true;\n } else if (key == keys.SPACEBAR) {\n value = 0;\n prevent = true;\n } else if (key == keys.HOME || key == keys.END) {\n method = key == keys.HOME ? 'first' : 'last';\n temp = view[method](currentValue);\n currentValue = new DATE(temp.getFullYear(), temp.getMonth(), temp.getDate(), currentValue.getHours(), currentValue.getMinutes(), currentValue.getSeconds(), currentValue.getMilliseconds());\n currentValue.setFullYear(temp.getFullYear());\n prevent = true;\n }\n if (e.ctrlKey || e.metaKey) {\n if (key == keys.RIGHT && !isRtl || key == keys.LEFT && isRtl) {\n that.navigateToFuture();\n prevent = true;\n } else if (key == keys.LEFT && !isRtl || key == keys.RIGHT && isRtl) {\n that.navigateToPast();\n prevent = true;\n } else if (key == keys.UP) {\n that.navigateUp();\n prevent = true;\n } else if (key == keys.DOWN) {\n that._click($(that._cell[0].firstChild));\n prevent = true;\n } else if ((key == keys.ENTER || key == keys.SPACEBAR) && that._isMultipleSelection()) {\n that._keyboardToggleSelection(e);\n var focusedDate = toDateObject($(that._cell[0]).find('a'));\n that._class(FOCUSED, focusedDate);\n }\n } else if (e.shiftKey) {\n if (value !== undefined || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (isDisabled(currentValue)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (that._isMultipleSelection()) {\n that._keyboardRangeSelection(e, currentValue);\n } else {\n that._focus(currentValue);\n }\n }\n } else {\n if (key == keys.ENTER || key == keys.SPACEBAR) {\n if (view.name == 'month' && that._isMultipleSelection()) {\n that.value(toDateObject($(that._cell.find('a'))));\n that.selectable._lastActive = $(that._cell[0]);\n that.trigger(CHANGE);\n } else {\n that._click($(that._cell[0].firstChild));\n }\n prevent = true;\n } else if (key == keys.PAGEUP) {\n prevent = true;\n that.navigateToPast();\n } else if (key == keys.PAGEDOWN) {\n prevent = true;\n that.navigateToFuture();\n }\n if (value || method) {\n if (!method) {\n view.setDate(currentValue, value);\n }\n min = createDate(min.getFullYear(), min.getMonth(), min.getDate());\n if (!isInRange(currentValue, min, max)) {\n currentValue = restrictValue(currentValue, options.min, options.max);\n }\n if (!that._isNavigatable(currentValue, value)) {\n currentValue = that._nextNavigatable(currentValue, value);\n }\n if (that._isMultipleSelection()) {\n if (!that._dateInView(currentValue)) {\n that.navigate(currentValue);\n } else {\n that._current = currentValue;\n that._class(FOCUSED, currentValue);\n }\n } else {\n that._focus(currentValue);\n }\n }\n }\n if (prevent) {\n e.preventDefault();\n }\n return that._current;\n },\n _keyboardRangeSelection: function (event, currentValue) {\n var that = this, fromDate, daysDifference;\n if (!that._dateInView(currentValue)) {\n that._selectDates = [];\n fromDate = that.selectable._lastActive ? toDateObject(that.selectable._lastActive.find('a')) : currentValue;\n daysDifference = daysBetweenTwoDates(fromDate, new Date(+currentValue));\n addDaysToArray(that._selectDates, daysDifference, fromDate, that.options.disableDates);\n that.navigate(currentValue);\n that._current = currentValue;\n that.selectable._lastActive = that.selectable._lastActive || that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID);\n that.trigger(CHANGE);\n return;\n }\n that.selectable.options.filter = that.wrapper.find('table').length > 1 && +currentValue > +that._current ? 'table.k-month:eq(1) ' + CELLSELECTORVALID : 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n that._class(FOCUSED, currentValue);\n that._current = currentValue;\n that._rangeSelection(that._cellByDate(that._view.toDateString(currentValue), CELLSELECTORVALID), currentValue);\n that.trigger(CHANGE);\n that.selectable.options.filter = 'table.k-month:eq(0) ' + CELLSELECTORVALID;\n },\n _keyboardToggleSelection: function (event) {\n var that = this;\n event.currentTarget = that._cell[0];\n that.selectable._lastActive = $(that._cell[0]);\n if ($(that._cell[0]).hasClass(SELECTED)) {\n that.selectable._unselect($(that._cell[0]));\n that.selectable.trigger(CHANGE, { event: event });\n } else {\n that.selectable.value($(that._cell[0]), { event: event });\n }\n },\n _nextNavigatable: function (currentValue, value) {\n var that = this, disabled = true, view = that._view, min = that.options.min, max = that.options.max, isDisabled = that.options.disableDates, navigatableDate = new Date(currentValue.getTime());\n view.setDate(navigatableDate, -value);\n while (disabled) {\n view.setDate(currentValue, value);\n if (!isInRange(currentValue, min, max)) {\n currentValue = navigatableDate;\n break;\n }\n disabled = isDisabled(currentValue);\n }\n return currentValue;\n },\n _animate: function (options) {\n var that = this;\n var from = options.from;\n var to = options.to;\n var active = that._active;\n var viewWrapper = that.element.children('.k-calendar-view');\n if (!from) {\n viewWrapper.append(to);\n that._bindTable(to);\n } else if (from.parent().data('animating')) {\n from.off(ns);\n from.parent().kendoStop(true, true).remove();\n from.remove();\n viewWrapper.append(to);\n that._focusView(active);\n } else if (!from.is(':visible') || that.options.animation === false || options.replace) {\n to.insertAfter(from);\n from.off(ns).remove();\n that._focusView(active);\n } else {\n that[options.vertical ? '_vertical' : '_horizontal'](from, to, options.future);\n }\n },\n _horizontal: function (from, to, future) {\n var that = this, active = that._active, horizontal = that.options.animation.horizontal, effects = horizontal.effects, viewWidth = outerWidth(from);\n if (effects && effects.indexOf(SLIDE) != -1) {\n from.add(to).css({ width: viewWidth });\n from.wrap('<div/>');\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 = $('<div class=\\'k-calendar-view\\' />').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 = $('<div class=\"k-footer\"><a href=\"#\" class=\"k-link k-nav-today\"></a></div>').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('<div class=\"k-header\">' + '<a href=\"#\" role=\"button\" class=\"k-link k-nav-prev\" ' + ARIA_LABEL + '=\"Previous\"><span class=\"k-icon k-i-arrow-60-left\"></span></a>' + '<a href=\"#\" role=\"button\" aria-live=\"assertive\" aria-atomic=\"true\" class=\"k-link k-nav-fast\"></a>' + '<a href=\"#\" role=\"button\" class=\"k-link k-nav-next\" ' + ARIA_LABEL + '=\"Next\"><span class=\"k-icon k-i-arrow-60-right\"></span></a>' + '</div>');\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('<td#=data.cssClass# role=\"gridcell\"><a tabindex=\"-1\" class=\"k-link#=data.linkClass#\" href=\"#=data.url#\" ' + kendo.attr(VALUE) + '=\"#=data.dateString#\" title=\"#=data.title#\">' + (content || '#=data.value#') + '</a></td>', { useWithBlock: !!content }),\n empty: template('<td role=\"gridcell\">' + (empty || ' ') + '</td>', { useWithBlock: !!empty }),\n weekNumber: template('<td class=\"k-alt\">' + (weekNumber || '#= data.weekNumber #') + '</td>', { 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 = '<table tabindex=\"0\" role=\"grid\" class=\"k-content\" cellspacing=\"0\" data-start=\"' + toDateString(start) + '\">';\n if (showHeader) {\n html += '<caption class=\"k-month-header\">' + this.title(date, min, max, culture) + '</caption><thead><tr role=\"row\">';\n } else {\n html += '<thead><tr role=\"row\">';\n }\n if (isWeekColumnVisible) {\n html += '<th scope=\"col\" class=\"k-alt\">' + options.messages.weekColumnHeader + '</th>';\n }\n for (; idx < 7; idx++) {\n html += '<th scope=\"col\" title=\"' + names[idx] + '\">' + shortNames[idx] + '</th>';\n }\n adjustDST(today, 0);\n today = +today;\n return view({\n cells: 42,\n perRow: 7,\n html: html += '</tr></thead><tbody><tr role=\"row\">',\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 += '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><caption class=\"k-meta-header\">';\n html += this.title(options.date);\n html += '</caption><tbody><tr role=\"row\">';\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 += '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><caption class=\"k-meta-header\">';\n html += this.title(options.date, options.min, options.max);\n html += '</caption><tbody><tr role=\"row\">';\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 += '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><caption class=\"k-meta-header\">';\n html += this.title(options.date, options.min, options.max);\n html += '</caption><tbody><tr role=\"row\">';\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 || '<table tabindex=\"0\" role=\"grid\" class=\"k-content k-meta-view\" cellspacing=\"0\"><tbody><tr role=\"row\">';\n if (isWeekColumnVisible) {\n html += weekNumber(weekNumberBuild(start));\n }\n for (; idx < length; idx++) {\n if (idx > 0 && idx % cellsPerRow === 0) {\n html += '</tr><tr role=\"row\">';\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 + '</tr></tbody></table>';\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('<span class=\\'k-widget k-dateinput\\'></span>').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 $('<span class=\\'k-icon k-i-warning\\'></span>').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 = '<div />', SPAN = '<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 = $('<span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-calendar\"></span></span>').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('<span class=\"k-select\"/>').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 = $('<span class=\\'' + CLASS_ICON + ' k-i-warning\\'></span>').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 = $('<input type=\"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('<span class=\"k-numeric-wrap k-state-default\" />').parent();\n wrapper = wrapper.wrap('<span/>').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 '<span unselectable=\"on\" class=\"k-link k-link-' + direction + '\" aria-label=\"' + text + '\" title=\"' + text + '\">' + '<span unselectable=\"on\" class=\"' + CLASS_ICON + ' ' + className + '\"></span>' + '</span>';\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: '<span class=\"k-widget k-tooltip k-tooltip-validation\">' + '<span class=\"k-icon k-i-warning\"> </span> #=message#</span>',\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 = '.', support = kendo.support, AUTOCOMPLETEVALUE = support.browser.chrome ? 'disabled' : 'off', nameSpecialCharRegExp = /(\"|\\%|'|\\[|\\]|\\$|\\.|\\,|\\:|\\;|\\+|\\*|\\&|\\!|\\#|\\(|\\)|<|>|\\=|\\?|\\@|\\^|\\{|\\}|\\~|\\/|\\||`)/g, ERRORTEMPLATE = '<div class=\"k-widget k-tooltip k-tooltip-validation\" style=\"margin:0.5em\"><span class=\"k-icon k-i-warning\"> </span>' + '#=message#<div class=\"k-callout k-callout-n\"></div></div>', 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 ? options.title : options.field\n };\n for (ruleName in validation) {\n rule = validation[ruleName];\n if (inArray(ruleName, specialRules) >= 0) {\n attr[DATATYPE] = ruleName;\n } else if (!isFunction(rule)) {\n var culture = kendo.getCulture();\n if (typeof rule === 'number' && culture.name.length) {\n var numberFormat = culture.numberFormat;\n var stringRule = rule.toString().replace(POINT, numberFormat[POINT]);\n attr[ruleName] = stringRule;\n } else {\n attr[ruleName] = isPlainObject(rule) ? rule.value || ruleName : rule;\n }\n }\n attr[kendo.attr(ruleName + '-msg')] = rule.message;\n attr.autocomplete = AUTOCOMPLETEVALUE;\n }\n if (inArray(type, specialRules) >= 0) {\n attr[DATATYPE] = type;\n }\n attr[BINDING] = (type === 'boolean' ? 'checked:' : 'value:') + options.field;\n return attr;\n }\n function addIdAttribute(container, attr) {\n var id = container.attr('id');\n if (id) {\n attr.id = id;\n container.removeAttr('id');\n }\n return attr;\n }\n function convertItems(items) {\n var idx, length, item, value, text, result;\n if (items && items.length) {\n result = [];\n for (idx = 0, length = items.length; idx < length; idx++) {\n item = items[idx];\n text = item.text || item.value || item;\n value = item.value == null ? item.text || item : item.value;\n result[idx] = {\n text: text,\n value: value\n };\n }\n }\n return result;\n }\n var editors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoNumericTextBox({ format: options.format });\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').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 $('<input type=\"text\"/>').attr(attr).appendTo(container).kendoDatePicker({ format: options.format });\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"text\" class=\"k-textbox\"/>').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n $('<input type=\"checkbox\" />').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = kendo.stringify(convertItems(options.values));\n $('<select ' + kendo.attr('text-field') + '=\"text\"' + kendo.attr('value-field') + '=\"value\"' + kendo.attr('source') + '=\\'' + (items ? items.replace(/\\'/g, ''') : items) + '\\'' + kendo.attr('role') + '=\"dropdownlist\"/>').attr(attr).appendTo(container);\n $('<span ' + kendo.attr('for') + '=\"' + options.field + '\" class=\"k-invalid-msg\"/>').hide().appendTo(container);\n }\n };\n var mobileEditors = {\n 'number': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"number\"/>').attr(attr).appendTo(container);\n },\n 'date': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"date\"/>').attr(attr).appendTo(container);\n },\n 'string': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"text\" />').attr(attr).appendTo(container);\n },\n 'boolean': function (container, options) {\n var attr = createAttributes(options);\n attr = addIdAttribute(container, attr);\n $('<input type=\"checkbox\" />').attr(attr).appendTo(container);\n },\n 'values': function (container, options) {\n var attr = createAttributes(options);\n var items = options.values;\n var select = $('<select />');\n attr = addIdAttribute(container, attr);\n for (var index in items) {\n $('<option value=\"' + items[index].value + '\">' + items[index].text + '</option>').appendTo(select);\n }\n select.attr(attr).appendTo(container);\n }\n };\n function addValidationRules(modelField, rules) {\n var validation = modelField ? modelField.validation || {} : {}, rule, descriptor;\n for (rule in validation) {\n descriptor = validation[rule];\n if (isPlainObject(descriptor) && descriptor.value) {\n descriptor = descriptor.value;\n }\n if (isFunction(descriptor)) {\n rules[rule] = descriptor;\n }\n }\n }\n var Editable = Widget.extend({\n init: function (element, options) {\n var that = this;\n if (options.target) {\n options.$angular = options.target.options.$angular;\n if (options.target.pane) {\n that._isMobile = true;\n }\n }\n Widget.fn.init.call(that, element, options);\n that._validateProxy = $.proxy(that._validate, that);\n that.refresh();\n },\n events: [CHANGE],\n options: {\n name: 'Editable',\n editors: editors,\n mobileEditors: mobileEditors,\n clearContainer: true,\n errorTemplate: ERRORTEMPLATE,\n skipFocus: false\n },\n editor: function (field, modelField) {\n var that = this, editors = that._isMobile ? mobileEditors : that.options.editors, isObject = isPlainObject(field), fieldName = isObject ? field.field : field, model = that.options.model || {}, isValuesEditor = isObject && field.values, type = isValuesEditor ? 'values' : fieldType(modelField), isCustomEditor = isObject && field.editor, editor = isCustomEditor ? field.editor : editors[type], container = that.element.find('[' + kendo.attr('container-for') + '=' + fieldName.replace(nameSpecialCharRegExp, '\\\\$1') + ']');\n editor = editor ? editor : editors.string;\n if (isCustomEditor && typeof field.editor === 'string') {\n editor = function (container) {\n container.append(field.editor);\n };\n }\n container = container.length ? container : that.element;\n editor(container, extend(true, {}, isObject ? field : { field: fieldName }, { model: model }));\n },\n _validate: function (e) {\n var that = this, input, value = e.value, preventChangeTrigger = that._validationEventInProgress, values = {}, bindAttribute = kendo.attr('bind'), fieldName = e.field.replace(nameSpecialCharRegExp, '\\\\$1'), bindingRegex = new RegExp('(value|checked)\\\\s*:\\\\s*' + fieldName + '\\\\s*(,|$)');\n values[e.field] = e.value;\n input = $(':input[' + bindAttribute + '*=\"' + fieldName + '\"]', that.element).filter('[' + kendo.attr('validate') + '!=\\'false\\']').filter(function () {\n return bindingRegex.test($(this).attr(bindAttribute));\n });\n if (input.length > 1) {\n input = input.filter(function () {\n var element = $(this);\n return !element.is(':radio') || element.val() == value;\n });\n }\n try {\n that._validationEventInProgress = true;\n if (!that.validatable.validateInput(input) || !preventChangeTrigger && that.trigger(CHANGE, { values: values })) {\n e.preventDefault();\n }\n } finally {\n that._validationEventInProgress = false;\n }\n },\n end: function () {\n return this.validatable.validate();\n },\n destroy: function () {\n var that = this;\n that.angular('cleanup', function () {\n return { elements: that.element };\n });\n Widget.fn.destroy.call(that);\n that.options.model.unbind('set', that._validateProxy);\n that.options.model.unbind(EQUAL_SET, that._validateProxy);\n kendo.unbind(that.element);\n if (that.validatable) {\n that.validatable.destroy();\n }\n kendo.destroy(that.element);\n that.element.removeData('kendoValidator');\n if (that.element.is('[' + kendo.attr('role') + '=editable]')) {\n that.element.removeAttr(kendo.attr('role'));\n }\n },\n refresh: function () {\n var that = this, idx, length, fields = that.options.fields || [], container = that.options.clearContainer ? that.element.empty() : that.element, model = that.options.model || {}, rules = {}, field, isObject, fieldName, modelField, modelFields;\n if (!$.isArray(fields)) {\n fields = [fields];\n }\n for (idx = 0, length = fields.length; idx < length; idx++) {\n field = fields[idx];\n isObject = isPlainObject(field);\n fieldName = isObject ? field.field : field;\n modelField = (model.fields || model)[fieldName];\n addValidationRules(modelField, rules);\n that.editor(field, modelField);\n }\n if (that.options.target) {\n that.angular('compile', function () {\n return {\n elements: container,\n data: container.map(function () {\n return { dataItem: model };\n })\n };\n });\n }\n if (!length) {\n modelFields = model.fields || model;\n for (fieldName in modelFields) {\n addValidationRules(modelFields[fieldName], rules);\n }\n }\n convertToValueBinding(container);\n if (that.validatable) {\n that.validatable.destroy();\n }\n kendo.bind(container, that.options.model);\n that.options.model.unbind('set', that._validateProxy);\n that.options.model.bind('set', that._validateProxy);\n that.options.model.unbind(EQUAL_SET, that._validateProxy);\n that.options.model.bind(EQUAL_SET, that._validateProxy);\n that.validatable = new kendo.ui.Validator(container, {\n validateOnBlur: false,\n errorTemplate: that.options.errorTemplate || undefined,\n rules: rules\n });\n if (!that.options.skipFocus) {\n var focusable = container.find(':kendoFocusable').eq(0).focus();\n if (oldIE) {\n focusable.focus();\n }\n }\n }\n });\n ui.plugin(Editable);\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.window', [\n 'kendo.draganddrop',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'window',\n name: 'Window',\n category: 'web',\n description: 'The Window widget displays content in a modal or non-modal HTML window.',\n depends: [\n 'draganddrop',\n 'popup'\n ],\n features: [{\n id: 'window-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, TabKeyTrap = kendo.ui.Popup.TabKeyTrap, Draggable = kendo.ui.Draggable, isPlainObject = $.isPlainObject, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, outerHeight = kendo._outerHeight, proxy = $.proxy, extend = $.extend, each = $.each, template = kendo.template, BODY = 'body', templates, NS = '.kendoWindow', MODAL_NS = '.kendoWindowModal', KWINDOW = '.k-window', KWINDOWTITLE = '.k-window-title', KWINDOWTITLEBAR = KWINDOWTITLE + 'bar', KWINDOWCONTENT = '.k-window-content', KDIALOGCONTENT = '.k-dialog-content', KWINDOWRESIZEHANDLES = '.k-resize-handle', KOVERLAY = '.k-overlay', KCONTENTFRAME = 'k-content-frame', LOADING = 'k-i-loading', KHOVERSTATE = 'k-state-hover', KFOCUSEDSTATE = 'k-state-focused', MAXIMIZEDSTATE = 'k-window-maximized', VISIBLE = ':visible', HIDDEN = 'hidden', CURSOR = 'cursor', OPEN = 'open', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', CLOSE = 'close', REFRESH = 'refresh', MINIMIZE = 'minimize', MAXIMIZE = 'maximize', RESIZESTART = 'resizeStart', RESIZE = 'resize', RESIZEEND = 'resizeEnd', DRAGSTART = 'dragstart', DRAGEND = 'dragend', ERROR = 'error', OVERFLOW = 'overflow', DATADOCOVERFLOWRULE = 'original-overflow-rule', ZINDEX = 'zIndex', MINIMIZE_MAXIMIZE = '.k-window-actions .k-i-window-minimize,.k-window-actions .k-i-window-maximize', KPIN = '.k-i-pin', KUNPIN = '.k-i-unpin', PIN_UNPIN = KPIN + ',' + KUNPIN, TITLEBAR_BUTTONS = '.k-window-titlebar .k-window-action', REFRESHICON = '.k-window-titlebar .k-i-refresh', WINDOWEVENTSHANDLED = 'WindowEventsHandled', zero = /^0[a-z]*$/i, isLocalUrl = kendo.isLocalUrl, SIZE = {\n small: 'k-window-sm',\n medium: 'k-window-md',\n large: 'k-window-lg'\n };\n function defined(x) {\n return typeof x != 'undefined';\n }\n function toInt(element, property) {\n return parseInt(element.css(property), 10) || 0;\n }\n function constrain(value, low, high) {\n var normalizedValue;\n if (value && isNaN(value) && value.toString().indexOf('px') < 0) {\n normalizedValue = value;\n } else {\n normalizedValue = Math.max(Math.min(parseInt(value, 10), high === Infinity ? high : parseInt(high, 10)), low === -Infinity ? low : parseInt(low, 10));\n }\n return normalizedValue;\n }\n function executableScript() {\n return !this.type || this.type.toLowerCase().indexOf('script') >= 0;\n }\n function getPosition(elem) {\n var result = {\n top: elem.offsetTop,\n left: elem.offsetLeft\n }, parent = elem.offsetParent;\n while (parent) {\n result.top += parent.offsetTop;\n result.left += parent.offsetLeft;\n var parentOverflowX = $(parent).css('overflowX');\n var parentOverflowY = $(parent).css('overflowY');\n if (parentOverflowY === 'auto' || parentOverflowY === 'scroll') {\n result.top -= parent.scrollTop;\n }\n if (parentOverflowX === 'auto' || parentOverflowX === 'scroll') {\n result.left -= parent.scrollLeft;\n }\n parent = parent.offsetParent;\n }\n return result;\n }\n var Window = Widget.extend({\n init: function (element, options) {\n var that = this, wrapper, offset = {}, visibility, display, position, isVisible = false, content, windowContent, windowFrame, globalWindow, suppressActions = options && options.actions && !options.actions.length, id;\n Widget.fn.init.call(that, element, options);\n options = that.options;\n position = options.position;\n element = that.element;\n content = options.content;\n globalWindow = $(window);\n if (suppressActions) {\n options.actions = [];\n }\n that.appendTo = $(options.appendTo);\n that.containment = options.draggable.containment ? $(options.draggable.containment).first() : null;\n if (content && !isPlainObject(content)) {\n content = options.content = { url: content };\n }\n element.find('script').filter(executableScript).remove();\n if (!element.parent().is(that.appendTo) && !that.containment && (position.top === undefined || position.left === undefined)) {\n if (element.is(VISIBLE)) {\n offset = element.offset();\n isVisible = true;\n } else {\n visibility = element.css('visibility');\n display = element.css('display');\n element.css({\n visibility: HIDDEN,\n display: ''\n });\n offset = element.offset();\n element.css({\n visibility: visibility,\n display: display\n });\n }\n if (position.top === undefined) {\n position.top = offset.top;\n }\n if (position.left === undefined) {\n position.left = offset.left;\n }\n }\n if (!defined(options.visible) || options.visible === null) {\n options.visible = element.is(VISIBLE);\n }\n wrapper = that.wrapper = element.closest(KWINDOW);\n if (!element.is('.k-content') || !wrapper[0]) {\n element.addClass('k-window-content k-content');\n that._createWindow(element, options);\n wrapper = that.wrapper = element.closest(KWINDOW);\n that.title(that.options.title);\n that._dimensions();\n }\n that.minTop = that.minLeft = -Infinity;\n that.maxTop = that.maxLeft = Infinity;\n that._position();\n if (content) {\n that.refresh(content);\n }\n if (options.visible) {\n that.toFront();\n }\n windowContent = wrapper.children(KWINDOWCONTENT);\n that._tabindex(windowContent);\n if (options.visible && options.modal) {\n that._overlay(wrapper.is(VISIBLE)).css({ opacity: 0.5 });\n }\n wrapper.on('mouseenter' + NS, TITLEBAR_BUTTONS, proxy(that._buttonEnter, that)).on('mouseleave' + NS, TITLEBAR_BUTTONS, proxy(that._buttonLeave, that)).on('click' + NS, '> ' + TITLEBAR_BUTTONS, proxy(that._windowActionHandler, that)).on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n windowContent.on('keydown' + NS, proxy(that._keydown, that)).on('focus' + NS, proxy(that._focus, that)).on('blur' + NS, proxy(that._blur, that));\n windowFrame = windowContent.find('.' + KCONTENTFRAME)[0];\n if (windowFrame && !globalWindow.data(WINDOWEVENTSHANDLED)) {\n globalWindow.on('blur' + NS, function () {\n var element = $(document.activeElement).parent(KWINDOWCONTENT);\n if (element.length) {\n var windowInstance = kendo.widgetInstance(element);\n windowInstance._focus();\n }\n });\n globalWindow.on('focus' + NS, function () {\n $(KWINDOWCONTENT).not(KDIALOGCONTENT).each(function (i, element) {\n kendo.widgetInstance($(element))._blur();\n });\n });\n globalWindow.data(WINDOWEVENTSHANDLED, true);\n }\n this._resizable();\n this._draggable();\n if (options.pinned && this.wrapper.is(':visible')) {\n that.pin();\n }\n id = element.attr('id');\n if (id) {\n id = id + '_wnd_title';\n wrapper.children(KWINDOWTITLEBAR).children(KWINDOWTITLE).attr('id', id);\n windowContent.attr({\n 'role': 'dialog',\n 'aria-labelledby': id\n });\n }\n wrapper.add(wrapper.children('.k-resize-handle,' + KWINDOWTITLEBAR)).on('mousedown' + NS, proxy(that.toFront, that));\n that.touchScroller = kendo.touchScroller(element);\n that._resizeHandler = proxy(that._onDocumentResize, that);\n that._marker = kendo.guid().substring(0, 8);\n $(window).on('resize' + NS + that._marker, that._resizeHandler);\n if (options.visible) {\n that.trigger(OPEN);\n that.trigger(ACTIVATE);\n }\n kendo.notify(that);\n if (this.options.modal) {\n this._tabKeyTrap = new TabKeyTrap(wrapper);\n this._tabKeyTrap.trap();\n this._tabKeyTrap.shouldTrap = function () {\n return windowContent.data('isFront');\n };\n }\n },\n _buttonEnter: function (e) {\n $(e.currentTarget).addClass(KHOVERSTATE);\n },\n _buttonLeave: function (e) {\n $(e.currentTarget).removeClass(KHOVERSTATE);\n },\n _focus: function () {\n this.wrapper.addClass(KFOCUSEDSTATE);\n },\n _blur: function () {\n this.wrapper.removeClass(KFOCUSEDSTATE);\n },\n _dimensions: function () {\n var wrapper = this.wrapper;\n var options = this.options;\n var width = options.width;\n var height = options.height;\n var maxHeight = options.maxHeight;\n var sizeClass = options.size;\n var dimensions = [\n 'minWidth',\n 'minHeight',\n 'maxWidth',\n 'maxHeight'\n ];\n var contentBoxSizing = wrapper.css('box-sizing') == 'content-box';\n var lrBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-left-width') + toInt(wrapper, 'border-right-width') : 0;\n var tbBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-top-width') + toInt(wrapper, 'border-bottom-width') : 0;\n var paddingTop = contentBoxSizing ? toInt(wrapper, 'padding-top') : 0;\n if (this.containment && !this._isPinned) {\n this._updateBoundaries();\n options.maxHeight = Math.min(this.containment.height - (tbBorderWidth + paddingTop), maxHeight);\n options.maxWidth = Math.min(this.containment.width - lrBorderWidth, options.maxWidth);\n }\n for (var i = 0; i < dimensions.length; i++) {\n var value = options[dimensions[i]] || '';\n if (value != Infinity) {\n wrapper.css(dimensions[i], value);\n }\n }\n if (maxHeight != Infinity) {\n this.element.css('maxHeight', maxHeight);\n }\n if (width) {\n wrapper.width(constrain(width, options.minWidth, options.maxWidth));\n } else {\n wrapper.width('');\n }\n if (height) {\n wrapper.height(constrain(height, options.minHeight, options.maxHeight));\n } else {\n wrapper.height('');\n }\n if (!options.visible) {\n wrapper.hide();\n }\n if (sizeClass && SIZE[sizeClass]) {\n wrapper.addClass(SIZE[sizeClass]);\n }\n },\n _position: function () {\n var wrapper = this.wrapper, position = this.options.position;\n this._updateBoundaries();\n if (this.containment) {\n position.top = Math.min(this.minTop + (position.top || 0), this.maxTop);\n position.left = Math.min(this.minLeft + (position.left || 0), this.maxLeft);\n }\n if (position.top === 0) {\n position.top = position.top.toString();\n }\n if (position.left === 0) {\n position.left = position.left.toString();\n }\n wrapper.css({\n top: position.top || '',\n left: position.left || ''\n });\n },\n _updateBoundaries: function () {\n var containment = this.containment;\n if (!containment) {\n return null;\n }\n containment.width = containment.innerWidth();\n containment.height = containment.innerHeight();\n if (parseInt(containment.width, 10) > containment[0].clientWidth) {\n containment.width -= kendo.support.scrollbar();\n }\n if (parseInt(containment.height, 10) > containment[0].clientHeight) {\n containment.height -= kendo.support.scrollbar();\n }\n containment.position = getPosition(containment[0]);\n if (this._isPinned) {\n this.minTop = this.minLeft = -Infinity;\n this.maxTop = this.maxLeft = Infinity;\n } else {\n this.minTop = containment.scrollTop();\n this.minLeft = containment.scrollLeft();\n this.maxLeft = this.minLeft + containment.width - outerWidth(this.wrapper, true);\n this.maxTop = this.minTop + containment.height - outerHeight(this.wrapper, true);\n }\n },\n _animationOptions: function (id) {\n var animation = this.options.animation;\n var basicAnimation = {\n open: { effects: {} },\n close: {\n hide: true,\n effects: {}\n }\n };\n return animation && animation[id] || basicAnimation[id];\n },\n _resize: function () {\n kendo.resize(this.element.children());\n },\n _resizable: function () {\n var resizable = this.options.resizable;\n var wrapper = this.wrapper;\n if (this.resizing) {\n wrapper.off('dblclick' + NS).children(KWINDOWRESIZEHANDLES).remove();\n this.resizing.destroy();\n this.resizing = null;\n }\n if (resizable) {\n wrapper.on('dblclick' + NS, KWINDOWTITLEBAR, proxy(function (e) {\n if (!$(e.target).closest('.k-window-action').length) {\n this.toggleMaximization();\n }\n }, this));\n each('n e s w se sw ne nw'.split(' '), function (index, handler) {\n wrapper.append(templates.resizeHandle(handler));\n });\n this.resizing = new WindowResizing(this);\n }\n wrapper = null;\n },\n _draggable: function () {\n var draggable = this.options.draggable;\n if (this.dragging) {\n this.dragging.destroy();\n this.dragging = null;\n }\n if (draggable) {\n this.dragging = new WindowDragging(this, draggable.dragHandle || KWINDOWTITLEBAR);\n }\n },\n _actions: function () {\n var options = this.options;\n var actions = options.actions;\n var pinned = options.pinned;\n var titlebar = this.wrapper.children(KWINDOWTITLEBAR);\n var container = titlebar.find('.k-window-actions');\n var windowSpecificCommands = [\n 'maximize',\n 'minimize'\n ];\n actions = $.map(actions, function (action) {\n action = pinned && action.toLowerCase() === 'pin' ? 'unpin' : action;\n return { name: windowSpecificCommands.indexOf(action.toLowerCase()) > -1 ? 'window-' + action : action };\n });\n container.html(kendo.render(templates.action, actions));\n },\n setOptions: function (options) {\n var that = this;\n var sizeClass = that.options.size;\n var cachedOptions = JSON.parse(JSON.stringify(options));\n extend(options.position, that.options.position);\n extend(options.position, cachedOptions.position);\n Widget.fn.setOptions.call(that, options);\n var scrollable = that.options.scrollable !== false;\n that.restore();\n if (typeof options.title !== 'undefined') {\n that.title(options.title);\n }\n that.wrapper.removeClass(SIZE[sizeClass]);\n that._dimensions();\n that._position();\n that._resizable();\n that._draggable();\n that._actions();\n if (typeof options.modal !== 'undefined') {\n var visible = that.options.visible !== false;\n that._enableDocumentScrolling();\n that._overlay(options.modal && visible);\n }\n that.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n },\n events: [\n OPEN,\n ACTIVATE,\n DEACTIVATE,\n CLOSE,\n MINIMIZE,\n MAXIMIZE,\n REFRESH,\n RESIZESTART,\n RESIZE,\n RESIZEEND,\n DRAGSTART,\n DRAGEND,\n ERROR\n ],\n options: {\n name: 'Window',\n animation: {\n open: {\n effects: {\n zoom: { direction: 'in' },\n fade: { direction: 'in' }\n },\n duration: 350\n },\n close: {\n effects: {\n zoom: {\n direction: 'out',\n properties: { scale: 0.7 }\n },\n fade: { direction: 'out' }\n },\n duration: 350,\n hide: true\n }\n },\n title: '',\n actions: ['Close'],\n autoFocus: true,\n modal: false,\n size: 'auto',\n resizable: true,\n draggable: true,\n minWidth: 90,\n minHeight: 50,\n maxWidth: Infinity,\n maxHeight: Infinity,\n pinned: false,\n scrollable: true,\n position: {},\n content: null,\n visible: null,\n height: null,\n width: null,\n appendTo: 'body',\n isMaximized: false,\n isMinimized: false\n },\n _closable: function () {\n return $.inArray('close', $.map(this.options.actions, function (x) {\n return x.toLowerCase();\n })) > -1;\n },\n _keydown: function (e) {\n var that = this, options = that.options, keys = kendo.keys, keyCode = e.keyCode, wrapper = that.wrapper, offset, handled, distance = 10, isMaximized = options.isMaximized, isMinimized = options.isMinimized, newWidth, newHeight, w, h;\n if (keyCode == keys.ESC && that._closable()) {\n e.stopPropagation();\n that._close(false);\n }\n if (e.target != e.currentTarget || that._closing) {\n return;\n }\n if (e.altKey && keyCode == 82) {\n that.refresh();\n }\n if (e.altKey && keyCode == 80) {\n if (that.options.pinned) {\n that.unpin();\n } else {\n that.pin();\n }\n }\n if (e.altKey && keyCode == keys.UP) {\n if (isMinimized) {\n that.restore();\n that.element.focus();\n } else if (!isMaximized) {\n that.maximize();\n that.element.focus();\n }\n } else if (e.altKey && keyCode == keys.DOWN) {\n if (!isMinimized && !isMaximized) {\n that.minimize();\n that.wrapper.focus();\n } else if (isMaximized) {\n that.restore();\n that.element.focus();\n }\n }\n offset = kendo.getOffset(wrapper);\n if (that.containment && !that._isPinned) {\n offset = that.options.position;\n }\n if (options.draggable && !e.ctrlKey && !e.altKey && !isMaximized) {\n that._updateBoundaries();\n if (keyCode == keys.UP) {\n offset.top = constrain(offset.top - distance, that.minTop, that.maxTop);\n handled = wrapper.css('top', offset.top);\n } else if (keyCode == keys.DOWN) {\n offset.top = constrain(offset.top + distance, that.minTop, that.maxTop);\n handled = wrapper.css('top', offset.top);\n } else if (keyCode == keys.LEFT) {\n offset.left = constrain(offset.left - distance, that.minLeft, that.maxLeft);\n handled = wrapper.css('left', offset.left);\n } else if (keyCode == keys.RIGHT) {\n offset.left = constrain(offset.left + distance, that.minLeft, that.maxLeft);\n handled = wrapper.css('left', offset.left);\n }\n }\n if (options.resizable && e.ctrlKey && !isMaximized && !isMinimized) {\n if (keyCode == keys.UP) {\n handled = true;\n newHeight = wrapper.height() - distance;\n } else if (keyCode == keys.DOWN) {\n handled = true;\n if (that.containment && !that._isPinned) {\n newHeight = Math.min(wrapper.height() + distance, that.containment.height - offset.top - toInt(wrapper, 'padding-top') - toInt(wrapper, 'borderBottomWidth') - toInt(wrapper, 'borderTopWidth'));\n } else {\n newHeight = wrapper.height() + distance;\n }\n }\n if (keyCode == keys.LEFT) {\n handled = true;\n newWidth = wrapper.width() - distance;\n } else if (keyCode == keys.RIGHT) {\n handled = true;\n if (that.containment && !that._isPinned) {\n newWidth = Math.min(wrapper.width() + distance, that.containment.width - offset.left - toInt(wrapper, 'borderLeftWidth') - toInt(wrapper, 'borderRightWidth'));\n } else {\n newWidth = wrapper.width() + distance;\n }\n }\n if (handled) {\n w = constrain(newWidth, options.minWidth, options.maxWidth);\n h = constrain(newHeight, options.minHeight, options.maxHeight);\n if (!isNaN(w)) {\n wrapper.width(w);\n that.options.width = w + 'px';\n }\n if (!isNaN(h)) {\n wrapper.height(h);\n that.options.height = h + 'px';\n }\n that.resize();\n }\n }\n if (handled) {\n e.preventDefault();\n }\n },\n _overlay: function (visible) {\n var overlay = this.containment ? this.containment.children(KOVERLAY) : this.appendTo.children(KOVERLAY), wrapper = this.wrapper;\n if (!overlay.length) {\n overlay = $('<div class=\\'k-overlay\\' />');\n }\n overlay.insertBefore(wrapper[0]).toggle(visible).css(ZINDEX, parseInt(wrapper.css(ZINDEX), 10) - 1);\n if (this.options.modal.preventScroll && !this.containment) {\n this._stopDocumentScrolling();\n }\n return overlay;\n },\n _actionForIcon: function (icon) {\n var iconClass = /\\bk-i(-\\w+)+\\b/.exec(icon[0].className)[0];\n return {\n 'k-i-close': '_close',\n 'k-i-window-maximize': 'maximize',\n 'k-i-window-minimize': 'minimize',\n 'k-i-window-restore': 'restore',\n 'k-i-refresh': 'refresh',\n 'k-i-pin': 'pin',\n 'k-i-unpin': 'unpin'\n }[iconClass];\n },\n _windowActionHandler: function (e) {\n if (this._closing) {\n return;\n }\n var icon = $(e.target).closest('.k-window-action').find('.k-icon');\n var action = this._actionForIcon(icon);\n if (action) {\n e.preventDefault();\n this[action]();\n return false;\n }\n },\n _modals: function () {\n var that = this;\n var zStack = $(KWINDOW).filter(function () {\n var dom = $(this);\n var object = that._object(dom);\n var options = object && object.options;\n return options && options.modal && options.visible && options.appendTo === that.options.appendTo && dom.is(VISIBLE);\n }).sort(function (a, b) {\n return +$(a).css('zIndex') - +$(b).css('zIndex');\n });\n that = null;\n return zStack;\n },\n _object: function (element) {\n var content = element.children(KWINDOWCONTENT);\n var widget = kendo.widgetInstance(content);\n if (widget) {\n return widget;\n }\n return undefined;\n },\n center: function () {\n var that = this, position = that.options.position, wrapper = that.wrapper, documentWindow = $(window), scrollTop = 0, scrollLeft = 0, newTop, newLeft;\n if (that.options.isMaximized) {\n return that;\n }\n if (that.options.pinned && !that._isPinned) {\n that.pin();\n }\n if (!that.options.pinned) {\n scrollTop = documentWindow.scrollTop();\n scrollLeft = documentWindow.scrollLeft();\n }\n if (this.containment && !that.options.pinned) {\n newTop = this.minTop + (this.maxTop - this.minTop) / 2;\n newLeft = this.minLeft + (this.maxLeft - this.minLeft) / 2;\n } else {\n that._scrollIsAppended = true;\n newLeft = scrollLeft + Math.max(0, (documentWindow.width() - wrapper.width()) / 2);\n newTop = scrollTop + Math.max(0, (documentWindow.height() - wrapper.height() - toInt(wrapper, 'paddingTop')) / 2);\n }\n wrapper.css({\n left: newLeft,\n top: newTop\n });\n position.top = newTop;\n position.left = newLeft;\n return that;\n },\n title: function (title) {\n var that = this, value, encoded = true, wrapper = that.wrapper, titleBar = wrapper.children(KWINDOWTITLEBAR), titleElement = titleBar.children(KWINDOWTITLE), titleBarHeight, display, visibility;\n if (!arguments.length) {\n return titleElement.html();\n }\n if ($.isPlainObject(title)) {\n value = typeof title.text !== 'undefined' ? title.text : '';\n encoded = title.encoded !== false;\n } else {\n value = title;\n }\n if (value === false) {\n wrapper.addClass('k-window-titleless');\n titleBar.remove();\n } else {\n if (!titleBar.length) {\n wrapper.prepend(templates.titlebar({ title: encoded ? kendo.htmlEncode(value) : value }));\n that._actions();\n titleBar = wrapper.children(KWINDOWTITLEBAR);\n } else {\n titleElement.html(encoded ? kendo.htmlEncode(value) : value);\n }\n visibility = wrapper.css('visibility');\n display = wrapper.css('display');\n if (visibility === HIDDEN) {\n wrapper.css({ display: '' });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({ display: display });\n } else {\n wrapper.css({\n visibility: HIDDEN,\n display: ''\n });\n titleBarHeight = parseInt(outerHeight(titleBar), 10);\n wrapper.css({\n visibility: visibility,\n display: display\n });\n }\n wrapper.css('padding-top', titleBarHeight);\n titleBar.css('margin-top', -titleBarHeight);\n }\n that.options.title = value;\n return that;\n },\n content: function (html, data) {\n var content = this.wrapper.children(KWINDOWCONTENT), scrollContainer = content.children('.km-scroll-container');\n content = scrollContainer[0] ? scrollContainer : content;\n if (!defined(html)) {\n return content.html();\n }\n this.angular('cleanup', function () {\n return { elements: content.children() };\n });\n kendo.destroy(this.element.children());\n content.empty().html(html);\n this.angular('compile', function () {\n var a = [];\n for (var i = content.length; --i >= 0;) {\n a.push({ dataItem: data });\n }\n return {\n elements: content.children(),\n data: a\n };\n });\n return this;\n },\n open: function () {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), contentElement = wrapper.children(KWINDOWCONTENT), overlay, otherModalsVisible, containmentContext = this.containment && !that._isPinned, doc = containmentContext ? this.containment : $(document);\n if (!that.trigger(OPEN)) {\n if (that._closing) {\n wrapper.kendoStop(true, true);\n }\n that._closing = false;\n that.toFront();\n if (options.autoFocus) {\n that.element.focus();\n }\n options.visible = true;\n if (options.modal) {\n otherModalsVisible = !!that._modals().length;\n overlay = that._overlay(otherModalsVisible);\n overlay.kendoStop(true, true);\n if (showOptions.duration && kendo.effects.Fade && !otherModalsVisible) {\n var overlayFx = kendo.fx(overlay).fadeIn();\n overlayFx.duration(showOptions.duration || 0);\n overlayFx.endValue(0.5);\n overlayFx.play();\n } else {\n overlay.css('opacity', 0.5);\n }\n overlay.show();\n $(window).on('focus' + MODAL_NS, function () {\n if (contentElement.data('isFront') && !$(document.activeElement).closest(contentElement).length) {\n that.element.focus();\n }\n });\n }\n if (!wrapper.is(VISIBLE)) {\n contentElement.css(OVERFLOW, HIDDEN);\n wrapper.show().kendoStop().kendoAnimate({\n effects: showOptions.effects,\n duration: showOptions.duration,\n complete: proxy(this._activate, this)\n });\n }\n }\n if (options.isMaximized) {\n that._containerScrollTop = doc.scrollTop();\n that._containerScrollLeft = doc.scrollLeft();\n that._stopDocumentScrolling();\n }\n if (this.options.pinned && !this._isPinned) {\n this.pin();\n }\n return that;\n },\n _activate: function () {\n var scrollable = this.options.scrollable !== false;\n if (this.options.autoFocus) {\n this.element.focus();\n }\n this.element.css(OVERFLOW, scrollable ? '' : 'hidden');\n kendo.resize(this.element.children());\n this.trigger(ACTIVATE);\n },\n _removeOverlay: function (suppressAnimation) {\n var modals = this._modals();\n var options = this.options;\n var hideOverlay = options.modal && !modals.length;\n var overlay = options.modal ? this._overlay(true) : $(undefined);\n var hideOptions = this._animationOptions('close');\n if (hideOverlay) {\n if (!suppressAnimation && hideOptions.duration && kendo.effects.Fade) {\n var overlayFx = kendo.fx(overlay).fadeOut();\n overlayFx.duration(hideOptions.duration || 0);\n overlayFx.startValue(0.5);\n overlayFx.play();\n } else {\n this._overlay(false).remove();\n }\n if (options.modal.preventScroll) {\n this._enableDocumentScrolling();\n }\n } else if (modals.length) {\n this._object(modals.last())._overlay(true);\n if (options.modal.preventScroll) {\n this._stopDocumentScrolling();\n }\n }\n },\n _close: function (systemTriggered) {\n var that = this, wrapper = that.wrapper, options = that.options, showOptions = this._animationOptions('open'), hideOptions = this._animationOptions('close'), containmentContext = this.containment && !that._isPinned, doc = containmentContext ? this.containment : $(document), defaultPrevented;\n if (that._closing) {\n return;\n }\n defaultPrevented = that.trigger(CLOSE, { userTriggered: !systemTriggered });\n that._closing = !defaultPrevented;\n if (wrapper.is(VISIBLE) && !defaultPrevented) {\n options.visible = false;\n $(KWINDOW).each(function (i, element) {\n var contentElement = $(element).children(KWINDOWCONTENT);\n if (element != wrapper && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.children(KOVERLAY).remove();\n }\n });\n this._removeOverlay();\n wrapper.kendoStop().kendoAnimate({\n effects: hideOptions.effects || showOptions.effects,\n reverse: hideOptions.reverse === true,\n duration: hideOptions.duration,\n complete: proxy(this._deactivate, this)\n });\n $(window).off(MODAL_NS);\n }\n if (that.options.isMaximized) {\n that._enableDocumentScrolling();\n if (that._containerScrollTop && that._containerScrollTop > 0) {\n doc.scrollTop(that._containerScrollTop);\n }\n if (that._containerScrollLeft && that._containerScrollLeft > 0) {\n doc.scrollLeft(that._containerScrollLeft);\n }\n }\n },\n _deactivate: function () {\n var that = this;\n that.wrapper.hide().css('opacity', '');\n that.trigger(DEACTIVATE);\n if (that.options.modal) {\n var lastModal = that._object(that._modals().last());\n if (lastModal) {\n lastModal.toFront();\n }\n }\n },\n close: function () {\n this._close(true);\n return this;\n },\n _actionable: function (element) {\n return $(element).is(TITLEBAR_BUTTONS + ',' + TITLEBAR_BUTTONS + ' .k-icon,:input,a');\n },\n _shouldFocus: function (target) {\n var active = activeElement(), element = this.element;\n return this.options.autoFocus && !$(active).is(element) && !this._actionable(target) && (!element.find(active).length || !element.find(target).length);\n },\n toFront: function (e) {\n var that = this, wrapper = that.wrapper, currentWindow = wrapper[0], containmentContext = that.containment && !that._isPinned, zIndex = +wrapper.css(ZINDEX), originalZIndex = zIndex, target = e && e.target || null;\n $(KWINDOW).each(function (i, element) {\n var windowObject = $(element), zIndexNew = windowObject.css(ZINDEX), contentElement = windowObject.children(KWINDOWCONTENT);\n if (!isNaN(zIndexNew)) {\n zIndex = Math.max(+zIndexNew, zIndex);\n }\n contentElement.data('isFront', element == currentWindow);\n if (element != currentWindow && contentElement.find('> .' + KCONTENTFRAME).length > 0) {\n contentElement.append(templates.overlay);\n }\n });\n if (!wrapper[0].style.zIndex || originalZIndex < zIndex) {\n wrapper.css(ZINDEX, zIndex + 2);\n }\n that.element.find('> .k-overlay').remove();\n if (that._shouldFocus(target)) {\n if (that.isMinimized()) {\n that.wrapper.focus();\n } else if ($(target).is(KOVERLAY)) {\n setTimeout(function () {\n that.element.focus();\n });\n } else {\n that.element.focus();\n }\n var scrollTop = containmentContext ? that.containment.scrollTop() : $(window).scrollTop(), windowTop = parseInt(wrapper.position().top, 10);\n if (!that.options.pinned && windowTop > 0 && windowTop < scrollTop) {\n if (scrollTop > 0) {\n $(window).scrollTop(windowTop);\n } else {\n wrapper.css('top', scrollTop);\n }\n }\n }\n wrapper = null;\n return that;\n },\n toggleMaximization: function () {\n if (this._closing) {\n return this;\n }\n return this[this.options.isMaximized ? 'restore' : 'maximize']();\n },\n restore: function () {\n var that = this;\n var options = that.options;\n var minHeight = options.minHeight;\n var restoreOptions = that.restoreOptions;\n var shouldRestrictTop;\n var container = that.containment && !that._isPinned ? that.containment : $(document);\n if (!options.isMaximized && !options.isMinimized) {\n return that;\n }\n if (minHeight && minHeight != Infinity) {\n that.wrapper.css('min-height', minHeight);\n }\n if (restoreOptions && !options.isMaximized) {\n restoreOptions.height = constrain(restoreOptions.height, that.options.minHeight, that.options.maxHeight);\n shouldRestrictTop = options.position.top + parseInt(restoreOptions.height, 10) > that.maxTop;\n if (shouldRestrictTop) {\n options.position.top = constrain(options.position.top, that.minTop, that.maxTop - parseInt(restoreOptions.height, 10));\n extend(restoreOptions, {\n left: options.position.left,\n top: options.position.top\n });\n }\n }\n that.wrapper.css({\n position: options.pinned ? 'fixed' : 'absolute',\n left: restoreOptions.left,\n top: restoreOptions.top,\n width: restoreOptions.width,\n height: restoreOptions.height\n }).removeClass(MAXIMIZEDSTATE).find('.k-window-content,.k-resize-handle').show().end().find('.k-window-titlebar .k-i-window-restore').parent().remove().end().end().find(MINIMIZE_MAXIMIZE).parent().show().end().end().find(PIN_UNPIN).parent().show();\n if (options.isMaximized) {\n that.wrapper.find('.k-i-window-maximize').parent().focus();\n } else if (options.isMinimized) {\n that.wrapper.find('.k-i-window-minimize').parent().focus();\n }\n that.options.width = restoreOptions.width;\n that.options.height = restoreOptions.height;\n if (!that.options.modal.preventScroll) {\n that._enableDocumentScrolling();\n }\n if (that._containerScrollTop && that._containerScrollTop > 0) {\n container.scrollTop(that._containerScrollTop);\n }\n if (that._containerScrollLeft && that._containerScrollLeft > 0) {\n container.scrollLeft(that._containerScrollLeft);\n }\n options.isMaximized = options.isMinimized = false;\n that.wrapper.removeAttr('tabindex');\n that.wrapper.removeAttr('aria-labelled-by');\n that.resize();\n return that;\n },\n _sizingAction: function (actionId, callback) {\n var that = this, wrapper = that.wrapper, style = wrapper[0].style, options = that.options;\n if (options.isMaximized || options.isMinimized) {\n return that;\n }\n that.restoreOptions = {\n width: style.width,\n height: style.height\n };\n wrapper.children(KWINDOWRESIZEHANDLES).hide().end().children(KWINDOWTITLEBAR).find(MINIMIZE_MAXIMIZE).parent().hide().eq(0).before(templates.action({ name: 'window-restore' }));\n callback.call(that);\n that.wrapper.children(KWINDOWTITLEBAR).find(PIN_UNPIN).parent().toggle(actionId !== 'maximize');\n that.trigger(actionId);\n wrapper.find('.k-i-window-restore').parent().focus();\n return that;\n },\n maximize: function () {\n this._sizingAction('maximize', function () {\n var that = this, wrapper = that.wrapper, containmentContext = this.containment && !that._isPinned, position = wrapper.position(), doc = $(document);\n extend(that.restoreOptions, {\n left: position.left + (containmentContext ? this.containment.scrollLeft() : 0),\n top: position.top + (containmentContext ? this.containment.scrollTop() : 0)\n });\n this._containerScrollTop = containmentContext ? this.containment.scrollTop() : doc.scrollTop();\n this._containerScrollLeft = containmentContext ? this.containment.scrollLeft() : doc.scrollLeft();\n that._stopDocumentScrolling();\n wrapper.css({\n top: containmentContext ? this.containment.scrollTop() : 0,\n left: containmentContext ? this.containment.scrollLeft() : 0,\n position: containmentContext ? 'absolute' : 'fixed'\n }).addClass(MAXIMIZEDSTATE);\n that.options.isMaximized = true;\n that._onDocumentResize();\n });\n return this;\n },\n _stopDocumentScrolling: function () {\n var that = this;\n var containment = that.containment;\n if (containment && !that._isPinned) {\n that._storeOverflowRule(containment);\n containment.css(OVERFLOW, HIDDEN);\n that.wrapper.css({\n maxWidth: containment.innerWidth(),\n maxHeight: containment.innerHeight()\n });\n return;\n }\n var $body = $('body');\n that._storeOverflowRule($body);\n $body.css(OVERFLOW, HIDDEN);\n var $html = $('html');\n that._storeOverflowRule($html);\n $html.css(OVERFLOW, HIDDEN);\n },\n _enableDocumentScrolling: function () {\n var that = this;\n var containment = that.containment;\n if (containment && !that._isPinned) {\n that._restoreOverflowRule(containment);\n that.wrapper.css({\n maxWidth: containment.width,\n maxHeight: containment.height\n });\n return;\n }\n that._restoreOverflowRule($(document.body));\n that._restoreOverflowRule($('html'));\n },\n _storeOverflowRule: function ($element) {\n if (this._isOverflowStored($element)) {\n return;\n }\n var overflowRule = $element.get(0).style.overflow;\n if (typeof overflowRule === 'string') {\n $element.data(DATADOCOVERFLOWRULE, overflowRule);\n }\n },\n _isOverflowStored: function ($element) {\n return typeof $element.data(DATADOCOVERFLOWRULE) === 'string';\n },\n _restoreOverflowRule: function ($element) {\n var overflowRule = $element.data(DATADOCOVERFLOWRULE);\n if (overflowRule !== null && overflowRule !== undefined) {\n $element.css(OVERFLOW, overflowRule);\n $element.removeData(DATADOCOVERFLOWRULE);\n } else {\n $element.css(OVERFLOW, '');\n }\n },\n isMaximized: function () {\n return this.options.isMaximized;\n },\n minimize: function () {\n this._sizingAction('minimize', function () {\n var that = this;\n that.wrapper.css({\n height: '',\n minHeight: ''\n });\n that.element.hide();\n that.options.isMinimized = true;\n });\n this.wrapper.attr('tabindex', 0);\n this.wrapper.attr('aria-labelled-by', this.element.attr('aria-labelled-by'));\n this._updateBoundaries();\n return this;\n },\n isMinimized: function () {\n return this.options.isMinimized;\n },\n pin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, options = that.options, position = options.position, top = this.containment ? getPosition(wrapper[0]).top + toInt(this.containment, 'borderTopWidth') : toInt(wrapper, 'top'), left = this.containment ? getPosition(wrapper[0]).left + toInt(this.containment, 'borderLeftWidth') : toInt(wrapper, 'left');\n if (!that.options.isMaximized) {\n position.top = top;\n position.left = left;\n if (that._scrollIsAppended && (!this.containment || this.containment.css('position') !== 'fixed')) {\n position.top -= win.scrollTop();\n position.left -= win.scrollLeft();\n that._scrollIsAppended = false;\n }\n wrapper.css(extend(position, { position: 'fixed' }));\n wrapper.children(KWINDOWTITLEBAR).find(KPIN).addClass('k-i-unpin').removeClass('k-i-pin');\n that._isPinned = true;\n that.options.pinned = true;\n if (this.containment) {\n options.maxWidth = options.maxHeight = Infinity;\n wrapper.css({\n maxWidth: '',\n maxHeight: ''\n });\n }\n }\n },\n unpin: function () {\n var that = this, win = $(window), wrapper = that.wrapper, options = that.options, position = that.options.position, containment = that.containment, top = parseInt(wrapper.css('top'), 10) + win.scrollTop(), left = parseInt(wrapper.css('left'), 10) + win.scrollLeft();\n if (!that.options.isMaximized) {\n that._isPinned = false;\n that._scrollIsAppended = true;\n that.options.pinned = false;\n if (containment) {\n that._updateBoundaries();\n options.maxWidth = Math.min(containment.width, options.maxWidth);\n options.maxHeight = Math.min(containment.height - toInt(wrapper, 'padding-top'), options.maxHeight);\n wrapper.css({\n maxWidth: options.maxWidth,\n maxHeight: options.maxHeight\n });\n if (top < containment.position.top) {\n top = that.minTop;\n } else if (top > containment.position.top + containment.height) {\n top = that.maxTop;\n } else {\n top = top + containment.scrollTop() - (containment.position.top + toInt(containment, 'border-top-width'));\n }\n if (left < containment.position.left) {\n left = that.minLeft;\n } else if (left > containment.position.left + containment.width) {\n left = that.maxLeft;\n } else {\n left = left + containment.scrollLeft() - (containment.position.left + toInt(containment, 'border-left-width'));\n }\n }\n position.top = constrain(top, that.minTop, that.maxTop);\n position.left = constrain(left, that.minLeft, that.maxLeft);\n wrapper.css(extend(position, { position: '' }));\n wrapper.children(KWINDOWTITLEBAR).find(KUNPIN).addClass('k-i-pin').removeClass('k-i-unpin');\n }\n },\n _onDocumentResize: function () {\n var that = this, wrapper = that.wrapper, wnd = $(window), zoomLevel = kendo.support.zoomLevel(), contentBoxSizing = wrapper.css('box-sizing') == 'content-box', w, h;\n if (!that.options.isMaximized) {\n return;\n }\n var lrBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-left-width') + toInt(wrapper, 'border-right-width') : 0;\n var tbBorderWidth = contentBoxSizing ? toInt(wrapper, 'border-top-width') + toInt(wrapper, 'border-bottom-width') : 0;\n var paddingTop = contentBoxSizing ? toInt(wrapper, 'padding-top') : 0;\n if (that.containment && !that._isPinned) {\n w = that.containment.innerWidth() - lrBorderWidth;\n h = that.containment.innerHeight() - (tbBorderWidth + paddingTop);\n } else {\n w = wnd.width() / zoomLevel - lrBorderWidth;\n h = wnd.height() / zoomLevel - (tbBorderWidth + paddingTop);\n }\n wrapper.css({\n width: w,\n height: h\n });\n that.options.width = w;\n that.options.height = h;\n that.resize();\n },\n refresh: function (options) {\n var that = this, initOptions = that.options, element = $(that.element), iframe, showIframe, url;\n if (!isPlainObject(options)) {\n options = { url: options };\n }\n options = extend({}, initOptions.content, options);\n showIframe = defined(initOptions.iframe) ? initOptions.iframe : options.iframe;\n url = options.url;\n if (url) {\n if (!defined(showIframe)) {\n showIframe = !isLocalUrl(url);\n }\n if (!showIframe) {\n that._ajaxRequest(options);\n } else {\n iframe = element.find('.' + KCONTENTFRAME)[0];\n if (iframe) {\n iframe.src = url || iframe.src;\n } else {\n element.html(templates.contentFrame(extend({}, initOptions, { content: options })));\n }\n element.find('.' + KCONTENTFRAME).unbind('load' + NS).on('load' + NS, proxy(this._triggerRefresh, this));\n }\n } else {\n if (options.template) {\n that.content(template(options.template)({}));\n }\n that.trigger(REFRESH);\n }\n element.toggleClass('k-window-iframecontent', !!showIframe);\n return that;\n },\n _triggerRefresh: function () {\n this.trigger(REFRESH);\n },\n _ajaxComplete: function () {\n clearTimeout(this._loadingIconTimeout);\n this.wrapper.find(REFRESHICON).removeClass(LOADING);\n },\n _ajaxError: function (xhr, status) {\n this.trigger(ERROR, {\n status: status,\n xhr: xhr\n });\n },\n _ajaxSuccess: function (contentTemplate) {\n return function (data) {\n var html = data;\n if (contentTemplate) {\n html = template(contentTemplate)(data || {});\n }\n this.content(html, data);\n this.element.prop('scrollTop', 0);\n this.trigger(REFRESH);\n };\n },\n _showLoading: function () {\n this.wrapper.find(REFRESHICON).addClass(LOADING);\n },\n _ajaxRequest: function (options) {\n this._loadingIconTimeout = setTimeout(proxy(this._showLoading, this), 100);\n $.ajax(extend({\n type: 'GET',\n dataType: 'html',\n cache: false,\n error: proxy(this._ajaxError, this),\n complete: proxy(this._ajaxComplete, this),\n success: proxy(this._ajaxSuccess(options.template), this)\n }, options));\n },\n _destroy: function () {\n if (this.resizing) {\n this.resizing.destroy();\n }\n if (this.dragging) {\n this.dragging.destroy();\n }\n this.wrapper.off(NS).children(KWINDOWCONTENT).off(NS).end().find('.k-resize-handle,.k-window-titlebar').off(NS);\n $(window).off('resize' + NS + this._marker);\n $(window).off(MODAL_NS);\n $(window).off(NS);\n clearTimeout(this._loadingIconTimeout);\n Widget.fn.destroy.call(this);\n this.unbind(undefined);\n kendo.destroy(this.wrapper);\n this._removeOverlay(true);\n },\n destroy: function () {\n this._destroy();\n this.wrapper.empty().remove();\n this.wrapper = this.appendTo = this.element = $();\n },\n _createWindow: function () {\n var contentHtml = this.element, options = this.options, iframeSrcAttributes, wrapper, isRtl = kendo.support.isRtl(contentHtml);\n if (options.scrollable === false) {\n contentHtml.css('overflow', 'hidden');\n }\n wrapper = $(templates.wrapper(options));\n iframeSrcAttributes = contentHtml.find('iframe:not(.k-content)').map(function () {\n var src = this.getAttribute('src');\n this.src = '';\n return src;\n });\n wrapper.toggleClass('k-rtl', isRtl).append(contentHtml).find('iframe:not(.k-content)').each(function (index) {\n this.src = iframeSrcAttributes[index];\n });\n if (this.containment) {\n this.containment.prepend(wrapper);\n } else if (this.appendTo) {\n wrapper.appendTo(this.appendTo);\n }\n wrapper.find('.k-window-title').css(isRtl ? 'left' : 'right', outerWidth(wrapper.find('.k-window-actions')) + 10);\n contentHtml.css('visibility', '').show();\n contentHtml.find('[data-role=editor]').each(function () {\n var editor = $(this).data('kendoEditor');\n if (editor) {\n editor.refresh();\n }\n });\n wrapper = contentHtml = null;\n }\n });\n templates = {\n wrapper: template('<div class=\\'k-widget k-window\\' />'),\n action: template('<a role=\\'button\\' href=\\'\\\\#\\' class=\\'k-button k-bare k-button-icon k-window-action\\' aria-label=\\'#= name #\\'>' + '<span class=\\'k-icon k-i-#= name.toLowerCase() #\\'></span>' + '</a>'),\n titlebar: template('<div class=\\'k-window-titlebar k-header\\'>' + '<span class=\\'k-window-title\\'>#= title #</span>' + '<div class=\\'k-window-actions\\' />' + '</div>'),\n overlay: '<div class=\\'k-overlay\\' />',\n contentFrame: template('<iframe frameborder=\\'0\\' title=\\'#= title #\\' class=\\'' + KCONTENTFRAME + '\\' ' + 'src=\\'#= content.url #\\'>' + 'This page requires frames in order to show content' + '</iframe>'),\n resizeHandle: template('<div class=\\'k-resize-handle k-resize-#= data #\\'></div>')\n };\n function WindowResizing(wnd) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: '>' + KWINDOWRESIZEHANDLES,\n group: wnd.wrapper.id + '-resizing',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that)\n });\n that._draggable.userEvents.bind('press', proxy(that.addOverlay, that));\n that._draggable.userEvents.bind('release', proxy(that.removeOverlay, that));\n }\n WindowResizing.prototype = {\n addOverlay: function () {\n this.owner.wrapper.append(templates.overlay);\n },\n removeOverlay: function () {\n this.owner.wrapper.find(KOVERLAY).remove();\n },\n dragstart: function (e) {\n var that = this;\n var wnd = that.owner;\n var wrapper = wnd.wrapper;\n that._preventDragging = wnd.trigger(RESIZESTART);\n if (that._preventDragging) {\n return;\n }\n that.elementPadding = parseInt(wrapper.css('padding-top'), 10);\n that.initialPosition = kendo.getOffset(wrapper, 'position');\n that.resizeDirection = e.currentTarget.prop('className').replace('k-resize-handle k-resize-', '');\n that.initialSize = {\n width: wrapper.width(),\n height: wrapper.height()\n };\n wnd._updateBoundaries();\n that.containerOffset = wnd.containment ? wnd.containment.position : kendo.getOffset(wnd.appendTo, 'position');\n var offsetParent = wrapper.offsetParent();\n if (offsetParent.is('html')) {\n that.containerOffset.top = that.containerOffset.left = 0;\n } else {\n var marginTop = offsetParent.css('margin-top');\n var marginLeft = offsetParent.css('margin-left');\n var hasMargin = !zero.test(marginTop) || !zero.test(marginLeft);\n if (hasMargin) {\n var wrapperPosition = getPosition(wrapper[0]);\n var relativeElMarginLeft = wrapperPosition.left - that.containerOffset.left - that.initialPosition.left;\n var relativeElMarginTop = wrapperPosition.top - that.containerOffset.top - that.initialPosition.top;\n that._relativeElMarginLeft = relativeElMarginLeft > 1 ? relativeElMarginLeft : 0;\n that._relativeElMarginTop = relativeElMarginTop > 1 ? relativeElMarginTop : 0;\n that.initialPosition.left += that._relativeElMarginLeft;\n that.initialPosition.top += that._relativeElMarginTop;\n }\n }\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper, options = wnd.options, position = options.position, direction = that.resizeDirection, containerOffset = that.containerOffset, initialPosition = that.initialPosition, initialSize = that.initialSize, containmentContext = wnd.containment && !wnd._isPinned, rtl = kendo.support.isRtl(wnd.containment), leftRtlOffset = containmentContext && rtl && wnd.containment.innerWidth() > wnd.containment.width ? kendo.support.scrollbar() : 0, scrollOffset = containmentContext ? {\n top: wnd.containment.scrollTop(),\n left: wnd.containment.scrollLeft()\n } : {\n top: 0,\n left: 0\n }, newWidth, newHeight, windowBottom, windowRight, x = Math.max(e.x.location, 0), y = Math.max(e.y.location, 0);\n if (direction.indexOf('e') >= 0) {\n if (wnd.containment && x - initialSize.width >= wnd.maxLeft - scrollOffset.left + containerOffset.left + leftRtlOffset) {\n newWidth = wnd.maxLeft + leftRtlOffset - initialPosition.left + initialSize.width - scrollOffset.left;\n } else {\n newWidth = x - initialPosition.left - containerOffset.left;\n }\n wrapper.width(constrain(newWidth, options.minWidth, options.maxWidth));\n } else if (direction.indexOf('w') >= 0) {\n windowRight = initialPosition.left + initialSize.width + containerOffset.left;\n newWidth = constrain(windowRight - x, options.minWidth, options.maxWidth);\n position.left = windowRight - newWidth - containerOffset.left - leftRtlOffset - (that._relativeElMarginLeft || 0) + scrollOffset.left;\n if (wnd.containment && position.left <= wnd.minLeft) {\n position.left = wnd.minLeft;\n newWidth = constrain(windowRight - leftRtlOffset - position.left - containerOffset.left + scrollOffset.left, options.minWidth, options.maxWidth);\n }\n wrapper.css({\n left: position.left,\n width: newWidth\n });\n }\n var newWindowTop = y;\n if (wnd.options.pinned) {\n newWindowTop -= $(window).scrollTop();\n }\n if (direction.indexOf('s') >= 0) {\n newHeight = newWindowTop - initialPosition.top - that.elementPadding - containerOffset.top;\n if (newWindowTop - initialSize.height - that.elementPadding >= wnd.maxTop + containerOffset.top - scrollOffset.top) {\n newHeight = wnd.maxTop - initialPosition.top + initialSize.height - scrollOffset.top;\n }\n wrapper.height(constrain(newHeight, options.minHeight, options.maxHeight));\n } else if (direction.indexOf('n') >= 0) {\n windowBottom = initialPosition.top + initialSize.height + containerOffset.top;\n newHeight = constrain(windowBottom - newWindowTop, options.minHeight, options.maxHeight);\n position.top = windowBottom - newHeight - containerOffset.top - (that._relativeElMarginTop || 0) + scrollOffset.top;\n if (position.top <= wnd.minTop && wnd.containment) {\n position.top = wnd.minTop;\n newHeight = constrain(windowBottom - position.top - containerOffset.top + scrollOffset.top, options.minHeight, options.maxHeight);\n }\n wrapper.css({\n top: position.top,\n height: newHeight\n });\n }\n if (newWidth) {\n wnd.options.width = newWidth + 'px';\n }\n if (newHeight) {\n wnd.options.height = newHeight + 'px';\n }\n wnd.resize();\n },\n dragend: function (e) {\n if (this._preventDragging) {\n return;\n }\n var that = this, wnd = that.owner, wrapper = wnd.wrapper;\n wrapper.children(KWINDOWRESIZEHANDLES).not(e.currentTarget).show();\n $(BODY).css(CURSOR, '');\n if (wnd.touchScroller) {\n wnd.touchScroller.reset();\n }\n if (e.keyCode == 27) {\n wrapper.css(that.initialPosition).css(that.initialSize);\n }\n wnd.trigger(RESIZEEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n function WindowDragging(wnd, dragHandle) {\n var that = this;\n that.owner = wnd;\n that._preventDragging = false;\n that._draggable = new Draggable(wnd.wrapper, {\n filter: dragHandle,\n group: wnd.wrapper.id + '-moving',\n dragstart: proxy(that.dragstart, that),\n drag: proxy(that.drag, that),\n dragend: proxy(that.dragend, that),\n dragcancel: proxy(that.dragcancel, that)\n });\n that._draggable.userEvents.stopPropagation = false;\n }\n WindowDragging.prototype = {\n dragstart: function (e) {\n var wnd = this.owner, draggable = wnd.options.draggable, element = wnd.element, actions = element.find('.k-window-actions'), containerOffset = kendo.getOffset(wnd.appendTo);\n this._preventDragging = wnd.trigger(DRAGSTART) || !draggable;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n wnd.initialWindowPosition = kendo.getOffset(wnd.wrapper, 'position');\n wnd.initialPointerPosition = {\n left: wnd.options.position.left,\n top: wnd.options.position.top\n };\n wnd.startPosition = {\n left: e.x.client - wnd.initialWindowPosition.left,\n top: e.y.client - wnd.initialWindowPosition.top\n };\n wnd._updateBoundaries();\n if (!wnd.containment) {\n if (actions.length > 0) {\n wnd.minLeft = outerWidth(actions) + parseInt(actions.css('right'), 10) - outerWidth(element);\n } else {\n wnd.minLeft = 20 - outerWidth(element);\n }\n wnd.minLeft -= containerOffset.left;\n wnd.minTop = -containerOffset.top;\n }\n wnd.wrapper.append(templates.overlay).children(KWINDOWRESIZEHANDLES).hide();\n $(BODY).css(CURSOR, e.currentTarget.css(CURSOR));\n },\n drag: function (e) {\n var wnd = this.owner;\n var position = wnd.options.position;\n var axis = wnd.options.draggable.axis;\n var left;\n var top;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n if (!axis || axis.toLowerCase() === 'x') {\n left = e.x.client - wnd.startPosition.left;\n if (wnd.containment && !wnd._isPinned) {\n left += wnd.containment.scrollLeft();\n }\n position.left = constrain(left, wnd.minLeft, wnd.maxLeft);\n }\n if (!axis || axis.toLowerCase() === 'y') {\n top = e.y.client - wnd.startPosition.top;\n if (wnd.containment && !wnd._isPinned) {\n top += wnd.containment.scrollTop();\n }\n position.top = constrain(top, wnd.minTop, wnd.maxTop);\n }\n if (kendo.support.transforms) {\n $(wnd.wrapper).css('transform', 'translate(' + (position.left - wnd.initialPointerPosition.left) + 'px, ' + (position.top - wnd.initialPointerPosition.top) + 'px)');\n } else {\n $(wnd.wrapper).css(position);\n }\n },\n _finishDrag: function () {\n var wnd = this.owner;\n wnd.wrapper.children(KWINDOWRESIZEHANDLES).toggle(!wnd.options.isMinimized).end().find(KOVERLAY).remove();\n $(BODY).css(CURSOR, '');\n },\n dragcancel: function (e) {\n if (this._preventDragging) {\n return;\n }\n this._finishDrag();\n e.currentTarget.closest(KWINDOW).css(this.owner.initialWindowPosition);\n },\n dragend: function () {\n var wnd = this.owner;\n if (this._preventDragging || wnd.isMaximized()) {\n return;\n }\n $(wnd.wrapper).css(wnd.options.position).css('transform', '');\n this._finishDrag();\n wnd.trigger(DRAGEND);\n return false;\n },\n destroy: function () {\n if (this._draggable) {\n this._draggable.destroy();\n }\n this._draggable = this.owner = null;\n }\n };\n kendo.ui.plugin(Window);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.list', [\n 'kendo.data',\n 'kendo.popup'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'list',\n name: 'List',\n category: 'framework',\n depends: [\n 'data',\n 'popup'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, outerHeight = kendo._outerHeight, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, Widget = ui.Widget, keys = kendo.keys, support = kendo.support, htmlEncode = kendo.htmlEncode, activeElement = kendo._activeElement, outerWidth = kendo._outerWidth, ObservableArray = kendo.data.ObservableArray, ID = 'id', CHANGE = 'change', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', LOADING = 'k-i-loading', GROUPHEADER = '.k-group-header', ITEMSELECTOR = '.k-item', LABELIDPART = '_label', OPEN = 'open', CLOSE = 'close', CASCADE = 'cascade', SELECT = 'select', SELECTED = 'selected', REQUESTSTART = 'requestStart', REQUESTEND = 'requestEnd', extend = $.extend, proxy = $.proxy, isArray = $.isArray, browser = support.browser, HIDDENCLASS = 'k-hidden', WIDTH = 'width', isIE = browser.msie, isIE8 = isIE && browser.version < 9, quotRegExp = /\"/g, alternativeNames = {\n 'ComboBox': 'DropDownList',\n 'DropDownList': 'ComboBox'\n };\n var List = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n var that = this, ns = that.ns, id;\n Widget.fn.init.call(that, element, options);\n element = that.element;\n options = that.options;\n that._isSelect = element.is(SELECT);\n if (that._isSelect && that.element[0].length) {\n if (!options.dataSource) {\n options.dataTextField = options.dataTextField || 'text';\n options.dataValueField = options.dataValueField || 'value';\n }\n }\n that.ul = $('<ul unselectable=\"on\" class=\"k-list k-reset\"/>').attr({\n tabIndex: -1,\n 'aria-hidden': true\n });\n that.list = $('<div class=\\'k-list-container\\'/>').append(that.ul).on('mousedown' + ns, proxy(that._listMousedown, that));\n id = element.attr(ID);\n if (!id) {\n id = kendo.guid();\n }\n that.list.attr(ID, id + '-list');\n that.ul.attr(ID, id + '_listbox');\n if (options.columns && options.columns.length) {\n that.ul.removeClass('k-list').addClass('k-grid-list');\n that._columnsHeader();\n }\n that._header();\n that._noData();\n that._footer();\n that._accessors();\n that._initValue();\n },\n options: {\n valuePrimitive: false,\n footerTemplate: '',\n headerTemplate: '',\n noDataTemplate: 'No data found.'\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (options && options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (options.columns && options.columns.length) {\n this._columnsHeader();\n }\n this._header();\n this._noData();\n this._footer();\n this._renderFooter();\n this._renderNoData();\n },\n focus: function () {\n this._focused.focus();\n },\n readonly: function (readonly) {\n this._editable({\n readonly: readonly === undefined ? true : readonly,\n disable: false\n });\n },\n enable: function (enable) {\n this._editable({\n readonly: false,\n disable: !(enable = enable === undefined ? true : enable)\n });\n },\n _header: function () {\n var list = this;\n var header = $(list.header);\n var template = list.options.headerTemplate;\n this._angularElement(header, 'cleanup');\n kendo.destroy(header);\n header.remove();\n if (!template) {\n list.header = null;\n return;\n }\n var headerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n header = $(headerTemplate({}));\n list.header = header[0] ? header : null;\n list.list.prepend(header);\n this._angularElement(list.header, 'compile');\n },\n _columnsHeader: function () {\n var list = this;\n var columnsHeader = $(list.columnsHeader);\n this._angularElement(columnsHeader, 'cleanup');\n kendo.destroy(columnsHeader);\n columnsHeader.remove();\n var header = '<div class=\\'k-grid-header\\'><div class=\\'k-grid-header-wrap\\'><table>';\n var colGroup = '<colgroup>';\n var row = '<tr>';\n for (var idx = 0; idx < this.options.columns.length; idx++) {\n var currentColumn = this.options.columns[idx];\n var title = currentColumn.title || currentColumn.field || '';\n var template = currentColumn.headerTemplate || title;\n var columnsHeaderTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n var currentWidth = currentColumn.width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n colGroup += '<col ' + widthStyle + '/>';\n row += '<th class=\\'k-header\\'>';\n row += columnsHeaderTemplate(currentColumn);\n row += '</th>';\n }\n colGroup += '</colgroup>';\n row += '</tr>';\n header += colGroup;\n header += row;\n header += '</table></div></div>';\n list.columnsHeader = columnsHeader = $(header);\n list.list.prepend(columnsHeader);\n this._angularElement(list.columnsHeader, 'compile');\n },\n _noData: function () {\n var list = this;\n var noData = $(list.noData);\n var template = list.options.noDataTemplate;\n list.angular('cleanup', function () {\n return { elements: noData };\n });\n kendo.destroy(noData);\n noData.remove();\n if (!template) {\n list.noData = null;\n return;\n }\n list.noData = $('<div class=\"k-nodata\" style=\"display:none\"><div></div></div>').appendTo(list.list);\n list.noDataTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _footer: function () {\n var list = this;\n var footer = $(list.footer);\n var template = list.options.footerTemplate;\n this._angularElement(footer, 'cleanup');\n kendo.destroy(footer);\n footer.remove();\n if (!template) {\n list.footer = null;\n return;\n }\n list.footer = $('<div class=\"k-footer\"></div>').appendTo(list.list);\n list.footerTemplate = typeof template !== 'function' ? kendo.template(template) : template;\n },\n _listOptions: function (options) {\n var that = this;\n var currentOptions = that.options;\n var virtual = currentOptions.virtual;\n var changeEventOption = { change: proxy(that._listChange, that) };\n var listBoundHandler = proxy(that._listBound, that);\n virtual = typeof virtual === 'object' ? virtual : {};\n options = $.extend({\n autoBind: false,\n selectable: true,\n dataSource: that.dataSource,\n click: proxy(that._click, that),\n activate: proxy(that._activateItem, that),\n columns: currentOptions.columns,\n deactivate: proxy(that._deactivateItem, that),\n dataBinding: function () {\n that.trigger('dataBinding');\n },\n dataBound: listBoundHandler,\n height: currentOptions.height,\n dataValueField: currentOptions.dataValueField,\n dataTextField: currentOptions.dataTextField,\n groupTemplate: currentOptions.groupTemplate,\n fixedGroupTemplate: currentOptions.fixedGroupTemplate,\n template: currentOptions.template\n }, options, virtual, changeEventOption);\n if (!options.template) {\n options.template = '#:' + kendo.expr(options.dataTextField, 'data') + '#';\n }\n if (currentOptions.$angular) {\n options.$angular = currentOptions.$angular;\n }\n return options;\n },\n _initList: function () {\n var that = this;\n var listOptions = that._listOptions({ selectedItemChange: proxy(that._listChange, that) });\n if (!that.options.virtual) {\n that.listView = new kendo.ui.StaticList(that.ul, listOptions);\n } else {\n that.listView = new kendo.ui.VirtualList(that.ul, listOptions);\n }\n that.listView.bind('listBound', proxy(that._listBound, that));\n that._setListValue();\n },\n _setListValue: function (value) {\n value = value || this.options.value;\n if (value !== undefined) {\n this.listView.value(value).done(proxy(this._updateSelectionState, this));\n }\n },\n _updateSelectionState: $.noop,\n _listMousedown: function (e) {\n if (!this.filterInput || this.filterInput[0] !== e.target) {\n e.preventDefault();\n }\n },\n _isFilterEnabled: function () {\n var filter = this.options.filter;\n return filter && filter !== 'none';\n },\n _hideClear: function () {\n var list = this;\n if (list._clear) {\n list._clear.addClass(HIDDENCLASS);\n }\n },\n _showClear: function () {\n if (this._clear) {\n this._clear.removeClass(HIDDENCLASS);\n }\n },\n _clearValue: function () {\n this._clearText();\n this._accessor('');\n this.listView.value([]);\n if (this._isSelect) {\n this._customOption = undefined;\n }\n if (this._isFilterEnabled() && !this.options.enforceMinLength) {\n this._filter({\n word: '',\n open: false\n });\n if (this.options.highlightFirst) {\n this.listView.focus(0);\n }\n }\n this._change();\n },\n _clearText: function () {\n this.text('');\n },\n _clearFilter: function () {\n if (!this.options.virtual) {\n this.listView.bound(false);\n }\n this._filterSource();\n },\n _filterSource: function (filter, force) {\n var that = this;\n var options = that.options;\n var isMultiColumnFiltering = options.filterFields && filter && filter.logic && filter.filters && filter.filters.length;\n var dataSource = that.dataSource;\n var expression = extend({}, dataSource.filter() || {});\n var resetPageSettings = filter || expression.filters && expression.filters.length && !filter;\n var removed = removeFiltersForField(expression, options.dataTextField);\n this._clearFilterExpressions(expression);\n if ((filter || removed) && that.trigger('filtering', { filter: filter })) {\n return;\n }\n var newExpression = {\n filters: [],\n logic: 'and'\n };\n if (isMultiColumnFiltering) {\n newExpression.filters.push(filter);\n } else {\n this._pushFilterExpression(newExpression, filter);\n }\n if (isValidFilterExpr(expression)) {\n if (newExpression.logic === expression.logic) {\n newExpression.filters = newExpression.filters.concat(expression.filters);\n } else {\n newExpression.filters.push(expression);\n }\n }\n if (that._cascading) {\n this.listView.setDSFilter(newExpression);\n }\n var dataSourceState = extend({}, {\n page: resetPageSettings ? 1 : dataSource.page(),\n pageSize: resetPageSettings ? dataSource.options.pageSize : dataSource.pageSize(),\n sort: dataSource.sort(),\n filter: dataSource.filter(),\n group: dataSource.group(),\n aggregate: dataSource.aggregate()\n }, { filter: newExpression });\n return dataSource[force ? 'read' : 'query'](dataSource._mergeState(dataSourceState));\n },\n _pushFilterExpression: function (newExpression, filter) {\n if (isValidFilterExpr(filter) && filter.value !== '') {\n newExpression.filters.push(filter);\n }\n },\n _clearFilterExpressions: function (expression) {\n if (!expression.filters) {\n return;\n }\n var filtersToRemove;\n for (var i = 0; i < expression.filters.length; i++) {\n if ('fromFilter' in expression.filters[i]) {\n filtersToRemove = i;\n }\n }\n if (!isNaN(filtersToRemove)) {\n expression.filters.splice(filtersToRemove, 1);\n }\n },\n _angularElement: function (element, action) {\n if (!element) {\n return;\n }\n this.angular(action, function () {\n return { elements: element };\n });\n },\n _renderNoData: function () {\n var list = this;\n var noData = list.noData;\n if (!noData) {\n return;\n }\n this._angularElement(noData, 'cleanup');\n noData.children(':first').html(list.noDataTemplate({ instance: list }));\n this._angularElement(noData, 'compile');\n },\n _toggleNoData: function (show) {\n $(this.noData).toggle(show);\n },\n _toggleHeader: function (show) {\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n groupHeader.toggle(show);\n },\n _renderFooter: function () {\n var list = this;\n var footer = list.footer;\n if (!footer) {\n return;\n }\n this._angularElement(footer, 'cleanup');\n footer.html(list.footerTemplate({ instance: list }));\n this._angularElement(footer, 'compile');\n },\n _allowOpening: function () {\n return this.options.noDataTemplate || this.dataSource.flatView().length;\n },\n _initValue: function () {\n var that = this, value = that.options.value;\n if (value !== null) {\n that.element.val(value);\n } else {\n value = that._accessor();\n that.options.value = value;\n }\n that._old = value;\n },\n _ignoreCase: function () {\n var that = this, model = that.dataSource.reader.model, field;\n if (model && model.fields) {\n field = model.fields[that.options.dataTextField];\n if (field && field.type && field.type !== 'string') {\n that.options.ignoreCase = false;\n }\n }\n },\n _focus: function (candidate) {\n return this.listView.focus(candidate);\n },\n _filter: function (options) {\n var that = this;\n var widgetOptions = that.options;\n var word = options.word;\n var filterFields = widgetOptions.filterFields;\n var field = widgetOptions.dataTextField;\n var expression;\n if (filterFields && filterFields.length) {\n expression = {\n logic: 'or',\n filters: [],\n fromFilter: true\n };\n for (var i = 0; i < filterFields.length; i++) {\n this._pushFilterExpression(expression, that._buildExpression(word, filterFields[i]));\n }\n } else {\n expression = that._buildExpression(word, field);\n }\n that._open = options.open;\n that._filterSource(expression);\n },\n _buildExpression: function (value, field) {\n var that = this;\n var widgetOptions = that.options;\n var ignoreCase = widgetOptions.ignoreCase;\n var accentFoldingFiltering = that.dataSource.options.accentFoldingFiltering;\n return {\n value: ignoreCase ? accentFoldingFiltering ? value.toLocaleLowerCase(accentFoldingFiltering) : value.toLowerCase() : value,\n field: field,\n operator: widgetOptions.filter,\n ignoreCase: ignoreCase\n };\n },\n _clearButton: function () {\n var list = this;\n var clearTitle = list.options.messages && list.options.messages.clear ? list.options.messages.clear : 'clear';\n if (!list._clear) {\n list._clear = $('<span unselectable=\"on\" class=\"k-icon k-clear-value k-i-close\" title=\"' + clearTitle + '\"></span>').attr({\n 'role': 'button',\n 'tabIndex': -1\n });\n }\n if (!list.options.clearButton) {\n list._clear.remove();\n }\n this._hideClear();\n },\n search: function (word) {\n var options = this.options;\n word = typeof word === 'string' ? word : this._inputValue();\n clearTimeout(this._typingTimeout);\n if (!options.enforceMinLength && !word.length || word.length >= options.minLength) {\n this._state = 'filter';\n if (this.listView) {\n this.listView._emptySearch = !$.trim(word).length;\n }\n if (!this._isFilterEnabled()) {\n this._searchByWord(word);\n } else {\n this._filter({\n word: word,\n open: true\n });\n }\n }\n },\n current: function (candidate) {\n return this._focus(candidate);\n },\n items: function () {\n return this.ul[0].children;\n },\n destroy: function () {\n var that = this;\n var ns = that.ns;\n Widget.fn.destroy.call(that);\n that._unbindDataSource();\n that.listView.destroy();\n that.list.off(ns);\n that.popup.destroy();\n if (that._form) {\n that._form.off('reset', that._resetHandler);\n }\n },\n dataItem: function (index) {\n var that = this;\n if (index === undefined) {\n return that.listView.selectedDataItems()[0];\n }\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n index = $(that.items()).index(index);\n }\n return that.dataSource.flatView()[index];\n },\n _activateItem: function () {\n var current = this.listView.focus();\n if (current) {\n this._focused.add(this.filterInput).attr('aria-activedescendant', current.attr('id'));\n }\n },\n _deactivateItem: function () {\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant');\n },\n _accessors: function () {\n var that = this;\n var element = that.element;\n var options = that.options;\n var getter = kendo.getter;\n var textField = element.attr(kendo.attr('text-field'));\n var valueField = element.attr(kendo.attr('value-field'));\n if (!options.dataTextField && textField) {\n options.dataTextField = textField;\n }\n if (!options.dataValueField && valueField) {\n options.dataValueField = valueField;\n }\n that._text = getter(options.dataTextField);\n that._value = getter(options.dataValueField);\n },\n _aria: function (id) {\n var that = this, options = that.options, element = that._focused.add(that.filterInput);\n if (options.suggest !== undefined) {\n element.attr('aria-autocomplete', options.suggest ? 'both' : 'list');\n }\n id = id ? id + ' ' + that.ul[0].id : that.ul[0].id;\n element.attr('aria-owns', id);\n that.ul.attr('aria-live', !that._isFilterEnabled() ? 'off' : 'polite');\n that._ariaLabel();\n },\n _ariaLabel: function () {\n var that = this;\n var focusedElm = that._focused;\n var inputElm = that.element;\n var inputId = inputElm.attr('id');\n var labelElm = $('label[for=\"' + inputId + '\"]');\n var ariaLabel = inputElm.attr('aria-label');\n var ariaLabelledBy = inputElm.attr('aria-labelledby');\n if (focusedElm === inputElm) {\n return;\n }\n if (ariaLabel) {\n focusedElm.attr('aria-label', ariaLabel);\n } else if (ariaLabelledBy) {\n focusedElm.attr('aria-labelledby', ariaLabelledBy);\n } else if (labelElm.length) {\n var labelId = labelElm.attr('id') || that._generateLabelId(labelElm, inputId || kendo.guid());\n focusedElm.attr('aria-labelledby', labelId);\n }\n },\n _generateLabelId: function (label, inputId) {\n var labelId = inputId + LABELIDPART;\n label.attr('id', labelId);\n return labelId;\n },\n _blur: function () {\n var that = this;\n that._change();\n that.close();\n },\n _change: function () {\n var that = this;\n var index = that.selectedIndex;\n var optionValue = that.options.value;\n var value = that.value();\n var trigger;\n if (that._isSelect && !that.listView.bound() && optionValue) {\n value = optionValue;\n }\n if (value !== unifyType(that._old, typeof value) && value !== unifyType(that._oldText, typeof value)) {\n trigger = true;\n } else if (that._valueBeforeCascade !== undefined && that._valueBeforeCascade !== unifyType(that._old, typeof that._valueBeforeCascade) && that._userTriggered) {\n trigger = true;\n } else if (index !== undefined && index !== that._oldIndex && !that.listView.isFiltered()) {\n trigger = true;\n }\n if (trigger) {\n if (that._old === null || that._old === '' || value === '') {\n that._valueBeforeCascade = that._old = value;\n } else {\n if (that.dataItem()) {\n that._valueBeforeCascade = that._old = that.options.dataValueField ? that.dataItem()[that.options.dataValueField] : that.dataItem();\n } else {\n that._valueBeforeCascade = that._old = null;\n }\n }\n that._oldIndex = index;\n that._oldText = that.text && that.text();\n if (!that._typing) {\n that.element.trigger(CHANGE);\n }\n that.trigger(CHANGE);\n }\n that.typing = false;\n },\n _data: function () {\n return this.dataSource.view();\n },\n _enable: function () {\n var that = this, options = that.options, disabled = that.element.is('[disabled]');\n if (options.enable !== undefined) {\n options.enabled = options.enable;\n }\n if (!options.enabled || disabled) {\n that.enable(false);\n } else {\n that.readonly(that.element.is('[readonly]'));\n }\n },\n _dataValue: function (dataItem) {\n var value = this._value(dataItem);\n if (value === undefined) {\n value = this._text(dataItem);\n }\n return value;\n },\n _offsetHeight: function () {\n var offsetHeight = 0;\n var siblings = this.listView.content.prevAll(':visible');\n siblings.each(function () {\n var element = $(this);\n offsetHeight += outerHeight(element, true);\n });\n return offsetHeight;\n },\n _height: function (length) {\n var that = this;\n var list = that.list;\n var height = that.options.height;\n var visible = that.popup.visible();\n var offsetTop;\n var popups;\n var footerHeight;\n if (length || that.options.noDataTemplate) {\n popups = list.add(list.parent('.k-animation-container')).show();\n if (!list.is(':visible')) {\n popups.hide();\n return;\n }\n height = that.listView.content[0].scrollHeight > height ? height : 'auto';\n popups.height(height);\n if (height !== 'auto') {\n offsetTop = that._offsetHeight();\n footerHeight = outerHeight($(that.footer)) || 0;\n height = height - offsetTop - footerHeight;\n }\n that.listView.content.height(height);\n if (!visible) {\n popups.hide();\n }\n }\n return height;\n },\n _openHandler: function (e) {\n this._adjustListWidth();\n if (this.trigger(OPEN)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', true);\n this.ul.attr('aria-hidden', false);\n }\n },\n _adjustListWidth: function () {\n var that = this, list = that.list, width = list[0].style.width, wrapper = that.wrapper, computedStyle, computedWidth;\n if (!list.data(WIDTH) && width) {\n return;\n }\n computedStyle = window.getComputedStyle ? window.getComputedStyle(wrapper[0], null) : 0;\n computedWidth = parseFloat(computedStyle && computedStyle.width) || outerWidth(wrapper);\n if (computedStyle && browser.msie) {\n computedWidth += parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight) + parseFloat(computedStyle.borderLeftWidth) + parseFloat(computedStyle.borderRightWidth);\n }\n if (list.css('box-sizing') !== 'border-box') {\n width = computedWidth - (outerWidth(list) - list.width());\n } else {\n width = computedWidth;\n }\n list.css({\n fontFamily: wrapper.css('font-family'),\n width: that.options.autoWidth ? 'auto' : width,\n minWidth: width,\n whiteSpace: that.options.autoWidth ? 'nowrap' : 'normal'\n }).data(WIDTH, width);\n return true;\n },\n _closeHandler: function (e) {\n if (this.trigger(CLOSE)) {\n e.preventDefault();\n } else {\n this._focused.attr('aria-expanded', false);\n this.ul.attr('aria-hidden', true);\n }\n },\n _focusItem: function () {\n var listView = this.listView;\n var noFocusedItem = !listView.focus();\n var index = last(listView.select());\n if (index === undefined && this.options.highlightFirst && noFocusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else if (noFocusedItem) {\n listView.scrollToIndex(0);\n }\n },\n _calculateGroupPadding: function (height) {\n var li = this.ul.children('.k-first:first');\n var groupHeader = this.listView.content.prev(GROUPHEADER);\n var padding = 0;\n var direction = 'right';\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n if (this.element.parents('.k-rtl').length) {\n direction = 'left';\n }\n padding += parseFloat(li.css('border-' + direction + '-width'), 10) + parseFloat(li.children('.k-group').css('padding-' + direction), 10);\n groupHeader.css('padding-' + direction, padding);\n }\n },\n _calculatePopupHeight: function (force) {\n var height = this._height(this.dataSource.flatView().length || force);\n this._calculateGroupPadding(height);\n this._calculateColumnsHeaderPadding(height);\n },\n _calculateColumnsHeaderPadding: function (height) {\n if (this.options.columns && this.options.columns.length) {\n var list = this;\n var isRtl = support.isRtl(list.wrapper);\n var scrollbar = kendo.support.scrollbar();\n list.columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', height !== 'auto' ? scrollbar : 0);\n }\n },\n _refreshScroll: function () {\n var listView = this.listView;\n var enableYScroll = listView.element.height() > listView.content.height();\n if (this.options.autoWidth) {\n listView.content.css({\n overflowX: 'hidden',\n overflowY: enableYScroll ? 'scroll' : 'auto'\n });\n }\n },\n _resizePopup: function (force) {\n if (this.options.virtual) {\n return;\n }\n if (!this.popup.element.is(':visible')) {\n this.popup.one('open', function (force) {\n return proxy(function () {\n this._calculatePopupHeight(force);\n }, this);\n }.call(this, force));\n this.popup.one('activate', proxy(this._refreshScroll, this));\n } else {\n this._calculatePopupHeight(force);\n }\n },\n _popup: function () {\n var list = this;\n list.popup = new ui.Popup(list.list, extend({}, list.options.popup, {\n anchor: list.wrapper,\n open: proxy(list._openHandler, list),\n close: proxy(list._closeHandler, list),\n animation: list.options.animation,\n isRtl: support.isRtl(list.wrapper),\n autosize: list.options.autoWidth\n }));\n },\n _makeUnselectable: function () {\n if (isIE8) {\n this.list.find('*').not('.k-textbox').attr('unselectable', 'on');\n }\n },\n _toggleHover: function (e) {\n $(e.currentTarget).toggleClass(HOVER, e.type === 'mouseenter');\n },\n _toggle: function (open, preventFocus) {\n var that = this;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n open = open !== undefined ? open : !that.popup.visible();\n if (!preventFocus && !touchEnabled && that._focused[0] !== activeElement()) {\n that._prevent = true;\n that._focused.focus();\n that._prevent = false;\n }\n that[open ? OPEN : CLOSE]();\n },\n _triggerCascade: function () {\n var that = this;\n if (!that._cascadeTriggered || that.value() !== unifyType(that._cascadedValue, typeof that.value())) {\n that._cascadedValue = that.value();\n that._cascadeTriggered = true;\n that.trigger(CASCADE, { userTriggered: that._userTriggered });\n }\n },\n _triggerChange: function () {\n if (this._valueBeforeCascade !== this.value()) {\n this.trigger(CHANGE);\n }\n },\n _unbindDataSource: function () {\n var that = this;\n that.dataSource.unbind(REQUESTSTART, that._requestStartHandler).unbind(REQUESTEND, that._requestEndHandler).unbind('error', that._errorHandler);\n },\n requireValueMapper: function (options, value) {\n var hasValue = (options.value instanceof Array ? options.value.length : options.value) || (value instanceof Array ? value.length : value);\n if (hasValue && options.virtual && typeof options.virtual.valueMapper !== 'function') {\n throw new Error('ValueMapper is not provided while the value is being set. See http://docs.telerik.com/kendo-ui/controls/editors/combobox/virtualization#the-valuemapper-function');\n }\n }\n });\n function unifyType(value, type) {\n if (value !== undefined && value !== '' && value !== null) {\n if (type === 'boolean') {\n value = Boolean(value);\n } else if (type === 'number') {\n value = Number(value);\n } else if (type === 'string') {\n value = value.toString();\n }\n }\n return value;\n }\n extend(List, {\n inArray: function (node, parentNode) {\n var idx, length, siblings = parentNode.children;\n if (!node || node.parentNode !== parentNode) {\n return -1;\n }\n for (idx = 0, length = siblings.length; idx < length; idx++) {\n if (node === siblings[idx]) {\n return idx;\n }\n }\n return -1;\n },\n unifyType: unifyType\n });\n kendo.ui.List = List;\n ui.Select = List.extend({\n init: function (element, options) {\n List.fn.init.call(this, element, options);\n this._initial = this.element.val();\n },\n setDataSource: function (dataSource) {\n var that = this;\n var parent;\n that.options.dataSource = dataSource;\n that._dataSource();\n if (that.listView.bound()) {\n that._initialIndex = null;\n that.listView._current = null;\n }\n that.listView.setDataSource(that.dataSource);\n if (that.options.autoBind) {\n that.dataSource.fetch();\n }\n parent = that._parentWidget();\n if (parent) {\n that._cascadeSelect(parent);\n }\n },\n close: function () {\n this.popup.close();\n },\n select: function (candidate) {\n var that = this;\n if (candidate === undefined) {\n return that.selectedIndex;\n } else {\n return that._select(candidate).done(function () {\n that._cascadeValue = that._old = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n }\n },\n _accessor: function (value, idx) {\n return this[this._isSelect ? '_accessorSelect' : '_accessorInput'](value, idx);\n },\n _accessorInput: function (value) {\n var element = this.element[0];\n if (value === undefined) {\n return element.value;\n } else {\n if (value === null) {\n value = '';\n }\n element.value = value;\n }\n },\n _accessorSelect: function (value, idx) {\n var element = this.element[0];\n var hasValue;\n if (value === undefined) {\n return getSelectedOption(element).value || '';\n }\n getSelectedOption(element).selected = false;\n if (idx === undefined) {\n idx = -1;\n }\n hasValue = value !== null && value !== '';\n if (hasValue && idx == -1) {\n this._custom(value);\n } else {\n if (value) {\n element.value = value;\n } else {\n element.selectedIndex = idx;\n }\n }\n },\n _syncValueAndText: function () {\n return true;\n },\n _custom: function (value) {\n var that = this;\n var element = that.element;\n var custom = that._customOption;\n if (!custom) {\n custom = $('<option/>');\n that._customOption = custom;\n element.append(custom);\n }\n custom.text(value);\n custom[0].selected = true;\n },\n _hideBusy: function () {\n var that = this;\n clearTimeout(that._busy);\n that._arrowIcon.removeClass(LOADING);\n that._focused.attr('aria-busy', false);\n that._busy = null;\n that._showClear();\n },\n _showBusy: function (e) {\n var that = this;\n if (e.isDefaultPrevented()) {\n return;\n }\n that._request = true;\n if (that._busy) {\n return;\n }\n that._busy = setTimeout(function () {\n if (that._arrowIcon) {\n that._focused.attr('aria-busy', true);\n that._arrowIcon.addClass(LOADING);\n that._hideClear();\n }\n }, 100);\n },\n _requestEnd: function () {\n this._request = false;\n this._hideBusy();\n },\n _dataSource: function () {\n var that = this, element = that.element, options = that.options, dataSource = options.dataSource || {}, idx;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n if (that._isSelect) {\n idx = element[0].selectedIndex;\n if (idx > -1) {\n options.index = idx;\n }\n dataSource.select = element;\n dataSource.fields = [\n { field: options.dataTextField },\n { field: options.dataValueField }\n ];\n }\n if (that.dataSource) {\n that._unbindDataSource();\n } else {\n that._requestStartHandler = proxy(that._showBusy, that);\n that._requestEndHandler = proxy(that._requestEnd, that);\n that._errorHandler = proxy(that._hideBusy, that);\n }\n that.dataSource = kendo.data.DataSource.create(dataSource).bind(REQUESTSTART, that._requestStartHandler).bind(REQUESTEND, that._requestEndHandler).bind('error', that._errorHandler);\n },\n _firstItem: function () {\n this.listView.focusFirst();\n },\n _lastItem: function () {\n this.listView.focusLast();\n },\n _nextItem: function () {\n this.listView.focusNext();\n },\n _prevItem: function () {\n this.listView.focusPrev();\n },\n _move: function (e) {\n var that = this;\n var listView = that.listView;\n var key = e.keyCode;\n var down = key === keys.DOWN;\n var dataItem;\n var pressed;\n var current;\n if (key === keys.UP || down) {\n if (e.altKey) {\n that.toggle(down);\n } else {\n if (!listView.bound() && !that.ul[0].firstChild) {\n if (!that._fetch) {\n that.dataSource.one(CHANGE, function () {\n that._fetch = false;\n that._move(e);\n });\n that._fetch = true;\n that._filterSource();\n }\n e.preventDefault();\n return true;\n }\n current = that._focus();\n if (!that._fetch && (!current || current.hasClass('k-state-selected'))) {\n if (down) {\n that._nextItem();\n if (!that._focus()) {\n that._lastItem();\n }\n } else {\n that._prevItem();\n if (!that._focus()) {\n that._firstItem();\n }\n }\n }\n dataItem = listView.dataItemByIndex(listView.getElementIndex(that._focus()));\n if (that.trigger(SELECT, {\n dataItem: dataItem,\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!that.popup.visible()) {\n that._blur();\n }\n if (that._cascadedValue === null) {\n that._cascadedValue = that.value();\n } else {\n that._cascadedValue = that.dataItem() ? that.dataItem()[that.options.dataValueField] || that.dataItem() : null;\n }\n });\n }\n e.preventDefault();\n pressed = true;\n } else if (key === keys.ENTER || key === keys.TAB) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n current = that._focus();\n dataItem = that.dataItem();\n if (!that.popup.visible() && (!dataItem || that.text() !== that._text(dataItem))) {\n current = null;\n }\n var activeFilter = that.filterInput && that.filterInput[0] === activeElement();\n var selection;\n if (current) {\n dataItem = listView.dataItemByIndex(listView.getElementIndex(current));\n var shouldTrigger = true;\n if (dataItem) {\n shouldTrigger = that._value(dataItem) !== List.unifyType(that.value(), typeof that._value(dataItem));\n }\n if (shouldTrigger && that.trigger(SELECT, {\n dataItem: dataItem,\n item: current\n })) {\n return;\n }\n selection = that._select(current);\n } else if (that.input) {\n if (that._syncValueAndText() || that._isSelect) {\n that._accessor(that.input.val());\n }\n that.listView.value(that.input.val());\n }\n if (that._focusElement) {\n that._focusElement(that.wrapper);\n }\n if (activeFilter && key === keys.TAB) {\n that.wrapper.focusout();\n } else {\n if (selection && typeof selection.done === 'function') {\n selection.done(function () {\n that._blur();\n });\n } else {\n that._blur();\n }\n }\n that.close();\n pressed = true;\n } else if (key === keys.ESC) {\n if (that.popup.visible()) {\n e.preventDefault();\n }\n that.close();\n pressed = true;\n } else if (that.popup.visible() && (key === keys.PAGEDOWN || key === keys.PAGEUP)) {\n e.preventDefault();\n var direction = key === keys.PAGEDOWN ? 1 : -1;\n listView.scrollWith(direction * listView.screenHeight());\n pressed = true;\n }\n return pressed;\n },\n _fetchData: function () {\n var that = this;\n var hasItems = !!that.dataSource.view().length;\n if (that._request || that.options.cascadeFrom) {\n return;\n }\n if (!that.listView.bound() && !that._fetch && !hasItems) {\n that._fetch = true;\n that.dataSource.fetch().done(function () {\n that._fetch = false;\n });\n }\n },\n _options: function (data, optionLabel, value) {\n var that = this, element = that.element, htmlElement = element[0], length = data.length, options = '', option, dataItem, dataText, dataValue, idx = 0;\n if (optionLabel) {\n options = optionLabel;\n }\n for (; idx < length; idx++) {\n option = '<option';\n dataItem = data[idx];\n dataText = that._text(dataItem);\n dataValue = that._value(dataItem);\n if (dataValue !== undefined) {\n dataValue += '';\n if (dataValue.indexOf('\"') !== -1) {\n dataValue = dataValue.replace(quotRegExp, '"');\n }\n option += ' value=\"' + dataValue + '\"';\n }\n option += '>';\n if (dataText !== undefined) {\n option += htmlEncode(dataText);\n }\n option += '</option>';\n options += option;\n }\n element.html(options);\n if (value !== undefined) {\n htmlElement.value = value;\n if (htmlElement.value && !value) {\n htmlElement.selectedIndex = -1;\n }\n }\n if (htmlElement.selectedIndex !== -1) {\n option = getSelectedOption(htmlElement);\n if (option) {\n option.setAttribute(SELECTED, SELECTED);\n }\n }\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(that._initial);\n });\n };\n that._form = form.on('reset', that._resetHandler);\n }\n },\n _parentWidget: function () {\n var name = this.options.name;\n if (!this.options.cascadeFrom) {\n return;\n }\n var parentElement = $('#' + this.options.cascadeFrom);\n var parent = parentElement.data('kendo' + name);\n if (!parent) {\n parent = parentElement.data('kendo' + alternativeNames[name]);\n }\n return parent;\n },\n _cascade: function () {\n var that = this;\n var options = that.options;\n var cascade = options.cascadeFrom;\n var parent;\n if (cascade) {\n parent = that._parentWidget();\n if (!parent) {\n return;\n }\n that._cascadeHandlerProxy = proxy(that._cascadeHandler, that);\n that._cascadeFilterRequests = [];\n options.autoBind = false;\n parent.bind('set', function () {\n that.one('set', function (e) {\n that._selectedValue = e.value || that._accessor();\n });\n });\n parent.first(CASCADE, that._cascadeHandlerProxy);\n if (parent.listView.bound()) {\n that._toggleCascadeOnFocus();\n that._cascadeSelect(parent);\n } else {\n parent.one('dataBound', function () {\n that._toggleCascadeOnFocus();\n if (parent.popup.visible()) {\n parent._focused.focus();\n }\n });\n if (!parent.value()) {\n that.enable(false);\n }\n }\n }\n },\n _toggleCascadeOnFocus: function () {\n var that = this;\n var parent = that._parentWidget();\n var focusout = isIE ? 'blur' : 'focusout';\n parent._focused.add(parent.filterInput).bind('focus', function () {\n parent.unbind(CASCADE, that._cascadeHandlerProxy);\n parent.first(CHANGE, that._cascadeHandlerProxy);\n });\n parent._focused.add(parent.filterInput).bind(focusout, function () {\n parent.unbind(CHANGE, that._cascadeHandlerProxy);\n parent.first(CASCADE, that._cascadeHandlerProxy);\n });\n },\n _cascadeHandler: function (e) {\n var parent = this._parentWidget();\n var valueBeforeCascade = this.value();\n this._userTriggered = e.userTriggered;\n if (this.listView.bound()) {\n this._clearSelection(parent, true);\n }\n this._cascadeSelect(parent, valueBeforeCascade);\n },\n _cascadeChange: function (parent) {\n var that = this;\n var value = that._accessor() || that._selectedValue;\n if (!that._cascadeFilterRequests.length) {\n that._selectedValue = null;\n }\n if (that._userTriggered) {\n that._clearSelection(parent, true);\n } else if (value) {\n if (value !== unifyType(that.listView.value()[0], typeof value)) {\n that.value(value);\n }\n if (!that.dataSource.view()[0] || that.selectedIndex === -1) {\n that._clearSelection(parent, true);\n }\n } else if (that.dataSource.flatView().length) {\n that.select(that.options.index);\n }\n that.enable();\n that._triggerCascade();\n that._triggerChange();\n that._userTriggered = false;\n },\n _cascadeSelect: function (parent, valueBeforeCascade) {\n var that = this;\n var dataItem = parent.dataItem();\n var filterValue = dataItem ? dataItem[that.options.cascadeFromParentField] || parent._value(dataItem) : null;\n var valueField = that.options.cascadeFromField || parent.options.dataValueField;\n var expressions;\n that._valueBeforeCascade = valueBeforeCascade !== undefined ? valueBeforeCascade : that.value();\n if (filterValue || filterValue === 0) {\n expressions = that.dataSource.filter() || {};\n removeFiltersForField(expressions, valueField);\n var handler = function () {\n var currentHandler = that._cascadeFilterRequests.shift();\n if (currentHandler) {\n that.unbind('dataBound', currentHandler);\n }\n currentHandler = that._cascadeFilterRequests[0];\n if (currentHandler) {\n that.first('dataBound', currentHandler);\n }\n that._cascadeChange(parent);\n };\n that._cascadeFilterRequests.push(handler);\n if (that._cascadeFilterRequests.length === 1) {\n that.first('dataBound', handler);\n }\n that._cascading = true;\n that._filterSource({\n field: valueField,\n operator: 'eq',\n value: filterValue\n });\n that._cascading = false;\n } else {\n that.enable(false);\n that._clearSelection(parent);\n that._triggerCascade();\n that._triggerChange();\n that._userTriggered = false;\n }\n }\n });\n var STATIC_LIST_NS = '.StaticList';\n var StaticList = kendo.ui.DataBoundWidget.extend({\n init: function (element, options) {\n Widget.fn.init.call(this, element, options);\n this.element.attr('role', 'listbox').on('click' + STATIC_LIST_NS, 'li', proxy(this._click, this)).on('mouseenter' + STATIC_LIST_NS, 'li', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + STATIC_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n if (support.touch) {\n this._touchHandlers();\n }\n if (this.options.selectable === 'multiple') {\n this.element.attr('aria-multiselectable', true);\n }\n this.content = this.element.wrap('<div class=\\'k-list-scroller\\' unselectable=\\'on\\'></div>').parent();\n this.header = this.content.before('<div class=\"k-group-header\" style=\"display:none\"></div>').prev();\n this.bound(false);\n this._optionID = kendo.guid();\n this._selectedIndices = [];\n this._view = [];\n this._dataItems = [];\n this._values = [];\n var value = this.options.value;\n if (value) {\n this._values = $.isArray(value) ? value.slice(0) : [value];\n }\n this._getter();\n this._templates();\n this.setDataSource(this.options.dataSource);\n this._onScroll = proxy(function () {\n var that = this;\n clearTimeout(that._scrollId);\n that._scrollId = setTimeout(function () {\n that._renderHeader();\n }, 50);\n }, this);\n },\n options: {\n name: 'StaticList',\n dataValueField: null,\n valuePrimitive: false,\n selectable: true,\n template: null,\n groupTemplate: null,\n fixedGroupTemplate: null\n },\n events: [\n 'click',\n CHANGE,\n 'activate',\n 'deactivate',\n 'dataBinding',\n 'dataBound',\n 'selectedItemChange'\n ],\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n value = that.value();\n that.value([]);\n that.bound(false);\n that.value(value);\n } else {\n that._refreshHandler = proxy(that.refresh, that);\n }\n that.setDSFilter(dataSource.filter());\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that._fixedHeader();\n },\n _touchHandlers: function () {\n var that = this;\n var startY;\n var endY;\n var tapPosition = function (event) {\n return (event.originalEvent || event).changedTouches[0].pageY;\n };\n that.element.on('touchstart' + STATIC_LIST_NS, function (e) {\n startY = tapPosition(e);\n });\n that.element.on('touchend' + STATIC_LIST_NS, function (e) {\n if (e.isDefaultPrevented()) {\n return;\n }\n endY = tapPosition(e);\n if (Math.abs(endY - startY) < 10) {\n that._touchTriggered = true;\n that._triggerClick($(e.target).closest(ITEMSELECTOR).get(0));\n }\n });\n },\n skip: function () {\n return this.dataSource.skip();\n },\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n this._getter();\n this._templates();\n this._render();\n },\n destroy: function () {\n this.element.off(STATIC_LIST_NS);\n if (this._refreshHandler) {\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n }\n clearTimeout(this._scrollId);\n Widget.fn.destroy.call(this);\n },\n dataItemByIndex: function (index) {\n return this.dataSource.flatView()[index];\n },\n screenHeight: function () {\n return this.content[0].clientHeight;\n },\n scrollToIndex: function (index) {\n var item = this.element[0].children[index];\n if (item) {\n this.scroll(item);\n }\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scroll: function (item) {\n if (!item) {\n return;\n }\n if (item[0]) {\n item = item[0];\n }\n var content = this.content[0], itemOffsetTop = item.offsetTop, itemOffsetHeight = item.offsetHeight, contentScrollTop = content.scrollTop, contentOffsetHeight = content.clientHeight, bottomDistance = itemOffsetTop + itemOffsetHeight;\n if (contentScrollTop > itemOffsetTop) {\n contentScrollTop = itemOffsetTop;\n } else if (bottomDistance > contentScrollTop + contentOffsetHeight) {\n contentScrollTop = bottomDistance - contentOffsetHeight;\n }\n content.scrollTop = contentScrollTop;\n },\n selectedDataItems: function (dataItems) {\n if (dataItems === undefined) {\n return this._dataItems.slice();\n }\n this._dataItems = dataItems;\n this._values = this._getValues(dataItems);\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n focusNext: function () {\n var current = this.focus();\n if (!current) {\n current = 0;\n } else {\n current = current.next();\n }\n this.focus(current);\n },\n focusPrev: function () {\n var current = this.focus();\n if (!current) {\n current = this.element[0].children.length - 1;\n } else {\n current = current.prev();\n }\n this.focus(current);\n },\n focusFirst: function () {\n this.focus(this.element[0].children[0]);\n },\n focusLast: function () {\n this.focus(last(this.element[0].children));\n },\n focus: function (candidate) {\n var that = this;\n var id = that._optionID;\n var hasCandidate;\n if (candidate === undefined) {\n return that._current;\n }\n candidate = last(that._get(candidate));\n candidate = $(this.element[0].children[candidate]);\n if (that._current) {\n that._current.removeClass(FOCUSED).removeAttr(ID);\n that.trigger('deactivate');\n }\n hasCandidate = !!candidate[0];\n if (hasCandidate) {\n candidate.addClass(FOCUSED);\n that.scroll(candidate);\n candidate.attr('id', id);\n }\n that._current = hasCandidate ? candidate : null;\n that.trigger('activate');\n },\n focusIndex: function () {\n return this.focus() ? this.focus().index() : undefined;\n },\n skipUpdate: function (skipUpdate) {\n this._skipUpdate = skipUpdate;\n },\n select: function (indices) {\n var that = this;\n var selectable = that.options.selectable;\n var singleSelection = selectable !== 'multiple' && selectable !== false;\n var selectedIndices = that._selectedIndices;\n var uiSelectedIndices = [this.element.find('.k-state-selected').index()];\n var added = [];\n var removed = [];\n var result;\n if (indices === undefined) {\n return selectedIndices.slice();\n }\n indices = that._get(indices);\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n var deferred = $.Deferred().resolve();\n var filtered = that.isFiltered();\n if (filtered && !singleSelection && that._deselectFiltered(indices)) {\n return deferred;\n }\n if (singleSelection && !filtered && $.inArray(last(indices), selectedIndices) !== -1 && $.inArray(last(indices), uiSelectedIndices) !== -1) {\n if (that._dataItems.length && that._view.length) {\n that._dataItems = [that._view[selectedIndices[0]].item];\n }\n return deferred;\n }\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (indices.length) {\n if (singleSelection) {\n indices = [last(indices)];\n }\n added = that._select(indices);\n }\n if (added.length || removed.length) {\n that._valueComparer = null;\n that.trigger(CHANGE, {\n added: added,\n removed: removed\n });\n }\n return deferred;\n },\n removeAt: function (position) {\n this._selectedIndices.splice(position, 1);\n this._values.splice(position, 1);\n this._valueComparer = null;\n return {\n position: position,\n dataItem: this._dataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n value = $.isArray(value) || value instanceof ObservableArray ? value.slice(0) : [value];\n this._values = value;\n this._valueComparer = null;\n },\n value: function (value) {\n var that = this;\n var deferred = that._valueDeferred;\n var indices;\n if (value === undefined) {\n return that._values.slice();\n }\n that.setValue(value);\n if (!deferred || deferred.state() === 'resolved') {\n that._valueDeferred = deferred = $.Deferred();\n }\n if (that.bound()) {\n indices = that._valueIndices(that._values);\n if (that.options.selectable === 'multiple') {\n that.select(-1);\n }\n that.select(indices);\n deferred.resolve();\n }\n that._skipUpdate = false;\n return deferred;\n },\n items: function () {\n return this.element.children(ITEMSELECTOR);\n },\n _click: function (e) {\n if (this._touchTriggered) {\n this._touchTriggered = false;\n return;\n }\n if (!e.isDefaultPrevented()) {\n this._triggerClick(e.currentTarget);\n }\n },\n _triggerClick: function (item) {\n if (!this.trigger('click', { item: $(item) })) {\n this.select(item);\n }\n },\n _valueExpr: function (type, values) {\n var that = this;\n var idx = 0;\n var body;\n var comparer;\n var normalized = [];\n if (!that._valueComparer || that._valueType !== type) {\n that._valueType = type;\n for (; idx < values.length; idx++) {\n normalized.push(unifyType(values[idx], type));\n }\n body = 'for (var idx = 0; idx < ' + normalized.length + '; idx++) {' + ' if (current === values[idx]) {' + ' return idx;' + ' }' + '} ' + 'return -1;';\n comparer = new Function('current', 'values', body);\n that._valueComparer = function (current) {\n return comparer(current, normalized);\n };\n }\n return that._valueComparer;\n },\n _dataItemPosition: function (dataItem, values) {\n var value = this._valueGetter(dataItem);\n var valueExpr = this._valueExpr(typeof value, values);\n return valueExpr(value);\n },\n _getter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _deselect: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var selectable = that.options.selectable;\n var selectedIndices = that._selectedIndices;\n var dataItems = that._dataItems;\n var values = that._values;\n var removed = [];\n var i = 0;\n var j;\n var index, selectedIndex;\n var removedIndices = 0;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (; i < selectedIndices.length; i++) {\n $(children[selectedIndices[i]]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: i,\n dataItem: dataItems[i]\n });\n }\n that._values = [];\n that._dataItems = [];\n that._selectedIndices = [];\n } else if (selectable === 'multiple') {\n for (; i < indices.length; i++) {\n index = indices[i];\n if (!$(children[index]).hasClass('k-state-selected')) {\n continue;\n }\n for (j = 0; j < selectedIndices.length; j++) {\n selectedIndex = selectedIndices[j];\n if (selectedIndex === index) {\n $(children[selectedIndex]).removeClass('k-state-selected').attr('aria-selected', false);\n removed.push({\n position: j + removedIndices,\n dataItem: dataItems.splice(j, 1)[0]\n });\n selectedIndices.splice(j, 1);\n indices.splice(i, 1);\n values.splice(j, 1);\n removedIndices += 1;\n i -= 1;\n j -= 1;\n break;\n }\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectFiltered: function (indices) {\n var children = this.element[0].children;\n var dataItem, index, position;\n var removed = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = this._view[index].item;\n position = this._dataItemPosition(dataItem, this._values);\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n if (removed.length) {\n this.trigger(CHANGE, {\n added: [],\n removed: removed\n });\n return true;\n }\n return false;\n },\n _select: function (indices) {\n var that = this;\n var children = that.element[0].children;\n var data = that._view;\n var dataItem, index;\n var added = [];\n var idx = 0;\n if (last(indices) !== -1) {\n that.focus(indices);\n }\n for (; idx < indices.length; idx++) {\n index = indices[idx];\n dataItem = data[index];\n if (index === -1 || !dataItem) {\n continue;\n }\n dataItem = dataItem.item;\n that._selectedIndices.push(index);\n that._dataItems.push(dataItem);\n that._values.push(that._valueGetter(dataItem));\n $(children[index]).addClass('k-state-selected').attr('aria-selected', true);\n added.push({ dataItem: dataItem });\n }\n return added;\n },\n getElementIndex: function (element) {\n return $(element).data('offset-index');\n },\n _get: function (candidate) {\n if (typeof candidate === 'number') {\n candidate = [candidate];\n } else if (!isArray(candidate)) {\n candidate = this.getElementIndex(candidate);\n candidate = [candidate !== undefined ? candidate : -1];\n }\n return candidate;\n },\n _template: function () {\n var that = this;\n var options = that.options;\n var template = options.template;\n if (!template) {\n template = kendo.template('<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">${' + kendo.expr(options.dataTextField, 'data') + '}</li>', { useWithBlock: false });\n } else {\n template = kendo.template(template);\n template = function (data) {\n return '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item\">' + template(data) + '</li>';\n };\n }\n return template;\n },\n _templates: function () {\n var template;\n var options = this.options;\n var templates = {\n template: options.template,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n template = templates[key];\n if (template && typeof template !== 'function') {\n templates[key] = kendo.template(template);\n }\n }\n this.templates = templates;\n },\n _normalizeIndices: function (indices) {\n var newIndices = [];\n var idx = 0;\n for (; idx < indices.length; idx++) {\n if (indices[idx] !== undefined) {\n newIndices.push(indices[idx]);\n }\n }\n return newIndices;\n },\n _valueIndices: function (values, indices) {\n var data = this._view;\n var idx = 0;\n var index;\n indices = indices ? indices.slice() : [];\n if (!values.length) {\n return [];\n }\n for (; idx < data.length; idx++) {\n index = this._dataItemPosition(data[idx].item, values);\n if (index !== -1) {\n indices[index] = idx;\n }\n }\n return this._normalizeIndices(indices);\n },\n _firstVisibleItem: function () {\n var element = this.element[0];\n var content = this.content[0];\n var scrollTop = content.scrollTop;\n var itemHeight = $(element.children[0]).height();\n var itemIndex = Math.floor(scrollTop / itemHeight) || 0;\n var item = element.children[itemIndex] || element.lastChild;\n var forward = item.offsetTop < scrollTop;\n while (item) {\n if (forward) {\n if (item.offsetTop + itemHeight > scrollTop || !item.nextSibling) {\n break;\n }\n item = item.nextSibling;\n } else {\n if (item.offsetTop <= scrollTop || !item.previousSibling) {\n break;\n }\n item = item.previousSibling;\n }\n }\n return this._view[$(item).data('offset-index')];\n },\n _fixedHeader: function () {\n if (this.isGrouped() && this.templates.fixedGroupTemplate) {\n this.header.show();\n this.content.scroll(this._onScroll);\n } else {\n this.header.hide();\n this.content.off('scroll', this._onScroll);\n }\n },\n _renderHeader: function () {\n var template = this.templates.fixedGroupTemplate;\n if (!template) {\n return;\n }\n var visibleItem = this._firstVisibleItem();\n if (visibleItem && visibleItem.group.toString().length) {\n this.header.html(template(visibleItem.group));\n }\n },\n _renderItem: function (context) {\n var item = '<li tabindex=\"-1\" role=\"option\" unselectable=\"on\" class=\"k-item';\n var dataItem = context.item;\n var notFirstItem = context.index !== 0;\n var selected = context.selected;\n var isGrouped = this.isGrouped();\n var hasColumns = this.options.columns && this.options.columns.length;\n if (notFirstItem && context.newGroup) {\n item += ' k-first';\n }\n if (context.isLastGroupedItem && hasColumns) {\n item += ' k-last';\n }\n if (selected) {\n item += ' k-state-selected';\n }\n item += '\" aria-selected=\"' + (selected ? 'true' : 'false') + '\" data-offset-index=\"' + context.index + '\">';\n if (hasColumns) {\n item += this._renderColumns(dataItem);\n } else {\n item += this.templates.template(dataItem);\n }\n if (notFirstItem && context.newGroup) {\n if (hasColumns) {\n item += '<div class=\"k-cell k-group-cell\"><span>' + this.templates.groupTemplate(context.group) + '</span></div>';\n } else {\n item += '<div class=\"k-group\">' + this.templates.groupTemplate(context.group) + '</div>';\n }\n } else if (isGrouped && hasColumns) {\n item += '<div class=\\'k-cell k-spacer-cell\\'></div>';\n }\n return item + '</li>';\n },\n _renderColumns: function (dataItem) {\n var item = '';\n for (var i = 0; i < this.options.columns.length; i++) {\n var currentWidth = this.options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth && !isNaN(currentWidthInt)) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '<span class=\\'k-cell\\' ' + widthStyle + '>';\n item += this.templates['column' + i](dataItem);\n item += '</span>';\n }\n return item;\n },\n _render: function () {\n var html = '';\n var i = 0;\n var idx = 0;\n var context;\n var dataContext = [];\n var view = this.dataSource.view();\n var values = this.value();\n var group, newGroup, j;\n var isGrouped = this.isGrouped();\n if (isGrouped) {\n for (i = 0; i < view.length; i++) {\n group = view[i];\n newGroup = true;\n for (j = 0; j < group.items.length; j++) {\n context = {\n selected: this._selected(group.items[j], values),\n item: group.items[j],\n group: group.value,\n newGroup: newGroup,\n isLastGroupedItem: j === group.items.length - 1,\n index: idx\n };\n dataContext[idx] = context;\n idx += 1;\n html += this._renderItem(context);\n newGroup = false;\n }\n }\n } else {\n for (i = 0; i < view.length; i++) {\n context = {\n selected: this._selected(view[i], values),\n item: view[i],\n index: i\n };\n dataContext[i] = context;\n html += this._renderItem(context);\n }\n }\n this._view = dataContext;\n this.element[0].innerHTML = html;\n if (isGrouped && dataContext.length) {\n this._renderHeader();\n }\n },\n _selected: function (dataItem, values) {\n var select = !this.isFiltered() || this.options.selectable === 'multiple';\n return select && this._dataItemPosition(dataItem, values) !== -1;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var skipUpdateOnBind = that.options.skipUpdateOnBind;\n var isItemChange = action === 'itemchange';\n var result;\n that.trigger('dataBinding');\n that._angularItems('cleanup');\n that._fixedHeader();\n that._render();\n that.bound(true);\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._dataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n } else if (that.isFiltered() || that._skipUpdate || that._emptySearch) {\n that.focus(0);\n if (that._skipUpdate) {\n that._skipUpdate = false;\n that._selectedIndices = that._valueIndices(that._values, that._selectedIndices);\n }\n } else if (!skipUpdateOnBind && (!action || action === 'add')) {\n that.value(that._values);\n }\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._angularItems('compile');\n that.trigger('dataBound');\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._bound;\n }\n this._bound = bound;\n },\n isGrouped: function () {\n return (this.dataSource.group() || []).length;\n }\n });\n ui.plugin(StaticList);\n function last(list) {\n return list[list.length - 1];\n }\n function getSelectedOption(select) {\n var index = select.selectedIndex;\n return index > -1 ? select.options[index] : {};\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isValidFilterExpr(expression) {\n if (!expression || $.isEmptyObject(expression)) {\n return false;\n }\n if (expression.filters && !expression.filters.length) {\n return false;\n }\n return true;\n }\n function removeFiltersForField(expression, field) {\n var filters;\n var found = false;\n if (expression.filters) {\n filters = $.grep(expression.filters, function (filter) {\n found = removeFiltersForField(filter, field);\n if (filter.filters) {\n return filter.filters.length;\n } else {\n return filter.field != field;\n }\n });\n if (!found && expression.filters.length !== filters.length) {\n found = true;\n }\n expression.filters = filters;\n }\n return found;\n }\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.virtuallist', ['kendo.data'], f);\n}(function () {\n var __meta__ = {\n id: 'virtuallist',\n name: 'VirtualList',\n category: 'framework',\n depends: ['data'],\n hidden: true\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, Widget = ui.Widget, DataBoundWidget = ui.DataBoundWidget, proxy = $.proxy, percentageUnitsRegex = /^\\d+(\\.\\d+)?%$/i, WRAPPER = 'k-virtual-wrap', VIRTUALLIST = 'k-virtual-list', CONTENT = 'k-virtual-content', LIST = 'k-list', HEADER = 'k-group-header', VIRTUALITEM = 'k-virtual-item', ITEM = 'k-item', HEIGHTCONTAINER = 'k-height-container', GROUPITEM = 'k-group', SELECTED = 'k-state-selected', FOCUSED = 'k-state-focused', HOVER = 'k-state-hover', CHANGE = 'change', CLICK = 'click', LISTBOUND = 'listBound', ITEMCHANGE = 'itemChange', ACTIVATE = 'activate', DEACTIVATE = 'deactivate', VIRTUAL_LIST_NS = '.VirtualList';\n function lastFrom(array) {\n return array[array.length - 1];\n }\n function toArray(value) {\n return value instanceof Array ? value : [value];\n }\n function isPrimitive(dataItem) {\n return typeof dataItem === 'string' || typeof dataItem === 'number' || typeof dataItem === 'boolean';\n }\n function getItemCount(screenHeight, listScreens, itemHeight) {\n return Math.ceil(screenHeight * listScreens / itemHeight);\n }\n function appendChild(parent, className, tagName) {\n var element = document.createElement(tagName || 'div');\n if (className) {\n element.className = className;\n }\n parent.appendChild(element);\n return element;\n }\n function getDefaultItemHeight() {\n var mockList = $('<div class=\"k-popup\"><ul class=\"k-list\"><li class=\"k-item\"><li></ul></div>'), lineHeight;\n mockList.css({\n position: 'absolute',\n left: '-200000px',\n visibility: 'hidden'\n });\n mockList.appendTo(document.body);\n lineHeight = parseFloat(kendo.getComputedStyles(mockList.find('.k-item')[0], ['line-height'])['line-height']);\n mockList.remove();\n return lineHeight;\n }\n function bufferSizes(screenHeight, listScreens, opposite) {\n return {\n down: screenHeight * opposite,\n up: screenHeight * (listScreens - 1 - opposite)\n };\n }\n function listValidator(options, screenHeight) {\n var downThreshold = (options.listScreens - 1 - options.threshold) * screenHeight;\n var upThreshold = options.threshold * screenHeight;\n return function (list, scrollTop, lastScrollTop) {\n if (scrollTop > lastScrollTop) {\n return scrollTop - list.top < downThreshold;\n } else {\n return list.top === 0 || scrollTop - list.top > upThreshold;\n }\n };\n }\n function scrollCallback(element, callback) {\n return function (force) {\n return callback(element.scrollTop, force);\n };\n }\n function syncList(reorder) {\n return function (list, force) {\n reorder(list.items, list.index, force);\n return list;\n };\n }\n function position(element, y) {\n if (kendo.support.browser.msie && kendo.support.browser.version < 10) {\n element.style.top = y + 'px';\n } else {\n element.style.webkitTransform = 'translateY(' + y + 'px)';\n element.style.transform = 'translateY(' + y + 'px)';\n }\n }\n function map2(callback, templates) {\n return function (arr1, arr2) {\n for (var i = 0, len = arr1.length; i < len; i++) {\n callback(arr1[i], arr2[i], templates);\n if (arr2[i].item) {\n this.trigger(ITEMCHANGE, {\n item: $(arr1[i]),\n data: arr2[i].item,\n ns: kendo.ui\n });\n }\n }\n };\n }\n function reshift(items, diff) {\n var range;\n if (diff > 0) {\n range = items.splice(0, diff);\n items.push.apply(items, range);\n } else {\n range = items.splice(diff, -diff);\n items.unshift.apply(items, range);\n }\n return range;\n }\n function render(element, data, templates) {\n var itemTemplate = templates.template;\n element = $(element);\n if (!data.item) {\n itemTemplate = templates.placeholderTemplate;\n }\n if (data.index === 0 && this.header && data.group) {\n this.header.html(templates.fixedGroupTemplate(data.group));\n }\n this.angular('cleanup', function () {\n return { elements: [element] };\n });\n element.attr('data-uid', data.item ? data.item.uid : '').attr('data-offset-index', data.index);\n if (this.options.columns && this.options.columns.length && data.item) {\n element.html(renderColumns(this.options, data.item, templates));\n } else {\n element.html(itemTemplate(data.item || {}));\n }\n element.toggleClass(FOCUSED, data.current);\n element.toggleClass(SELECTED, data.selected);\n element.toggleClass('k-first', data.newGroup);\n element.toggleClass('k-last', data.isLastGroupedItem);\n element.toggleClass('k-loading-item', !data.item);\n if (data.index !== 0 && data.newGroup) {\n $('<div class=' + GROUPITEM + '></div>').appendTo(element).html(templates.groupTemplate(data.group));\n }\n if (data.top !== undefined) {\n position(element[0], data.top);\n }\n this.angular('compile', function () {\n return {\n elements: [element],\n data: [{\n dataItem: data.item,\n group: data.group,\n newGroup: data.newGroup\n }]\n };\n });\n }\n function renderColumns(options, dataItem, templates) {\n var item = '';\n for (var i = 0; i < options.columns.length; i++) {\n var currentWidth = options.columns[i].width;\n var currentWidthInt = parseInt(currentWidth, 10);\n var widthStyle = '';\n if (currentWidth) {\n widthStyle += 'style=\\'width:';\n widthStyle += currentWidthInt;\n widthStyle += percentageUnitsRegex.test(currentWidth) ? '%' : 'px';\n widthStyle += ';\\'';\n }\n item += '<span class=\\'k-cell\\' ' + widthStyle + '>';\n item += templates['column' + i](dataItem);\n item += '</span>';\n }\n return item;\n }\n function mapChangedItems(selected, itemsToMatch) {\n var itemsLength = itemsToMatch.length;\n var selectedLength = selected.length;\n var dataItem;\n var found;\n var i, j;\n var changed = [];\n var unchanged = [];\n if (selectedLength) {\n for (i = 0; i < selectedLength; i++) {\n dataItem = selected[i];\n found = false;\n for (j = 0; j < itemsLength; j++) {\n if (dataItem === itemsToMatch[j]) {\n found = true;\n changed.push({\n index: i,\n item: dataItem\n });\n break;\n }\n }\n if (!found) {\n unchanged.push(dataItem);\n }\n }\n }\n return {\n changed: changed,\n unchanged: unchanged\n };\n }\n function isActivePromise(promise) {\n return promise && promise.state() !== 'resolved';\n }\n var VirtualList = DataBoundWidget.extend({\n init: function (element, options) {\n var that = this;\n that.bound(false);\n that._fetching = false;\n Widget.fn.init.call(that, element, options);\n if (!that.options.itemHeight) {\n that.options.itemHeight = getDefaultItemHeight();\n }\n options = that.options;\n that.element.addClass(LIST + ' ' + VIRTUALLIST).attr('role', 'listbox');\n that.content = that.element.wrap('<div unselectable=\\'on\\' class=\\'' + CONTENT + '\\'></div>').parent();\n that.wrapper = that.content.wrap('<div class=\\'' + WRAPPER + '\\'></div>').parent();\n that.header = that.content.before('<div class=\\'' + HEADER + '\\'></div>').prev();\n if (options.columns && options.columns.length) {\n that.element.removeClass(LIST);\n }\n that.element.on('mouseenter' + VIRTUAL_LIST_NS, 'li:not(.k-loading-item)', function () {\n $(this).addClass(HOVER);\n }).on('mouseleave' + VIRTUAL_LIST_NS, 'li', function () {\n $(this).removeClass(HOVER);\n });\n that._values = toArray(that.options.value);\n that._selectedDataItems = [];\n that._selectedIndexes = [];\n that._rangesList = {};\n that._promisesList = [];\n that._optionID = kendo.guid();\n that._templates();\n that.setDataSource(options.dataSource);\n that.content.on('scroll' + VIRTUAL_LIST_NS, kendo.throttle(function () {\n that._renderItems();\n that._triggerListBound();\n }, options.delay));\n that._selectable();\n },\n options: {\n name: 'VirtualList',\n autoBind: true,\n delay: 100,\n height: null,\n listScreens: 4,\n threshold: 0.5,\n itemHeight: null,\n oppositeBuffer: 1,\n type: 'flat',\n selectable: false,\n value: [],\n dataValueField: null,\n template: '#:data#',\n placeholderTemplate: 'loading...',\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n mapValueTo: 'index',\n valueMapper: null\n },\n events: [\n CHANGE,\n CLICK,\n LISTBOUND,\n ITEMCHANGE,\n ACTIVATE,\n DEACTIVATE\n ],\n setOptions: function (options) {\n Widget.fn.setOptions.call(this, options);\n if (this._selectProxy && this.options.selectable === false) {\n this.element.off(CLICK, '.' + VIRTUALITEM, this._selectProxy);\n } else if (!this._selectProxy && this.options.selectable) {\n this._selectable();\n }\n this._templates();\n this.refresh();\n },\n items: function () {\n return $(this._items);\n },\n destroy: function () {\n this.wrapper.off(VIRTUAL_LIST_NS);\n this.dataSource.unbind(CHANGE, this._refreshHandler);\n Widget.fn.destroy.call(this);\n },\n setDataSource: function (source) {\n var that = this;\n var dataSource = source || {};\n var value;\n dataSource = $.isArray(dataSource) ? { data: dataSource } : dataSource;\n dataSource = kendo.data.DataSource.create(dataSource);\n if (that.dataSource) {\n that.dataSource.unbind(CHANGE, that._refreshHandler);\n that._clean();\n that.bound(false);\n that._deferValueSet = true;\n value = that.value();\n that.value([]);\n that.mute(function () {\n that.value(value);\n });\n } else {\n that._refreshHandler = $.proxy(that.refresh, that);\n }\n that.dataSource = dataSource.bind(CHANGE, that._refreshHandler);\n that.setDSFilter(dataSource.filter());\n if (dataSource.view().length !== 0) {\n that.refresh();\n } else if (that.options.autoBind) {\n dataSource.fetch();\n }\n },\n skip: function () {\n return this.dataSource.currentRangeStart();\n },\n _triggerListBound: function () {\n var that = this;\n var skip = that.skip();\n if (that.bound() && !that._selectingValue && that._skip !== skip) {\n that._skip = skip;\n that.trigger(LISTBOUND);\n }\n },\n _getValues: function (dataItems) {\n var getter = this._valueGetter;\n return $.map(dataItems, function (dataItem) {\n return getter(dataItem);\n });\n },\n _highlightSelectedItems: function () {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n if (item.length) {\n item.addClass(SELECTED);\n }\n }\n },\n refresh: function (e) {\n var that = this;\n var action = e && e.action;\n var isItemChange = action === 'itemchange';\n var filtered = this.isFiltered();\n var result;\n if (that._mute) {\n return;\n }\n that._deferValueSet = false;\n if (!that._fetching) {\n if (filtered) {\n that.focus(0);\n }\n that._createList();\n if (!action && that._values.length && !filtered && !that.options.skipUpdateOnBind && !that._emptySearch) {\n that._selectingValue = true;\n that.bound(true);\n that.value(that._values, true).done(function () {\n that._selectingValue = false;\n that._triggerListBound();\n });\n } else {\n that.bound(true);\n that._highlightSelectedItems();\n that._triggerListBound();\n }\n } else {\n if (that._renderItems) {\n that._renderItems(true);\n }\n that._triggerListBound();\n }\n if (isItemChange || action === 'remove') {\n result = mapChangedItems(that._selectedDataItems, e.items);\n if (result.changed.length) {\n if (isItemChange) {\n that.trigger('selectedItemChange', { items: result.changed });\n } else {\n that.value(that._getValues(result.unchanged));\n }\n }\n }\n that._fetching = false;\n },\n removeAt: function (position) {\n this._selectedIndexes.splice(position, 1);\n this._values.splice(position, 1);\n return {\n position: position,\n dataItem: this._selectedDataItems.splice(position, 1)[0]\n };\n },\n setValue: function (value) {\n this._values = toArray(value);\n },\n value: function (value, _forcePrefetch) {\n var that = this;\n if (value === undefined) {\n return that._values.slice();\n }\n if (value === null) {\n value = [];\n }\n value = toArray(value);\n if (!that._valueDeferred || that._valueDeferred.state() === 'resolved') {\n that._valueDeferred = $.Deferred();\n }\n var shouldClear = that.options.selectable === 'multiple' && that.select().length && value.length;\n if (shouldClear || !value.length) {\n that.select(-1);\n }\n that._values = value;\n if (that.bound() && !that._mute && !that._deferValueSet || _forcePrefetch) {\n that._prefetchByValue(value);\n }\n return that._valueDeferred;\n },\n _checkValuesOrder: function (value) {\n if (this._removedAddedIndexes && this._removedAddedIndexes.length === value.length) {\n var newValue = this._removedAddedIndexes.slice();\n this._removedAddedIndexes = null;\n return newValue;\n }\n return value;\n },\n _prefetchByValue: function (value) {\n var that = this, dataView = that._dataView, valueGetter = that._valueGetter, mapValueTo = that.options.mapValueTo, item, match = false, forSelection = [];\n for (var i = 0; i < value.length; i++) {\n for (var idx = 0; idx < dataView.length; idx++) {\n item = dataView[idx].item;\n if (item) {\n match = isPrimitive(item) ? value[i] === item : value[i] === valueGetter(item);\n if (match) {\n forSelection.push(dataView[idx].index);\n }\n }\n }\n }\n if (forSelection.length === value.length) {\n that._values = [];\n that.select(forSelection);\n return;\n }\n if (typeof that.options.valueMapper === 'function') {\n that.options.valueMapper({\n value: this.options.selectable === 'multiple' ? value : value[0],\n success: function (response) {\n if (mapValueTo === 'index') {\n that.mapValueToIndex(response);\n } else if (mapValueTo === 'dataItem') {\n that.mapValueToDataItem(response);\n }\n }\n });\n } else {\n if (!that.value()[0]) {\n that.select([-1]);\n } else {\n that._selectingValue = false;\n that._triggerListBound();\n }\n }\n },\n mapValueToIndex: function (indexes) {\n if (indexes === undefined || indexes === -1 || indexes === null) {\n indexes = [];\n } else {\n indexes = toArray(indexes);\n }\n if (!indexes.length) {\n indexes = [-1];\n } else {\n var removed = this._deselect([]).removed;\n if (removed.length) {\n this._triggerChange(removed, []);\n }\n }\n this.select(indexes);\n },\n mapValueToDataItem: function (dataItems) {\n var removed, added;\n if (dataItems === undefined || dataItems === null) {\n dataItems = [];\n } else {\n dataItems = toArray(dataItems);\n }\n if (!dataItems.length) {\n this.select([-1]);\n } else {\n removed = $.map(this._selectedDataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n added = $.map(dataItems, function (item, index) {\n return {\n index: index,\n dataItem: item\n };\n });\n this._selectedDataItems = dataItems;\n this._selectedIndexes = [];\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n var item = this._getElementByDataItem(this._selectedDataItems[i]);\n this._selectedIndexes.push(this._getIndecies(item)[0]);\n item.addClass(SELECTED);\n }\n this._triggerChange(removed, added);\n if (this._valueDeferred) {\n this._valueDeferred.resolve();\n }\n }\n },\n deferredRange: function (index) {\n var dataSource = this.dataSource;\n var take = this.itemCount;\n var ranges = this._rangesList;\n var result = $.Deferred();\n var defs = [];\n var low = Math.floor(index / take) * take;\n var high = Math.ceil(index / take) * take;\n var pages = high === low ? [high] : [\n low,\n high\n ];\n $.each(pages, function (_, skip) {\n var end = skip + take;\n var existingRange = ranges[skip];\n var deferred;\n if (!existingRange || existingRange.end !== end) {\n deferred = $.Deferred();\n ranges[skip] = {\n end: end,\n deferred: deferred\n };\n dataSource._multiplePrefetch(skip, take, function () {\n deferred.resolve();\n });\n } else {\n deferred = existingRange.deferred;\n }\n defs.push(deferred);\n });\n $.when.apply($, defs).then(function () {\n result.resolve();\n });\n return result;\n },\n prefetch: function (indexes) {\n var that = this, take = this.itemCount, isEmptyList = !that._promisesList.length;\n if (!isActivePromise(that._activeDeferred)) {\n that._activeDeferred = $.Deferred();\n that._promisesList = [];\n }\n $.each(indexes, function (_, index) {\n that._promisesList.push(that.deferredRange(that._getSkip(index, take)));\n });\n if (isEmptyList) {\n $.when.apply($, that._promisesList).done(function () {\n that._promisesList = [];\n that._activeDeferred.resolve();\n });\n }\n return that._activeDeferred;\n },\n _findDataItem: function (view, index) {\n var group;\n if (this.options.type === 'group') {\n for (var i = 0; i < view.length; i++) {\n group = view[i].items;\n if (group.length <= index) {\n index = index - group.length;\n } else {\n return group[index];\n }\n }\n }\n return view[index];\n },\n _getRange: function (skip, take) {\n return this.dataSource._findRange(skip, Math.min(skip + take, this.dataSource.total()));\n },\n dataItemByIndex: function (index) {\n var that = this;\n var take = that.itemCount;\n var skip = that._getSkip(index, take);\n var view = this._getRange(skip, take);\n if (!that._getRange(skip, take).length) {\n return null;\n }\n if (that.options.type === 'group') {\n kendo.ui.progress($(that.wrapper), true);\n that.mute(function () {\n that.dataSource.range(skip, take, function () {\n kendo.ui.progress($(that.wrapper), false);\n });\n view = that.dataSource.view();\n });\n }\n return that._findDataItem(view, [index - skip]);\n },\n selectedDataItems: function () {\n return this._selectedDataItems.slice();\n },\n scrollWith: function (value) {\n this.content.scrollTop(this.content.scrollTop() + value);\n },\n scrollTo: function (y) {\n this.content.scrollTop(y);\n },\n scrollToIndex: function (index) {\n this.scrollTo(index * this.options.itemHeight);\n },\n focus: function (candidate) {\n var element, index, data, current, itemHeight = this.options.itemHeight, id = this._optionID, triggerEvent = true;\n if (candidate === undefined) {\n current = this.element.find('.' + FOCUSED);\n return current.length ? current : null;\n }\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n break;\n }\n }\n }\n if (candidate instanceof Array) {\n candidate = lastFrom(candidate);\n }\n if (isNaN(candidate)) {\n element = $(candidate);\n index = parseInt($(element).attr('data-offset-index'), 10);\n } else {\n index = candidate;\n element = this._getElementByIndex(index);\n }\n if (index === -1) {\n this.element.find('.' + FOCUSED).removeClass(FOCUSED);\n this._focusedIndex = undefined;\n return;\n }\n if (element.length) {\n if (element.hasClass(FOCUSED)) {\n triggerEvent = false;\n }\n if (this._focusedIndex !== undefined) {\n current = this._getElementByIndex(this._focusedIndex);\n current.removeClass(FOCUSED).removeAttr('id');\n if (triggerEvent) {\n this.trigger(DEACTIVATE);\n }\n }\n this._focusedIndex = index;\n element.addClass(FOCUSED).attr('id', id);\n var position = this._getElementLocation(index);\n if (position === 'top') {\n this.scrollTo(index * itemHeight);\n } else if (position === 'bottom') {\n this.scrollTo(index * itemHeight + itemHeight - this._screenHeight);\n } else if (position === 'outScreen') {\n this.scrollTo(index * itemHeight);\n }\n if (triggerEvent) {\n this.trigger(ACTIVATE);\n }\n } else {\n this._focusedIndex = index;\n this.items().removeClass(FOCUSED);\n this.scrollToIndex(index);\n }\n },\n focusIndex: function () {\n return this._focusedIndex;\n },\n focusFirst: function () {\n this.scrollTo(0);\n this.focus(0);\n },\n focusLast: function () {\n var lastIndex = this.dataSource.total();\n this.scrollTo(this.heightContainer.offsetHeight);\n this.focus(lastIndex - 1);\n },\n focusPrev: function () {\n var index = this._focusedIndex;\n var current;\n if (!isNaN(index) && index > 0) {\n index -= 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index += 1;\n this.focus(index);\n }\n return index;\n } else {\n index = this.dataSource.total() - 1;\n this.focus(index);\n return index;\n }\n },\n focusNext: function () {\n var index = this._focusedIndex;\n var lastIndex = this.dataSource.total() - 1;\n var current;\n if (!isNaN(index) && index < lastIndex) {\n index += 1;\n this.focus(index);\n current = this.focus();\n if (current && current.hasClass('k-loading-item')) {\n index -= 1;\n this.focus(index);\n }\n return index;\n } else {\n index = 0;\n this.focus(index);\n return index;\n }\n },\n _triggerChange: function (removed, added) {\n removed = removed || [];\n added = added || [];\n if (removed.length || added.length) {\n this.trigger(CHANGE, {\n removed: removed,\n added: added\n });\n }\n },\n select: function (candidate) {\n var that = this, indices, initialIndices, singleSelection = that.options.selectable !== 'multiple', prefetchStarted = isActivePromise(that._activeDeferred), filtered = this.isFiltered(), isAlreadySelected, deferred, result, removed = [];\n if (candidate === undefined) {\n return that._selectedIndexes.slice();\n }\n if (!that._selectDeferred || that._selectDeferred.state() === 'resolved') {\n that._selectDeferred = $.Deferred();\n }\n indices = that._getIndecies(candidate);\n isAlreadySelected = singleSelection && !filtered && lastFrom(indices) === lastFrom(this._selectedIndexes);\n removed = that._deselectCurrentValues(indices);\n if (removed.length || !indices.length || isAlreadySelected) {\n that._triggerChange(removed);\n if (that._valueDeferred) {\n that._valueDeferred.resolve().promise();\n }\n return that._selectDeferred.resolve().promise();\n }\n if (indices.length === 1 && indices[0] === -1) {\n indices = [];\n }\n initialIndices = indices;\n result = that._deselect(indices);\n removed = result.removed;\n indices = result.indices;\n if (singleSelection) {\n prefetchStarted = false;\n if (indices.length) {\n indices = [lastFrom(indices)];\n }\n }\n var done = function () {\n var added = that._select(indices);\n if (initialIndices.length === indices.length || singleSelection) {\n that.focus(indices);\n }\n that._triggerChange(removed, added);\n if (that._valueDeferred) {\n that._valueDeferred.resolve();\n }\n that._selectDeferred.resolve();\n };\n deferred = that.prefetch(indices);\n if (!prefetchStarted) {\n if (deferred) {\n deferred.done(done);\n } else {\n done();\n }\n }\n return that._selectDeferred.promise();\n },\n bound: function (bound) {\n if (bound === undefined) {\n return this._listCreated;\n }\n this._listCreated = bound;\n },\n mute: function (callback) {\n this._mute = true;\n proxy(callback(), this);\n this._mute = false;\n },\n setDSFilter: function (filter) {\n this._lastDSFilter = $.extend({}, filter);\n },\n isFiltered: function () {\n if (!this._lastDSFilter) {\n this.setDSFilter(this.dataSource.filter());\n }\n return !kendo.data.Query.compareFilters(this.dataSource.filter(), this._lastDSFilter);\n },\n skipUpdate: $.noop,\n _getElementByIndex: function (index) {\n return this.items().filter(function (idx, element) {\n return index === parseInt($(element).attr('data-offset-index'), 10);\n });\n },\n _getElementByDataItem: function (dataItem) {\n var dataView = this._dataView, valueGetter = this._valueGetter, element, match;\n for (var i = 0; i < dataView.length; i++) {\n match = dataView[i].item && isPrimitive(dataView[i].item) ? dataView[i].item === dataItem : dataView[i].item && dataItem && valueGetter(dataView[i].item) == valueGetter(dataItem);\n if (match) {\n element = dataView[i];\n break;\n }\n }\n return element ? this._getElementByIndex(element.index) : $();\n },\n _clean: function () {\n this.result = undefined;\n this._lastScrollTop = undefined;\n this._skip = undefined;\n $(this.heightContainer).remove();\n this.heightContainer = undefined;\n this.element.empty();\n },\n _height: function () {\n var hasData = !!this.dataSource.view().length, height = this.options.height, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n if (!hasData) {\n height = 0;\n } else if (height / itemHeight > total) {\n height = total * itemHeight;\n }\n return height;\n },\n setScreenHeight: function () {\n var height = this._height();\n this.content.height(height);\n this._screenHeight = height;\n },\n screenHeight: function () {\n return this._screenHeight;\n },\n _getElementLocation: function (index) {\n var scrollTop = this.content.scrollTop(), screenHeight = this._screenHeight, itemHeight = this.options.itemHeight, yPosition = index * itemHeight, yDownPostion = yPosition + itemHeight, screenEnd = scrollTop + screenHeight, position;\n if (yPosition === scrollTop - itemHeight || yDownPostion > scrollTop && yPosition < scrollTop) {\n position = 'top';\n } else if (yPosition === screenEnd || yPosition < screenEnd && screenEnd < yDownPostion) {\n position = 'bottom';\n } else if (yPosition >= scrollTop && yPosition <= scrollTop + (screenHeight - itemHeight)) {\n position = 'inScreen';\n } else {\n position = 'outScreen';\n }\n return position;\n },\n _templates: function () {\n var options = this.options;\n var templates = {\n template: options.template,\n placeholderTemplate: options.placeholderTemplate,\n groupTemplate: options.groupTemplate,\n fixedGroupTemplate: options.fixedGroupTemplate\n };\n if (options.columns) {\n for (var i = 0; i < options.columns.length; i++) {\n var currentColumn = options.columns[i];\n var templateText = currentColumn.field ? currentColumn.field.toString() : 'text';\n templates['column' + i] = currentColumn.template || '#: ' + templateText + '#';\n }\n }\n for (var key in templates) {\n if (typeof templates[key] !== 'function') {\n templates[key] = kendo.template(templates[key] || '');\n }\n }\n this.templates = templates;\n },\n _generateItems: function (element, count) {\n var items = [], item, itemHeight = this.options.itemHeight + 'px';\n while (count-- > 0) {\n item = document.createElement('li');\n item.tabIndex = -1;\n item.className = VIRTUALITEM + ' ' + ITEM;\n item.setAttribute('role', 'option');\n item.style.height = itemHeight;\n item.style.minHeight = itemHeight;\n element.appendChild(item);\n items.push(item);\n }\n return items;\n },\n _saveInitialRanges: function () {\n var ranges = this.dataSource._ranges;\n var deferred = $.Deferred();\n deferred.resolve();\n this._rangesList = {};\n for (var i = 0; i < ranges.length; i++) {\n this._rangesList[ranges[i].start] = {\n end: ranges[i].end,\n deferred: deferred\n };\n }\n },\n _createList: function () {\n var that = this, content = that.content.get(0), options = that.options, dataSource = that.dataSource;\n if (that.bound()) {\n that._clean();\n }\n that._saveInitialRanges();\n that._buildValueGetter();\n that.setScreenHeight();\n that.itemCount = getItemCount(that._screenHeight, options.listScreens, options.itemHeight);\n if (that.itemCount > dataSource.total()) {\n that.itemCount = dataSource.total();\n }\n that._items = that._generateItems(that.element[0], that.itemCount);\n that._setHeight(options.itemHeight * dataSource.total());\n that.options.type = (dataSource.group() || []).length ? 'group' : 'flat';\n if (that.options.type === 'flat') {\n that.header.hide();\n } else {\n that.header.show();\n }\n that.getter = that._getter(function () {\n that._renderItems(true);\n });\n that._onScroll = function (scrollTop, force) {\n var getList = that._listItems(that.getter);\n return that._fixedHeader(scrollTop, getList(scrollTop, force));\n };\n that._renderItems = that._whenChanged(scrollCallback(content, that._onScroll), syncList(that._reorderList(that._items, $.proxy(render, that))));\n that._renderItems();\n that._calculateGroupPadding(that._screenHeight);\n that._calculateColumnsHeaderPadding();\n },\n _setHeight: function (height) {\n var currentHeight, heightContainer = this.heightContainer;\n if (!heightContainer) {\n heightContainer = this.heightContainer = appendChild(this.content[0], HEIGHTCONTAINER);\n } else {\n currentHeight = heightContainer.offsetHeight;\n }\n if (height !== currentHeight) {\n heightContainer.innerHTML = '';\n while (height > 0) {\n var padHeight = Math.min(height, 250000);\n appendChild(heightContainer).style.height = padHeight + 'px';\n height -= padHeight;\n }\n }\n },\n _getter: function () {\n var lastRequestedRange = null, dataSource = this.dataSource, lastRangeStart = dataSource.skip(), type = this.options.type, pageSize = this.itemCount, flatGroups = {};\n if (dataSource.pageSize() < pageSize) {\n this.mute(function () {\n dataSource.pageSize(pageSize);\n });\n }\n return function (index, rangeStart) {\n var that = this;\n if (!dataSource.inRange(rangeStart, pageSize)) {\n if (lastRequestedRange !== rangeStart) {\n lastRequestedRange = rangeStart;\n lastRangeStart = rangeStart;\n if (that._getterDeferred) {\n that._getterDeferred.reject();\n }\n that._getterDeferred = that.deferredRange(rangeStart);\n that._getterDeferred.then(function () {\n var firstItemIndex = that._indexConstraint(that.content[0].scrollTop);\n that._getterDeferred = null;\n if (rangeStart <= firstItemIndex && firstItemIndex <= rangeStart + pageSize) {\n that._fetching = true;\n dataSource.range(rangeStart, pageSize);\n }\n });\n }\n return null;\n } else {\n if (lastRangeStart !== rangeStart) {\n this.mute(function () {\n dataSource.range(rangeStart, pageSize);\n lastRangeStart = rangeStart;\n });\n }\n var result;\n if (type === 'group') {\n if (!flatGroups[rangeStart]) {\n var flatGroup = flatGroups[rangeStart] = [];\n var groups = dataSource.view();\n for (var i = 0, len = groups.length; i < len; i++) {\n var group = groups[i];\n for (var j = 0, groupLength = group.items.length; j < groupLength; j++) {\n flatGroup.push({\n item: group.items[j],\n group: group.value\n });\n }\n }\n }\n result = flatGroups[rangeStart][index - rangeStart];\n } else {\n result = dataSource.view()[index - rangeStart];\n }\n return result;\n }\n };\n },\n _fixedHeader: function (scrollTop, list) {\n var group = this.currentVisibleGroup, itemHeight = this.options.itemHeight, firstVisibleDataItemIndex = Math.floor((scrollTop - list.top) / itemHeight), firstVisibleDataItem = list.items[firstVisibleDataItemIndex];\n if (firstVisibleDataItem && firstVisibleDataItem.item) {\n var firstVisibleGroup = firstVisibleDataItem.group;\n if (firstVisibleGroup !== group) {\n var fixedGroupText = firstVisibleGroup || '';\n this.header.html(this.templates.fixedGroupTemplate(fixedGroupText));\n this.currentVisibleGroup = firstVisibleGroup;\n }\n }\n return list;\n },\n _itemMapper: function (item, index, value) {\n var listType = this.options.type, itemHeight = this.options.itemHeight, currentIndex = this._focusedIndex, selected = false, current = false, newGroup = false, group = null, match = false, valueGetter = this._valueGetter;\n if (listType === 'group') {\n if (item) {\n newGroup = index === 0 || this._currentGroup !== false && this._currentGroup !== item.group;\n this._currentGroup = item.group;\n }\n group = item ? item.group : null;\n item = item ? item.item : null;\n }\n if (this.options.mapValueTo === 'dataItem' && this._selectedDataItems.length && item) {\n for (var i = 0; i < this._selectedDataItems.length; i++) {\n match = valueGetter(this._selectedDataItems[i]) === valueGetter(item);\n if (match) {\n selected = true;\n break;\n }\n }\n } else if (!this.isFiltered() && value.length && item) {\n for (var j = 0; j < value.length; j++) {\n match = isPrimitive(item) ? value[j] === item : value[j] === valueGetter(item);\n if (match) {\n value.splice(j, 1);\n selected = true;\n break;\n }\n }\n }\n if (currentIndex === index) {\n current = true;\n }\n return {\n item: item ? item : null,\n group: group,\n newGroup: newGroup,\n selected: selected,\n current: current,\n index: index,\n top: index * itemHeight\n };\n },\n _range: function (index) {\n var itemCount = this.itemCount, value = this._values.slice(), items = [], item;\n this._view = {};\n this._currentGroup = false;\n for (var i = index, length = index + itemCount; i < length; i++) {\n item = this._itemMapper(this.getter(i, index), i, value);\n if (items[items.length - 1]) {\n items[items.length - 1].isLastGroupedItem = item.newGroup;\n }\n items.push(item);\n this._view[item.index] = item;\n }\n this._dataView = items;\n return items;\n },\n _getDataItemsCollection: function (scrollTop, lastScrollTop) {\n var items = this._range(this._listIndex(scrollTop, lastScrollTop));\n return {\n index: items.length ? items[0].index : 0,\n top: items.length ? items[0].top : 0,\n items: items\n };\n },\n _listItems: function () {\n var screenHeight = this._screenHeight, options = this.options;\n var theValidator = listValidator(options, screenHeight);\n return $.proxy(function (value, force) {\n var result = this.result, lastScrollTop = this._lastScrollTop;\n if (force || !result || !theValidator(result, value, lastScrollTop)) {\n result = this._getDataItemsCollection(value, lastScrollTop);\n }\n this._lastScrollTop = value;\n this.result = result;\n return result;\n }, this);\n },\n _whenChanged: function (getter, callback) {\n var current;\n return function (force) {\n var theNew = getter(force);\n if (theNew !== current) {\n current = theNew;\n callback(theNew, force);\n }\n };\n },\n _reorderList: function (list, reorder) {\n var that = this;\n var length = list.length;\n var currentOffset = -Infinity;\n reorder = $.proxy(map2(reorder, this.templates), this);\n return function (list2, offset, force) {\n var diff = offset - currentOffset;\n var range, range2;\n if (force || Math.abs(diff) >= length) {\n range = list;\n range2 = list2;\n } else {\n range = reshift(list, diff);\n range2 = diff > 0 ? list2.slice(-diff) : list2.slice(0, -diff);\n }\n reorder(range, range2, that.bound());\n currentOffset = offset;\n };\n },\n _bufferSizes: function () {\n var options = this.options;\n return bufferSizes(this._screenHeight, options.listScreens, options.oppositeBuffer);\n },\n _indexConstraint: function (position) {\n var itemCount = this.itemCount, itemHeight = this.options.itemHeight, total = this.dataSource.total();\n return Math.min(Math.max(total - itemCount, 0), Math.max(0, Math.floor(position / itemHeight)));\n },\n _listIndex: function (scrollTop, lastScrollTop) {\n var buffers = this._bufferSizes(), position;\n position = scrollTop - (scrollTop > lastScrollTop ? buffers.down : buffers.up);\n return this._indexConstraint(position);\n },\n _selectable: function () {\n if (this.options.selectable) {\n this._selectProxy = $.proxy(this, '_clickHandler');\n this.element.on(CLICK + VIRTUAL_LIST_NS, '.' + VIRTUALITEM, this._selectProxy);\n }\n },\n getElementIndex: function (element) {\n if (!(element instanceof jQuery)) {\n return undefined;\n }\n return parseInt(element.attr('data-offset-index'), 10);\n },\n _getIndecies: function (candidate) {\n var result = [], data;\n if (typeof candidate === 'function') {\n data = this.dataSource.flatView();\n for (var idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n result.push(idx);\n break;\n }\n }\n }\n if (typeof candidate === 'number') {\n result.push(candidate);\n }\n var elementIndex = this.getElementIndex(candidate);\n if (!isNaN(elementIndex)) {\n result.push(elementIndex);\n }\n if (candidate instanceof Array) {\n result = candidate;\n }\n return result;\n },\n _deselect: function (indices) {\n var removed = [], selectedIndex, dataItem, selectedIndexes = this._selectedIndexes, selectedDataItems = this._selectedDataItems, position = 0, selectable = this.options.selectable, removedindexesCounter = 0, valueGetter = this._valueGetter, item, match, result = null;\n indices = indices.slice();\n if (selectable === true || !indices.length) {\n for (var idx = 0; idx < selectedIndexes.length; idx++) {\n if (selectedIndexes[idx] !== undefined) {\n this._getElementByIndex(selectedIndexes[idx]).removeClass(SELECTED);\n } else if (selectedDataItems[idx]) {\n this._getElementByDataItem(selectedDataItems[idx]).removeClass(SELECTED);\n }\n removed.push({\n index: selectedIndexes[idx],\n position: idx,\n dataItem: selectedDataItems[idx]\n });\n }\n this._values = [];\n this._selectedDataItems = [];\n this._selectedIndexes = [];\n } else if (selectable === 'multiple') {\n for (var i = 0; i < indices.length; i++) {\n result = null;\n position = $.inArray(indices[i], selectedIndexes);\n dataItem = this.dataItemByIndex(indices[i]);\n if (position === -1 && dataItem) {\n for (var j = 0; j < selectedDataItems.length; j++) {\n match = isPrimitive(dataItem) ? selectedDataItems[j] === dataItem : valueGetter(selectedDataItems[j]) === valueGetter(dataItem);\n if (match) {\n item = this._getElementByIndex(indices[i]);\n result = this._deselectSingleItem(item, j, indices[i], removedindexesCounter);\n }\n }\n } else {\n selectedIndex = selectedIndexes[position];\n if (selectedIndex !== undefined) {\n item = this._getElementByIndex(selectedIndex);\n result = this._deselectSingleItem(item, position, selectedIndex, removedindexesCounter);\n }\n }\n if (result) {\n indices.splice(i, 1);\n removed.push(result);\n removedindexesCounter++;\n i--;\n }\n }\n }\n return {\n indices: indices,\n removed: removed\n };\n },\n _deselectSingleItem: function (item, position, selectedIndex, removedindexesCounter) {\n var dataItem;\n if (!item.hasClass('k-state-selected')) {\n return;\n }\n item.removeClass(SELECTED);\n this._values.splice(position, 1);\n this._selectedIndexes.splice(position, 1);\n dataItem = this._selectedDataItems.splice(position, 1)[0];\n return {\n index: selectedIndex,\n position: position + removedindexesCounter,\n dataItem: dataItem\n };\n },\n _deselectCurrentValues: function (indices) {\n var children = this.element[0].children;\n var value, index, position;\n var values = this._values;\n var removed = [];\n var idx = 0;\n var j;\n if (this.options.selectable !== 'multiple' || !this.isFiltered()) {\n return [];\n }\n if (indices[0] === -1) {\n $(children).removeClass('k-state-selected');\n removed = $.map(this._selectedDataItems.slice(0), function (dataItem, idx) {\n return {\n dataItem: dataItem,\n position: idx\n };\n });\n this._selectedIndexes = [];\n this._selectedDataItems = [];\n this._values = [];\n return removed;\n }\n for (; idx < indices.length; idx++) {\n position = -1;\n index = indices[idx];\n if (this.dataItemByIndex(index)) {\n value = this._valueGetter(this.dataItemByIndex(index));\n }\n for (j = 0; j < values.length; j++) {\n if (value == values[j]) {\n position = j;\n break;\n }\n }\n if (position > -1) {\n removed.push(this.removeAt(position));\n $(children[index]).removeClass('k-state-selected');\n }\n }\n return removed;\n },\n _getSkip: function (index, take) {\n var page = index < take ? 1 : Math.floor(index / take) + 1;\n return (page - 1) * take;\n },\n _select: function (indexes) {\n var that = this, singleSelection = this.options.selectable !== 'multiple', dataSource = this.dataSource, dataItem, oldSkip, take = this.itemCount, valueGetter = this._valueGetter, added = [];\n if (singleSelection) {\n that._selectedIndexes = [];\n that._selectedDataItems = [];\n that._values = [];\n }\n oldSkip = dataSource.skip();\n $.each(indexes, function (_, index) {\n var skip = that._getSkip(index, take);\n that.mute(function () {\n dataSource.range(skip, take);\n dataItem = that._findDataItem(dataSource.view(), [index - skip]);\n that._selectedIndexes.push(index);\n that._selectedDataItems.push(dataItem);\n that._values.push(isPrimitive(dataItem) ? dataItem : valueGetter(dataItem));\n added.push({\n index: index,\n dataItem: dataItem\n });\n that._getElementByIndex(index).addClass(SELECTED);\n dataSource.range(oldSkip, take);\n });\n });\n that._values = that._checkValuesOrder(that._values);\n return added;\n },\n _clickHandler: function (e) {\n var item = $(e.currentTarget);\n if (!e.isDefaultPrevented() && item.attr('data-uid')) {\n this.trigger(CLICK, { item: item });\n }\n },\n _buildValueGetter: function () {\n this._valueGetter = kendo.getter(this.options.dataValueField);\n },\n _calculateGroupPadding: function (height) {\n var firstItem = this.items().first(), groupHeader = this.header, padding = 0;\n if (groupHeader[0] && groupHeader[0].style.display !== 'none') {\n if (height !== 'auto') {\n padding = kendo.support.scrollbar();\n }\n padding += parseFloat(firstItem.css('border-right-width'), 10) + parseFloat(firstItem.children('.k-group').css('right'), 10);\n groupHeader.css('padding-right', padding);\n }\n },\n _calculateColumnsHeaderPadding: function () {\n if (this.options.columns && this.options.columns.length) {\n var isRtl = kendo.support.isRtl(this.wrapper);\n var scrollbar = kendo.support.scrollbar();\n var columnsHeader = this.content.parent().parent().find('.k-grid-header');\n var total = this.dataSource.total();\n columnsHeader.css(isRtl ? 'padding-left' : 'padding-right', total ? scrollbar : 0);\n }\n }\n });\n kendo.ui.VirtualList = VirtualList;\n kendo.ui.plugin(VirtualList);\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.dropdownlist', [\n 'kendo.list',\n 'kendo.mobile.scroller',\n 'kendo.virtuallist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'dropdownlist',\n name: 'DropDownList',\n category: 'web',\n description: 'The DropDownList widget displays a list of values and allows the selection of a single value from the list.',\n depends: ['list'],\n features: [\n {\n id: 'mobile-scroller',\n name: 'Mobile scroller',\n description: 'Support for kinetic scrolling in mobile device',\n depends: ['mobile.scroller']\n },\n {\n id: 'virtualization',\n name: 'VirtualList',\n description: 'Support for virtualization',\n depends: ['virtuallist']\n }\n ]\n };\n (function ($, undefined) {\n var kendo = window.kendo, ui = kendo.ui, List = ui.List, Select = ui.Select, support = kendo.support, activeElement = kendo._activeElement, ObservableObject = kendo.data.ObservableObject, keys = kendo.keys, ns = '.kendoDropDownList', nsFocusEvent = ns + 'FocusEvent', DISABLED = 'disabled', READONLY = 'readonly', CHANGE = 'change', FOCUSED = 'k-state-focused', DEFAULT = 'k-state-default', STATEDISABLED = 'k-state-disabled', ARIA_DISABLED = 'aria-disabled', CLICKEVENTS = 'click' + ns + ' touchend' + ns, HOVEREVENTS = 'mouseenter' + ns + ' mouseleave' + ns, TABINDEX = 'tabindex', STATE_FILTER = 'filter', STATE_ACCEPT = 'accept', MSG_INVALID_OPTION_LABEL = 'The `optionLabel` option is not valid due to missing fields. Define a custom optionLabel as shown here http://docs.telerik.com/kendo-ui/api/javascript/ui/dropdownlist#configuration-optionLabel', proxy = $.proxy;\n var DropDownList = Select.extend({\n init: function (element, options) {\n var that = this;\n var index = options && options.index;\n var optionLabel, text, disabled;\n that.ns = ns;\n options = $.isArray(options) ? { dataSource: options } : options;\n Select.fn.init.call(that, element, options);\n options = that.options;\n element = that.element.on('focus' + ns, proxy(that._focusHandler, that));\n that._focusInputHandler = $.proxy(that._focusInput, that);\n that.optionLabel = $();\n that._optionLabel();\n that._inputTemplate();\n that._reset();\n that._prev = '';\n that._word = '';\n that._wrapper();\n that._tabindex();\n that.wrapper.data(TABINDEX, that.wrapper.attr(TABINDEX));\n that._span();\n that._popup();\n that._mobile();\n that._dataSource();\n that._ignoreCase();\n that._filterHeader();\n that._aria();\n that.wrapper.attr('aria-live', 'polite');\n that._enable();\n that._attachFocusHandlers();\n that._oldIndex = that.selectedIndex = -1;\n if (index !== undefined) {\n options.index = index;\n }\n that._initialIndex = options.index;\n that.requireValueMapper(that.options);\n that._initList();\n that._cascade();\n that.one('set', function (e) {\n if (!e.sender.listView.bound() && that.hasOptionLabel()) {\n that._textAccessor(that._optionLabelText());\n }\n });\n if (options.autoBind) {\n that.dataSource.fetch();\n } else if (that.selectedIndex === -1) {\n text = options.text || '';\n if (!text) {\n optionLabel = options.optionLabel;\n if (optionLabel && options.index === 0) {\n text = optionLabel;\n } else if (that._isSelect) {\n text = element.children(':selected').text();\n }\n }\n that._textAccessor(text);\n }\n disabled = $(that.element).parents('fieldset').is(':disabled');\n if (disabled) {\n that.enable(false);\n }\n that.listView.bind('click', function (e) {\n e.preventDefault();\n });\n kendo.notify(that);\n },\n options: {\n name: 'DropDownList',\n enabled: true,\n autoBind: true,\n index: 0,\n text: null,\n value: null,\n delay: 500,\n height: 200,\n dataTextField: '',\n dataValueField: '',\n optionLabel: '',\n cascadeFrom: '',\n cascadeFromField: '',\n cascadeFromParentField: '',\n ignoreCase: true,\n animation: {},\n filter: 'none',\n minLength: 1,\n enforceMinLength: false,\n virtual: false,\n template: null,\n valueTemplate: null,\n optionLabelTemplate: null,\n groupTemplate: '#:data#',\n fixedGroupTemplate: '#:data#',\n autoWidth: false,\n popup: null\n },\n events: [\n 'open',\n 'close',\n CHANGE,\n 'select',\n 'filtering',\n 'dataBinding',\n 'dataBound',\n 'cascade',\n 'set'\n ],\n setOptions: function (options) {\n Select.fn.setOptions.call(this, options);\n this.listView.setOptions(this._listOptions(options));\n this._optionLabel();\n this._inputTemplate();\n this._accessors();\n this._filterHeader();\n this._enable();\n this._aria();\n if (!this.value() && this.hasOptionLabel()) {\n this.select(0);\n }\n },\n destroy: function () {\n var that = this;\n Select.fn.destroy.call(that);\n that.wrapper.off(ns);\n that.wrapper.off(nsFocusEvent);\n that.element.off(ns);\n that._inputWrapper.off(ns);\n that._arrow.off();\n that._arrow = null;\n that._arrowIcon = null;\n that.optionLabel.off();\n if (that.filterInput) {\n that.filterInput.off(nsFocusEvent);\n }\n },\n open: function () {\n var that = this;\n var isFiltered = that.dataSource.filter() ? that.dataSource.filter().filters.length > 0 : false;\n if (that.popup.visible()) {\n return;\n }\n if (!that.listView.bound() || that._state === STATE_ACCEPT) {\n that._open = true;\n that._state = 'rebind';\n if (that.filterInput) {\n that.filterInput.val('');\n that._prev = '';\n }\n if (that.filterInput && that.options.minLength !== 1 && !isFiltered) {\n that.refresh();\n that.popup.one('activate', that._focusInputHandler);\n that.popup.open();\n that._resizeFilterInput();\n } else {\n that._filterSource();\n }\n } else if (that._allowOpening()) {\n that._focusFilter = true;\n that.popup.one('activate', that._focusInputHandler);\n that.popup._hovered = true;\n that.popup.open();\n that._resizeFilterInput();\n that._focusItem();\n }\n },\n _focusInput: function () {\n this._focusElement(this.filterInput);\n },\n _resizeFilterInput: function () {\n var filterInput = this.filterInput;\n var originalPrevent = this._prevent;\n if (!filterInput) {\n return;\n }\n var isInputActive = this.filterInput[0] === activeElement();\n var caret = kendo.caret(this.filterInput[0])[0];\n this._prevent = true;\n filterInput.css('display', 'none').css('width', this.popup.element.css('width')).css('display', 'inline-block');\n if (isInputActive) {\n filterInput.focus();\n kendo.caret(filterInput[0], caret);\n }\n this._prevent = originalPrevent;\n },\n _allowOpening: function () {\n return this.hasOptionLabel() || this.filterInput || Select.fn._allowOpening.call(this);\n },\n toggle: function (toggle) {\n this._toggle(toggle, true);\n },\n current: function (candidate) {\n var current;\n if (candidate === undefined) {\n current = this.listView.focus();\n if (!current && this.selectedIndex === 0 && this.hasOptionLabel()) {\n return this.optionLabel;\n }\n return current;\n }\n this._focus(candidate);\n },\n dataItem: function (index) {\n var that = this;\n var dataItem = null;\n if (index === null) {\n return index;\n }\n if (index === undefined) {\n dataItem = that.listView.selectedDataItems()[0];\n } else {\n if (typeof index !== 'number') {\n if (that.options.virtual) {\n return that.dataSource.getByUid($(index).data('uid'));\n }\n if (index.hasClass('k-list-optionlabel')) {\n index = -1;\n } else {\n index = $(that.items()).index(index);\n }\n } else if (that.hasOptionLabel()) {\n index -= 1;\n }\n dataItem = that.dataSource.flatView()[index];\n }\n if (!dataItem) {\n dataItem = that._optionLabelDataItem();\n }\n return dataItem;\n },\n refresh: function () {\n this.listView.refresh();\n },\n text: function (text) {\n var that = this;\n var loweredText;\n var ignoreCase = that.options.ignoreCase;\n text = text === null ? '' : text;\n if (text !== undefined) {\n if (typeof text !== 'string') {\n that._textAccessor(text);\n return;\n }\n loweredText = ignoreCase ? text.toLowerCase() : text;\n that._select(function (data) {\n data = that._text(data);\n if (ignoreCase) {\n data = (data + '').toLowerCase();\n }\n return data === loweredText;\n }).done(function () {\n that._textAccessor(that.dataItem() || text);\n });\n } else {\n return that._textAccessor();\n }\n },\n _clearFilter: function () {\n $(this.filterInput).val('');\n Select.fn._clearFilter.call(this);\n },\n value: function (value) {\n var that = this;\n var listView = that.listView;\n var dataSource = that.dataSource;\n if (value === undefined) {\n value = that._accessor() || that.listView.value()[0];\n return value === undefined || value === null ? '' : value;\n }\n that.requireValueMapper(that.options, value);\n if (value || !that.hasOptionLabel()) {\n that._initialIndex = null;\n }\n this.trigger('set', { value: value });\n if (that._request && that.options.cascadeFrom && that.listView.bound()) {\n if (that._valueSetter) {\n dataSource.unbind(CHANGE, that._valueSetter);\n }\n that._valueSetter = proxy(function () {\n that.value(value);\n }, that);\n dataSource.one(CHANGE, that._valueSetter);\n return;\n }\n if (that._isFilterEnabled() && listView.bound() && listView.isFiltered()) {\n that._clearFilter();\n } else {\n that._fetchData();\n }\n listView.value(value).done(function () {\n that._old = that._valueBeforeCascade = that._accessor();\n that._oldIndex = that.selectedIndex;\n });\n },\n hasOptionLabel: function () {\n return this.optionLabel && !!this.optionLabel[0];\n },\n _optionLabel: function () {\n var that = this;\n var options = that.options;\n var optionLabel = options.optionLabel;\n var template = options.optionLabelTemplate;\n if (!optionLabel) {\n that.optionLabel.off().remove();\n that.optionLabel = $();\n return;\n }\n if (!template) {\n template = '#:';\n if (typeof optionLabel === 'string') {\n template += 'data';\n } else {\n template += kendo.expr(options.dataTextField, 'data');\n }\n template += '#';\n }\n if (typeof template !== 'function') {\n template = kendo.template(template);\n }\n that.optionLabelTemplate = template;\n if (!that.hasOptionLabel()) {\n that.optionLabel = $('<div class=\"k-list-optionlabel\"></div>').prependTo(that.list);\n }\n that.optionLabel.html(template(optionLabel)).off().on(CLICKEVENTS, proxy(that._click, that)).on(HOVEREVENTS, that._toggleHover);\n that.angular('compile', function () {\n return {\n elements: that.optionLabel,\n data: [{ dataItem: that._optionLabelDataItem() }]\n };\n });\n },\n _optionLabelText: function () {\n var optionLabel = this.options.optionLabel;\n return typeof optionLabel === 'string' ? optionLabel : this._text(optionLabel);\n },\n _optionLabelDataItem: function () {\n var that = this;\n var optionLabel = that.options.optionLabel;\n if (that.hasOptionLabel()) {\n return $.isPlainObject(optionLabel) ? new ObservableObject(optionLabel) : that._assignInstance(that._optionLabelText(), '');\n }\n return undefined;\n },\n _buildOptions: function (data) {\n var that = this;\n if (!that._isSelect) {\n return;\n }\n var value = that.listView.value()[0];\n var optionLabel = that._optionLabelDataItem();\n var optionLabelValue = optionLabel && that._value(optionLabel);\n if (value === undefined || value === null) {\n value = '';\n }\n if (optionLabel) {\n if (optionLabelValue === undefined || optionLabelValue === null) {\n optionLabelValue = '';\n }\n optionLabel = '<option value=\"' + optionLabelValue + '\">' + that._text(optionLabel) + '</option>';\n }\n that._options(data, optionLabel, value);\n if (value !== List.unifyType(that._accessor(), typeof value)) {\n that._customOption = null;\n that._custom(value);\n }\n },\n _listBound: function () {\n var that = this;\n var initialIndex = that._initialIndex;\n var filtered = that._state === STATE_FILTER;\n var data = that.dataSource.flatView();\n var dataItem;\n that._presetValue = false;\n that._renderFooter();\n that._renderNoData();\n that._toggleNoData(!data.length);\n that._resizePopup(true);\n that.popup.position();\n that._buildOptions(data);\n that._makeUnselectable();\n if (!filtered) {\n if (that._open) {\n that.toggle(that._allowOpening());\n }\n that._open = false;\n if (!that._fetch) {\n if (data.length) {\n if (!that.listView.value().length && initialIndex > -1 && initialIndex !== null) {\n that.select(initialIndex);\n }\n that._initialIndex = null;\n dataItem = that.listView.selectedDataItems()[0];\n if (dataItem && that.text() !== that._text(dataItem)) {\n that._selectValue(dataItem);\n }\n } else if (that._textAccessor() !== that._optionLabelText()) {\n that.listView.value('');\n that._selectValue(null);\n that._oldIndex = that.selectedIndex;\n }\n }\n }\n that._hideBusy();\n that.trigger('dataBound');\n },\n _listChange: function () {\n this._selectValue(this.listView.selectedDataItems()[0]);\n if (this._presetValue || this._old && this._oldIndex === -1) {\n this._oldIndex = this.selectedIndex;\n }\n },\n _filterPaste: function () {\n this._search();\n },\n _attachFocusHandlers: function () {\n var that = this;\n var wrapper = that.wrapper;\n wrapper.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n if (that.filterInput) {\n that.filterInput.on('focusin' + nsFocusEvent, proxy(that._focusinHandler, that)).on('focusout' + nsFocusEvent, proxy(that._focusoutHandler, that));\n }\n },\n _focusHandler: function () {\n this.wrapper.focus();\n },\n _focusinHandler: function () {\n this._inputWrapper.addClass(FOCUSED);\n this._prevent = false;\n },\n _focusoutHandler: function () {\n var that = this;\n var isIFrame = window.self !== window.top;\n if (!that._prevent) {\n clearTimeout(that._typingTimeout);\n if (support.mobileOS.ios && isIFrame) {\n that._change();\n } else {\n that._blur();\n }\n that._inputWrapper.removeClass(FOCUSED);\n that._prevent = true;\n that._open = false;\n that.element.blur();\n }\n },\n _wrapperMousedown: function () {\n this._prevent = !!this.filterInput;\n },\n _wrapperClick: function (e) {\n e.preventDefault();\n this.popup.unbind('activate', this._focusInputHandler);\n this._focused = this.wrapper;\n this._prevent = false;\n this._toggle();\n },\n _editable: function (options) {\n var that = this;\n var element = that.element;\n var disable = options.disable;\n var readonly = options.readonly;\n var wrapper = that.wrapper.add(that.filterInput).off(ns);\n var dropDownWrapper = that._inputWrapper.off(HOVEREVENTS);\n if (!readonly && !disable) {\n element.removeAttr(DISABLED).removeAttr(READONLY);\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED).on(HOVEREVENTS, that._toggleHover);\n wrapper.attr(TABINDEX, wrapper.data(TABINDEX)).attr(ARIA_DISABLED, false).on('keydown' + ns, proxy(that._keydown, that)).on(kendo.support.mousedown + ns, proxy(that._wrapperMousedown, that)).on('paste' + ns, proxy(that._filterPaste, that));\n that.wrapper.on('click' + ns, proxy(that._wrapperClick, that));\n if (!that.filterInput) {\n wrapper.on('keypress' + ns, proxy(that._keypress, that));\n } else {\n wrapper.on('input' + ns, proxy(that._search, that));\n }\n } else if (disable) {\n wrapper.removeAttr(TABINDEX);\n dropDownWrapper.addClass(STATEDISABLED).removeClass(DEFAULT);\n } else {\n dropDownWrapper.addClass(DEFAULT).removeClass(STATEDISABLED);\n }\n element.attr(DISABLED, disable).attr(READONLY, readonly);\n wrapper.attr(ARIA_DISABLED, disable);\n },\n _keydown: function (e) {\n var that = this;\n var key = e.keyCode;\n var altKey = e.altKey;\n var isInputActive;\n var handled;\n var isPopupVisible = that.popup.visible();\n if (that.filterInput) {\n isInputActive = that.filterInput[0] === activeElement();\n }\n if (key === keys.LEFT) {\n key = keys.UP;\n handled = true;\n } else if (key === keys.RIGHT) {\n key = keys.DOWN;\n handled = true;\n }\n if (handled && isInputActive) {\n return;\n }\n e.keyCode = key;\n if (altKey && key === keys.UP || key === keys.ESC) {\n that._focusElement(that.wrapper);\n }\n if (that._state === STATE_FILTER && key === keys.ESC) {\n that._clearFilter();\n that._open = false;\n that._state = STATE_ACCEPT;\n }\n if (key === keys.ENTER && that._typingTimeout && that.filterInput && isPopupVisible) {\n e.preventDefault();\n return;\n }\n if (key === keys.SPACEBAR && !isInputActive) {\n that.toggle(!isPopupVisible);\n e.preventDefault();\n }\n handled = that._move(e);\n if (handled) {\n return;\n }\n if (!isPopupVisible || !that.filterInput) {\n var current = that._focus();\n if (key === keys.HOME) {\n handled = true;\n that._firstItem();\n } else if (key === keys.END) {\n handled = true;\n that._lastItem();\n }\n if (handled) {\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._focus(current);\n return;\n }\n that._select(that._focus(), true).done(function () {\n if (!isPopupVisible) {\n that._blur();\n }\n });\n e.preventDefault();\n }\n }\n if (!altKey && !handled && that.filterInput) {\n that._search();\n }\n },\n _matchText: function (text, word) {\n var ignoreCase = this.options.ignoreCase;\n if (text === undefined || text === null) {\n return false;\n }\n text = text + '';\n if (ignoreCase) {\n text = text.toLowerCase();\n }\n return text.indexOf(word) === 0;\n },\n _shuffleData: function (data, splitIndex) {\n var optionDataItem = this._optionLabelDataItem();\n if (optionDataItem) {\n data = [optionDataItem].concat(data);\n }\n return data.slice(splitIndex).concat(data.slice(0, splitIndex));\n },\n _selectNext: function () {\n var that = this;\n var data = that.dataSource.flatView();\n var dataLength = data.length + (that.hasOptionLabel() ? 1 : 0);\n var isInLoop = sameCharsOnly(that._word, that._last);\n var startIndex = that.selectedIndex;\n var oldFocusedItem;\n var text;\n if (startIndex === -1) {\n startIndex = 0;\n } else {\n startIndex += isInLoop ? 1 : 0;\n startIndex = normalizeIndex(startIndex, dataLength);\n }\n data = data.toJSON ? data.toJSON() : data.slice();\n data = that._shuffleData(data, startIndex);\n for (var idx = 0; idx < dataLength; idx++) {\n text = that._text(data[idx]);\n if (isInLoop && that._matchText(text, that._last)) {\n break;\n } else if (that._matchText(text, that._word)) {\n break;\n }\n }\n if (idx !== dataLength) {\n oldFocusedItem = that._focus();\n that._select(normalizeIndex(startIndex + idx, dataLength)).done(function () {\n var done = function () {\n if (!that.popup.visible()) {\n that._change();\n }\n };\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(that._focus()),\n item: that._focus()\n })) {\n that._select(oldFocusedItem).done(done);\n } else {\n done();\n }\n });\n }\n },\n _keypress: function (e) {\n var that = this;\n if (e.which === 0 || e.keyCode === kendo.keys.ENTER) {\n return;\n }\n var character = String.fromCharCode(e.charCode || e.keyCode);\n if (that.options.ignoreCase) {\n character = character.toLowerCase();\n }\n if (character === ' ') {\n e.preventDefault();\n }\n that._word += character;\n that._last = character;\n that._search();\n },\n _popupOpen: function () {\n var popup = this.popup;\n popup.wrapper = kendo.wrap(popup.element);\n if (popup.element.closest('.km-root')[0]) {\n popup.wrapper.addClass('km-popup km-widget');\n this.wrapper.addClass('km-widget');\n }\n },\n _popup: function () {\n Select.fn._popup.call(this);\n this.popup.one('open', proxy(this._popupOpen, this));\n },\n _getElementDataItem: function (element) {\n if (!element || !element[0]) {\n return null;\n }\n if (element[0] === this.optionLabel[0]) {\n return this._optionLabelDataItem();\n }\n return this.listView.dataItemByIndex(this.listView.getElementIndex(element));\n },\n _click: function (e) {\n var that = this;\n var item = e.item || $(e.currentTarget);\n e.preventDefault();\n if (that.trigger('select', {\n dataItem: that._getElementDataItem(item),\n item: item\n })) {\n that.close();\n return;\n }\n that._userTriggered = true;\n that._select(item).done(function () {\n that._focusElement(that.wrapper);\n that._blur();\n });\n },\n _focusElement: function (element) {\n var active = activeElement();\n var wrapper = this.wrapper;\n var filterInput = this.filterInput;\n var compareElement = element === filterInput ? wrapper : filterInput;\n var touchEnabled = support.mobileOS && (support.touch || support.MSPointers || support.pointers);\n if (filterInput && filterInput[0] === element[0] && touchEnabled) {\n return;\n }\n if (filterInput && (compareElement[0] === active || this._focusFilter)) {\n this._focusFilter = false;\n this._prevent = true;\n this._focused = element.focus();\n }\n },\n _searchByWord: function (word) {\n if (!word) {\n return;\n }\n var that = this;\n var ignoreCase = that.options.ignoreCase;\n if (ignoreCase) {\n word = word.toLowerCase();\n }\n that._select(function (dataItem) {\n return that._matchText(that._text(dataItem), word);\n });\n },\n _inputValue: function () {\n return this.text();\n },\n _search: function () {\n var that = this;\n var dataSource = that.dataSource;\n clearTimeout(that._typingTimeout);\n if (that._isFilterEnabled()) {\n that._typingTimeout = setTimeout(function () {\n var value = that.filterInput.val();\n if (that._prev !== value) {\n that._prev = value;\n that.search(value);\n that._resizeFilterInput();\n }\n that._typingTimeout = null;\n }, that.options.delay);\n } else {\n that._typingTimeout = setTimeout(function () {\n that._word = '';\n }, that.options.delay);\n if (!that.listView.bound()) {\n dataSource.fetch().done(function () {\n that._selectNext();\n });\n return;\n }\n that._selectNext();\n }\n },\n _get: function (candidate) {\n var data, found, idx;\n var isFunction = typeof candidate === 'function';\n var jQueryCandidate = !isFunction ? $(candidate) : $();\n if (this.hasOptionLabel()) {\n if (typeof candidate === 'number') {\n if (candidate > -1) {\n candidate -= 1;\n }\n } else if (jQueryCandidate.hasClass('k-list-optionlabel')) {\n candidate = -1;\n }\n }\n if (isFunction) {\n data = this.dataSource.flatView();\n for (idx = 0; idx < data.length; idx++) {\n if (candidate(data[idx])) {\n candidate = idx;\n found = true;\n break;\n }\n }\n if (!found) {\n candidate = -1;\n }\n }\n return candidate;\n },\n _firstItem: function () {\n if (this.hasOptionLabel()) {\n this._focus(this.optionLabel);\n } else {\n this.listView.focusFirst();\n }\n },\n _lastItem: function () {\n this._resetOptionLabel();\n this.listView.focusLast();\n },\n _nextItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n this._resetOptionLabel();\n this.listView.focusFirst();\n } else {\n this.listView.focusNext();\n }\n },\n _prevItem: function () {\n if (this.optionLabel.hasClass('k-state-focused')) {\n return;\n }\n this.listView.focusPrev();\n if (!this.listView.focus()) {\n this._focus(this.optionLabel);\n }\n },\n _focusItem: function () {\n var options = this.options;\n var listView = this.listView;\n var focusedItem = listView.focus();\n var index = listView.select();\n index = index[index.length - 1];\n if (index === undefined && options.highlightFirst && !focusedItem) {\n index = 0;\n }\n if (index !== undefined) {\n listView.focus(index);\n } else {\n if (options.optionLabel && (!options.virtual || options.virtual.mapValueTo !== 'dataItem')) {\n this._focus(this.optionLabel);\n this._select(this.optionLabel);\n this.listView.content.scrollTop(0);\n } else {\n listView.scrollToIndex(0);\n }\n }\n },\n _resetOptionLabel: function (additionalClass) {\n this.optionLabel.removeClass('k-state-focused' + (additionalClass || '')).removeAttr('id');\n },\n _focus: function (candidate) {\n var listView = this.listView;\n var optionLabel = this.optionLabel;\n if (candidate === undefined) {\n candidate = listView.focus();\n if (!candidate && optionLabel.hasClass('k-state-focused')) {\n candidate = optionLabel;\n }\n return candidate;\n }\n this._resetOptionLabel();\n candidate = this._get(candidate);\n listView.focus(candidate);\n if (candidate === -1) {\n optionLabel.addClass('k-state-focused').attr('id', listView._optionID);\n this._focused.add(this.filterInput).removeAttr('aria-activedescendant').attr('aria-activedescendant', listView._optionID);\n }\n },\n _select: function (candidate, keepState) {\n var that = this;\n candidate = that._get(candidate);\n return that.listView.select(candidate).done(function () {\n if (!keepState && that._state === STATE_FILTER) {\n that._state = STATE_ACCEPT;\n }\n if (candidate === -1) {\n that._selectValue(null);\n }\n });\n },\n _selectValue: function (dataItem) {\n var that = this;\n var optionLabel = that.options.optionLabel;\n var idx = that.listView.select();\n var value = '';\n var text = '';\n idx = idx[idx.length - 1];\n if (idx === undefined) {\n idx = -1;\n }\n this._resetOptionLabel(' k-state-selected');\n if (dataItem || dataItem === 0) {\n text = dataItem;\n value = that._dataValue(dataItem);\n if (optionLabel) {\n idx += 1;\n }\n } else if (optionLabel) {\n that._focus(that.optionLabel.addClass('k-state-selected'));\n text = that._optionLabelText();\n if (typeof optionLabel === 'string') {\n value = '';\n } else {\n value = that._value(optionLabel);\n }\n idx = 0;\n }\n that.selectedIndex = idx;\n if (value === null) {\n value = '';\n }\n that._textAccessor(text);\n that._accessor(value, idx);\n that._triggerCascade();\n },\n _mobile: function () {\n var that = this, popup = that.popup, mobileOS = support.mobileOS, root = popup.element.parents('.km-root').eq(0);\n if (root.length && mobileOS) {\n popup.options.animation.open.effects = mobileOS.android || mobileOS.meego ? 'fadeIn' : mobileOS.ios || mobileOS.wp ? 'slideIn:up' : popup.options.animation.open.effects;\n }\n },\n _filterHeader: function () {\n var icon;\n if (this.filterInput) {\n this.filterInput.off(ns).parent().remove();\n this.filterInput = null;\n }\n if (this._isFilterEnabled()) {\n icon = '<span class=\"k-icon k-i-zoom\"></span>';\n this.filterInput = $('<input class=\"k-textbox\"/>').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($('<span class=\"k-list-filter\" />').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('<span unselectable=\"on\" class=\"k-dropdown-wrap k-state-default\"><span unselectable=\"on\" class=\"k-input\"> </span><span unselectable=\"on\" class=\"k-select\" aria-label=\"select\"><span class=\"k-icon k-i-arrow-60-down\"></span></span></span>').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('<span />').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 = '<a class=\"k-button k-button-icontext #=className#\" href=\"\\\\#\"><span class=\"#=iconClass# #=imageClass#\"></span>#=text#</a>', 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 = $('<div />').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 = $('<div class=\\'k-layer\\'></div>').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 = $('<div/>').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 = $('<div/>');\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 = $('<div class=\"k-popup-edit-form\"/>').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($('<div class=\"k-edit-form-container\"/>').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 += '<div class=\"k-edit-label\"><label for=\"' + field.field + '\">' + (field.field || '') + '</label></div>';\n if (this._isEditable(field.field)) {\n form += '<div ' + kendo.attr('container-for') + '=\"' + field.field + '\" class=\"k-edit-field\"></div>';\n }\n }\n return form;\n },\n _renderButtons: function () {\n var form = '<div class=\"k-edit-buttons k-state-default\">';\n form += this._createButton('update');\n form += this._createButton('cancel');\n form += '</div>';\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 $('<input name=\\'' + options.field + '\\' />').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($('<div></div>').html(this._getText(item)));\n },\n _createTile: function (item) {\n var tile = $('<div class=\\'k-treemap-tile\\'></div>');\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 $('<div class=\\'k-treemap-title\\'></div>').append($('<div></div>').html(this._getText(item)));\n },\n _createWrap: function () {\n return $('<div class=\\'k-treemap-wrap\\'></div>');\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 = $('<div class=\\'k-treemap-title\\'></div>');\n } else {\n title = $('<div class=\\'k-treemap-title-vertical\\'></div>');\n }\n return title.append($('<div></div>').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() + '</' + tag + '>';\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 = '<span ng-bind=\\'' + kendo.expr(col.field, 'dataItem') + '\\'>#: ' + kendo.expr(col.field, settings.paramName) + '#</span>';\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 '<span data-' + kendo.ns + 'role=\\'view-title\\'>' + element.html() + '</span>';\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 '<div data-' + kendo.ns + 'role=\\'page\\'>' + element.html() + '</div>';\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}));"]}